From 4f5103b58d1d5039b8e89d7708f7f05f857213e9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 5 Sep 2023 01:13:45 +0000 Subject: [PATCH] Rebuild pages at 8ac834a9112b29d5e106be17c10aa1a7cfcc3a6f --- A1WAYSD_ip_master/authorship.json | 2 +- A1WAYSD_ip_master/commits.json | 2 +- AryanG01_ip_master/authorship.json | 2 +- AryanG01_ip_master/commits.json | 2 +- Carlintyj_ip_master/authorship.json | 2 +- Carlintyj_ip_master/commits.json | 2 +- Cleon2_ip_master/authorship.json | 2 +- Cleon2_ip_master/commits.json | 2 +- Elijah5399_ip_master/authorship.json | 2 +- Elijah5399_ip_master/commits.json | 2 +- Fallman2_ip_master/authorship.json | 2 +- Fallman2_ip_master/commits.json | 2 +- Gavino3o_ip_master/authorship.json | 2 +- Gavino3o_ip_master/commits.json | 2 +- GlendaChong_ip_master/authorship.json | 2 +- GlendaChong_ip_master/commits.json | 2 +- Goh-Li-Ting_ip_master/authorship.json | 2 +- Goh-Li-Ting_ip_master/commits.json | 2 +- JasonLCY-Temp_ip_master/authorship.json | 2 +- JasonLCY-Temp_ip_master/commits.json | 2 +- Jonyxzx_ip_master/authorship.json | 2 +- Jonyxzx_ip_master/commits.json | 2 +- Jweewee_ip_master/authorship.json | 2 +- Jweewee_ip_master/commits.json | 2 +- Kokseng1_ip_master/authorship.json | 2 +- Kokseng1_ip_master/commits.json | 2 +- LHeng1_ip_master/authorship.json | 2 +- LHeng1_ip_master/commits.json | 2 +- Leb14_ip_master/authorship.json | 2 +- Leb14_ip_master/commits.json | 2 +- LoMaply_ip_master/authorship.json | 2 +- LoMaply_ip_master/commits.json | 2 +- RSXIX_ip_master/authorship.json | 2 +- RSXIX_ip_master/commits.json | 2 +- RiyaMehta2211_ip_master/authorship.json | 2 +- RiyaMehta2211_ip_master/commits.json | 2 +- Sebtey_ip_master/commits.json | 2 +- SelwynAng_ip_master/authorship.json | 2 +- SelwynAng_ip_master/commits.json | 2 +- Tang-Moyan_ip_master/authorship.json | 2 +- Tang-Moyan_ip_master/commits.json | 2 +- WangCheng0116_ip_master/authorship.json | 2 +- WangCheng0116_ip_master/commits.json | 2 +- XihuaZ_ip_master/authorship.json | 2 +- XihuaZ_ip_master/commits.json | 2 +- alientian_ip_master/authorship.json | 2 +- alientian_ip_master/commits.json | 2 +- andrechuakj_ip_master/authorship.json | 2 +- andrechuakj_ip_master/commits.json | 2 +- anthonytamzil_ip_master/commits.json | 2 +- applepiofmyeye_ip_master/authorship.json | 2 +- applepiofmyeye_ip_master/commits.json | 2 +- archive.zip | Bin 7200418 -> 7289958 bytes dhruvir29_ip_master/authorship.json | 2 +- dhruvir29_ip_master/commits.json | 2 +- dlathyun_ip_master/authorship.json | 2 +- dlathyun_ip_master/commits.json | 2 +- evanyan13_ip_master/authorship.json | 2 +- evanyan13_ip_master/commits.json | 2 +- eyelessrhyme7_ip_master/authorship.json | 2 +- eyelessrhyme7_ip_master/commits.json | 2 +- geraldngjx_ip_master/authorship.json | 2 +- geraldngjx_ip_master/commits.json | 2 +- ivyy-poison_ip_master/authorship.json | 2 +- ivyy-poison_ip_master/commits.json | 2 +- jedkohjk_ip_master/authorship.json | 2 +- jedkohjk_ip_master/commits.json | 2 +- jonasongg_ip_master/authorship.json | 2 +- jonasongg_ip_master/commits.json | 2 +- ktzy0305_ip_master/authorship.json | 2 +- ktzy0305_ip_master/commits.json | 2 +- lynnlow175_ip_master/commits.json | 2 +- mamayuan_ip_master/authorship.json | 2 +- mamayuan_ip_master/commits.json | 2 +- marcellaantania_ip_master/authorship.json | 2 +- marcellaantania_ip_master/commits.json | 2 +- mingyuanc_ip_master/authorship.json | 2 +- mingyuanc_ip_master/commits.json | 2 +- mounilsankar_ip_master/authorship.json | 2 +- mounilsankar_ip_master/commits.json | 2 +- nananakx-x_ip_master/authorship.json | 2 +- nananakx-x_ip_master/commits.json | 2 +- nikele2001_ip_master/authorship.json | 2 +- nikele2001_ip_master/commits.json | 2 +- nixonwidjaja_ip_master/authorship.json | 2 +- nixonwidjaja_ip_master/commits.json | 2 +- nknguyenhc_ip_master/authorship.json | 2 +- nknguyenhc_ip_master/commits.json | 2 +- owenyeo_ip_master/commits.json | 2 +- papataco14_ip_master/authorship.json | 2 +- papataco14_ip_master/commits.json | 2 +- pra-navi_ip_master/commits.json | 2 +- reposense-logs/reposense.log.0 | 14344 ++++++++++---------- ruth-lim_ip_master/authorship.json | 2 +- ruth-lim_ip_master/commits.json | 2 +- ryanongwx_ip_master/authorship.json | 2 +- ryanongwx_ip_master/commits.json | 2 +- shishirbychapur_ip_master/authorship.json | 2 +- shishirbychapur_ip_master/commits.json | 2 +- simbayippy_ip_master/authorship.json | 2 +- simbayippy_ip_master/commits.json | 2 +- sopa301_ip_master/authorship.json | 2 +- sopa301_ip_master/commits.json | 2 +- summary.json | 2 +- tjch-o_ip_master/authorship.json | 2 +- tjch-o_ip_master/commits.json | 2 +- tllshan_ip_master/authorship.json | 2 +- tllshan_ip_master/commits.json | 2 +- yongning0310_ip_master/authorship.json | 2 +- yongning0310_ip_master/commits.json | 2 +- zacwong2151_ip_master/authorship.json | 2 +- zacwong2151_ip_master/commits.json | 2 +- zannloo_ip_master/authorship.json | 2 +- zannloo_ip_master/commits.json | 2 +- 114 files changed, 7284 insertions(+), 7284 deletions(-) diff --git a/A1WAYSD_ip_master/authorship.json b/A1WAYSD_ip_master/authorship.json index a69c2595..d3e51306 100644 --- a/A1WAYSD_ip_master/authorship.json +++ b/A1WAYSD_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":"A1WAYSD"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-30"},{"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":"A1WAYSD"},"content":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"checkstyleMain {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" source \u0027src/main/java\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"A1WAYSD"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"A1WAYSD":11,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"TODO | 0 | test","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"A1WAYSD":1}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":" * Represents an intelligent chat robot that helps a person to keep track of various things with encouraging quotes.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":" * Initializes the chat robot, loads past data from the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" * @param filePath the file path to load past data from.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":" * Runs the chat robot to start the interaction. Save data to file after user exits.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":" ui.run(new Parser(tasks));","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":" ui.showSavingError();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"A1WAYSD"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"A1WAYSD"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":48,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"A1WAYSD":46,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":" * Represents specific Duke exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":" * Constructs a DukeException with the specified detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":" * @param message the detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"A1WAYSD":15}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.TaskType;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":" * Represents a parser that parses user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" private boolean isRunning;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" * Initializes the parser with the specified task list and sets the running status to true.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" * @param tasks the task list to be used.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":" public Parser(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" this.isRunning \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" * Returns whether the parser is still running.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" public boolean isRunning() {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" return this.isRunning;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":" * Parses the user input and returns the corresponding message.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" * @param repeat the user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":" * @throws DukeException if the user input is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":" public String parse(String repeat) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" Pattern markPattern \u003d Pattern.compile(\"(mark|unmark|delete) (\\\\d+)\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":" Matcher markMatcher \u003d markPattern.matcher(repeat);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"A1WAYSD"},"content":" Pattern taskPattern \u003d Pattern.compile(\"(todo|deadline|event) (.+)\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"A1WAYSD"},"content":" Matcher taskMatcher \u003d taskPattern.matcher(repeat);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"A1WAYSD"},"content":" Pattern findPattern \u003d Pattern.compile(\"find (.+)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"A1WAYSD"},"content":" Matcher findMatcher \u003d findPattern.matcher(repeat);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"A1WAYSD"},"content":" if (repeat.contains(\"bye\") || repeat.contains(\"88\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"A1WAYSD"},"content":" this.isRunning \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"A1WAYSD"},"content":" return \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"A1WAYSD"},"content":" } else if (findMatcher.find()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"A1WAYSD"},"content":" return this.tasks.findTask(findMatcher.group(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"A1WAYSD"},"content":" } else if (markMatcher.matches()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"A1WAYSD"},"content":" String action \u003d markMatcher.group(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"A1WAYSD"},"content":" int taskIndex \u003d Integer.parseInt(markMatcher.group(2));","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"A1WAYSD"},"content":" if (action.equals(\"delete\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"A1WAYSD"},"content":" return this.tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"A1WAYSD"},"content":" boolean isDone \u003d markMatcher.group(1).equals(\"mark\");","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"A1WAYSD"},"content":" return this.tasks.markTask(taskIndex, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"A1WAYSD"},"content":" } else if (taskMatcher.matches()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"A1WAYSD"},"content":" return this.tasks.addTask(TaskType.valueOf(taskMatcher.group(1).toUpperCase()), taskMatcher.group(2));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"A1WAYSD"},"content":" } else if (repeat.contains(\"list\") || repeat.contains(\"List\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"A1WAYSD"},"content":" return this.tasks.getTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"undefined\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"A1WAYSD":68}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.TaskType;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" * Represents a storage that loads tasks from the specified file and saves tasks to the same file.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":"public class Storage {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" private String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" * Loads tasks from the specified file path. Create the folder if necessary.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" * @throws FileNotFoundException","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" public ArrayList\u003cTask\u003e load() throws FileNotFoundException {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" File folder \u003d new File(\"data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":" if (!folder.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" folder.mkdir();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":" File f \u003d new File(folder, \"duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":" tasks.add(addTask(s.nextLine()));","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"A1WAYSD"},"content":" private Task addTask(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"A1WAYSD"},"content":" TaskType taskType \u003d TaskType.valueOf(description.substring(0, description.indexOf(\" \")).toUpperCase());","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"A1WAYSD"},"content":" boolean isDone \u003d description.charAt(description.indexOf(\"|\") + 2) \u003d\u003d \u00271\u0027;","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"A1WAYSD"},"content":" String taskDescription \u003d description.substring(description.indexOf(\"|\") + 6);","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"A1WAYSD"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"A1WAYSD"},"content":" case TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"A1WAYSD"},"content":" return new ToDo(taskDescription, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"A1WAYSD"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"A1WAYSD"},"content":" String by \u003d taskDescription.substring(taskDescription.indexOf(\"|\") + 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"A1WAYSD"},"content":" taskDescription \u003d taskDescription.substring(0, taskDescription.indexOf(\"|\") - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"A1WAYSD"},"content":" return new Deadline(taskDescription, by, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"A1WAYSD"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"A1WAYSD"},"content":" int secondDividerIndex \u003d taskDescription.indexOf(\"|\", taskDescription.indexOf(\"|\") + 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"A1WAYSD"},"content":" String from \u003d taskDescription.substring(taskDescription.indexOf(\"|\") + 2, secondDividerIndex - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"A1WAYSD"},"content":" String to \u003d taskDescription.substring(secondDividerIndex + 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"A1WAYSD"},"content":" taskDescription \u003d taskDescription.substring(0, taskDescription.indexOf(\"|\") - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"A1WAYSD"},"content":" return new Event(taskDescription, from, to, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"A1WAYSD"},"content":" //TODO: update the file after each task creation/modification","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"A1WAYSD"},"content":" * Saves the specified task list to the specified file path. Create the file if necessary.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"A1WAYSD"},"content":" * @throws IOException","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"A1WAYSD"},"content":" public void save(TaskList taskList) throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"A1WAYSD"},"content":" String txt \u003d taskList.getTasksTxt();","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"A1WAYSD"},"content":" if (txt.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"A1WAYSD"},"content":" return;","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"A1WAYSD"},"content":" new File(filePath).createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"A1WAYSD"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"A1WAYSD"},"content":" fw.write(taskList.getTasksTxt());","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"A1WAYSD"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"A1WAYSD":80}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":" * Represents a user interface of the chat robot.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"Generating new chat session...\");","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" public void showSavingError() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"⚠ Oops! Something wrong when closing:(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" * Prints corresponding error message according to the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" * @param e the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":" public void handleException(DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" String message \u003d e.getMessage();","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" if (message.equals(\"undefined\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"⚠ Sorry! I am not able to understand you. Try another language:D\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":" } else if (message.equals(\"task not found\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"⚠ Oops! Cannot find task:(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" } else if (message.equals(\"todo error\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"⚠ Oops! Need description for the todo:(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" } else if (message.equals(\"deadline error\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"⚠ Oops! Need description and formatted by date for the deadline:(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" } else if (message.equals(\"event error\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"⚠ Oops! Need description, from and to date for the event:(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"⚠ Oops! Something went wrong:(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":" * Runs the UI to print start and ending messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" * @param p the parser.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"A1WAYSD"},"content":" public void run(Parser p) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"A1WAYSD"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"A1WAYSD"},"content":" String logo \u003d \" _ \\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"A1WAYSD"},"content":" + \"| |\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"A1WAYSD"},"content":" + \"| |\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"A1WAYSD"},"content":" + \"| |___\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"A1WAYSD"},"content":" + \"|_____|\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"Greetings from\\n\" + logo);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"Hi! This is your intelligent friend L.\\n\\\"Dream big.\\\"\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"A1WAYSD"},"content":" + \"What can I do for you today?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"A1WAYSD"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"A1WAYSD"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"A1WAYSD"},"content":" String output \u003d p.parse(scanner.nextLine());","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"A1WAYSD"},"content":" if (p.isRunning()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(output);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"Bye!\\n\\\"Beware the barrenness of a busy life.\\\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"A1WAYSD"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"A1WAYSD"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"A1WAYSD"},"content":" handleException(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"A1WAYSD"},"content":" scanner.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"A1WAYSD":67}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" * Represents a deadline task with by date in specified format.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" protected String byDescription;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" public Deadline(String description, String by) throws DateTimeParseException {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" this.taskType \u003d TaskType.DEADLINE;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" Pattern pattern \u003d Pattern.compile(\"(\\\\d{4}-\\\\d{2}-\\\\d{2})\");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":" Matcher matcher \u003d pattern.matcher(by);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" this.by \u003d LocalDate.parse(matcher.group(1));","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" this.byDescription \u003d by.replaceFirst(matcher.group(1), \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" this.byDescription \u003d by;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" this(description, by);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":" * Outputs with by date.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":" return this.by !\u003d null ? \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"A1WAYSD"},"content":" + this.by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \" |\" + this.byDescription + \")\"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"A1WAYSD"},"content":" : \"[D]\" + super.toString() + \" (by: \" + this.byDescription + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"A1WAYSD"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"A1WAYSD"},"content":" * Outputs with by date.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"A1WAYSD"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"A1WAYSD"},"content":" public String toTxt() {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"A1WAYSD"},"content":" return this.by !\u003d null ? super.toTxt() + this.description + \" | \" + this.by + this.byDescription : super.toTxt()","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"A1WAYSD"},"content":" + this.description + \" | \" + this.byDescription;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"A1WAYSD":55}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":" * Represents an event task with from and to date.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" this.taskType \u003d TaskType.EVENT;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" public Event(String description, String from, String to, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" this(description, from, to);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" * Outputs with from and to dates.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" | to: \" + this.to + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":" * Outputs with from and to dates.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" public String toTxt() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":" return super.toTxt() + this.description + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"A1WAYSD":41}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":" * Represents a task with a description and status.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" protected TaskType taskType;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" return (isDone ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" * Marks the task as undone/done.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" public void markAsDone(boolean isDone) {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":" * Provides a string representation of the task when saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" public String toTxt() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":" return this.taskType + \" | \" + (this.isDone ? \"1\" : \"0\") + \" | \";","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":" * Provides a string representation of the task when listing.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"A1WAYSD"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"A1WAYSD"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"A1WAYSD"},"content":" return this.getStatusIcon() + \" \" + this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"A1WAYSD":48}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" * Manages a list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" * Adds a task to the list. Throws DukeException if the description is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":" * @param taskType taskType.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" * @param description description.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" * @return success message and the task added.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" * @throws DukeException","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" public String addTask(TaskType taskType, String description) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" description \u003d description.trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" case TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":" if (!description.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":" this.tasks.add(new ToDo(description));","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"todo error\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":" Pattern p \u003d Pattern.compile(\"(.+) /by (.+)\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"A1WAYSD"},"content":" Matcher m \u003d p.matcher(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"A1WAYSD"},"content":" if (m.matches() \u0026\u0026 !m.group(1).isEmpty() \u0026\u0026 !m.group(2).isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"A1WAYSD"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"A1WAYSD"},"content":" this.tasks.add(new Deadline(m.group(1), m.group(2)));","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"A1WAYSD"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"deadline error\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"deadline error\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"A1WAYSD"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"A1WAYSD"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"A1WAYSD"},"content":" Pattern pattern \u003d Pattern.compile(\"(.+) /from (.+) /to (.+)\");","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"A1WAYSD"},"content":" Matcher matcher \u003d pattern.matcher(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"A1WAYSD"},"content":" if (matcher.matches() \u0026\u0026 !matcher.group(1).isEmpty() \u0026\u0026 !matcher.group(2).isEmpty()","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"A1WAYSD"},"content":" \u0026\u0026 !matcher.group(3).isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"A1WAYSD"},"content":" this.tasks.add(new Event(matcher.group(1), matcher.group(2), matcher.group(3)));","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"event error\");","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"A1WAYSD"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"A1WAYSD"},"content":" int size \u003d this.tasks.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"A1WAYSD"},"content":" String taskInTotal \u003d size \u003e 1 ? \" tasks in total.\" : \" task in total.\";","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"A1WAYSD"},"content":" return \"duke.task.Task added:\\n\" + this.tasks.get(size - 1) + \"\\nNow you have \"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"A1WAYSD"},"content":" + size + taskInTotal + \"\\n\\\"Be here now.\\\"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"A1WAYSD"},"content":" public String getTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"A1WAYSD"},"content":" String result \u003d \"Here are your tasks:\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"A1WAYSD"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"A1WAYSD"},"content":" result +\u003d (i + 1) + \" \" + tasks.get(i) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"A1WAYSD"},"content":" return result + \"\\\"One thing at a time.\\\"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"A1WAYSD"},"content":" * Returns the tasks in txt format.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"A1WAYSD"},"content":" public String getTasksTxt() {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"A1WAYSD"},"content":" String result \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"A1WAYSD"},"content":" for (int i \u003d 0; i \u003c tasks.size() - 1; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"A1WAYSD"},"content":" result +\u003d tasks.get(i).toTxt() + System.lineSeparator();","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"A1WAYSD"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"A1WAYSD"},"content":" result +\u003d tasks.get(tasks.size() - 1).toTxt();","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"A1WAYSD"},"content":" return result;","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"A1WAYSD"},"content":" * Marks the task as undone/done accordingly. Throws DukeException if the task is not found.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"A1WAYSD"},"content":" * @param taskIndex taskIndex.","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"A1WAYSD"},"content":" * @param isDone task status.","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"A1WAYSD"},"content":" * @return success message and the task modified.","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"A1WAYSD"},"content":" * @throws DukeException","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"A1WAYSD"},"content":" public String markTask(int taskIndex, boolean isDone) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"A1WAYSD"},"content":" if (taskIndex \u003e tasks.size() || taskIndex \u003c\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"task not found\");","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"A1WAYSD"},"content":" tasks.get(taskIndex - 1).markAsDone(isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"A1WAYSD"},"content":" return \"Here\u0027s your modified task:\\n\" + tasks.get(taskIndex - 1) + \"\\n\\\"Keep moving forward.\\\"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"A1WAYSD"},"content":" * Finds tasks that contain the keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"A1WAYSD"},"content":" * @param task keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"A1WAYSD"},"content":" * @return Strings of valid tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"A1WAYSD"},"content":" * @throws DukeException","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"A1WAYSD"},"content":" public String findTask(String task) throws DukeException{","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"A1WAYSD"},"content":" ArrayList\u003cTask\u003e foundedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"A1WAYSD"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"A1WAYSD"},"content":" if (tasks.get(i).toString().contains(task)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"A1WAYSD"},"content":" foundedTasks.add(tasks.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"A1WAYSD"},"content":" if (foundedTasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"task not found\");","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"A1WAYSD"},"content":" String result \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"A1WAYSD"},"content":" for (int i \u003d 0; i \u003c foundedTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"A1WAYSD"},"content":" result +\u003d (i + 1) + \" \" + foundedTasks.get(i) + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"A1WAYSD"},"content":" return result + \"\\\"One thing at a time.\\\"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"A1WAYSD"},"content":" public String deleteTask(int taskIndex) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"A1WAYSD"},"content":" //TODO: double check if not completed","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"A1WAYSD"},"content":" if (taskIndex \u003e tasks.size() || taskIndex \u003c\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"task not found\");","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"A1WAYSD"},"content":" Task task \u003d tasks.get(taskIndex - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"A1WAYSD"},"content":" tasks.remove(taskIndex - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"A1WAYSD"},"content":" int size \u003d this.tasks.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"A1WAYSD"},"content":" String taskInTotal \u003d size \u003e 1 ? \" tasks in total.\" : \" task in total.\";","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"A1WAYSD"},"content":" return \"I\u0027ve successfully deleted this task:\\n\" + task + \"\\nNow you have \" + size + taskInTotal","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"A1WAYSD"},"content":" + \"\\n\\\"Ride the waves.\\\"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"A1WAYSD":144}},{"path":"src/main/java/duke/task/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":" * Represents the type of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"A1WAYSD":8}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":" * Represents a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" this.taskType \u003d TaskType.TODO;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" this.taskType \u003d TaskType.TODO;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" public String toTxt() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" return super.toTxt() + this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"A1WAYSD":34}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" public void parse_undefinedInput_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":" try{","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" assertEquals(\"⚠ Sorry! I am not able to understand you. Try another language:D\", new Parser(null).parse(\"undefined\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":" assertEquals(\"undefined\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"A1WAYSD":20}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" public void markTask_negativeIndex_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" assertEquals(\"⚠ OOPS!!! The task index is out of range.\", new TaskList().markTask(-1,true));","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":" assertEquals(\"task not found\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"A1WAYSD":19}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"EVENT | 1 | interviews | today 2pm | 3pm","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"DEADLINE | 0 | project | tmr","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"A1WAYSD":2}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"hi","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"todo write essays","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"event interviews /from today 2pm /to 3pm","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"deadline project /by tmr","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"check list","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"mark 3","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"mark 2","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"unmark 3","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":"mark 8","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":"todo","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":"event test /from test to","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"deadline test /by","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":"delete 1","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":"88","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"A1WAYSD":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":"A1WAYSD"},"content":"java -classpath ..\\bin duke.duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"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":{"A1WAYSD":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":"A1WAYSD"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*/*.java","lastModifiedDate":"2023-08-30"},{"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":{"A1WAYSD":1,"-":37}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-30"},{"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":"A1WAYSD"},"content":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"checkstyleMain {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" source \u0027src/main/java\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"A1WAYSD"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"A1WAYSD":11,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"TODO | 0 | test","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"A1WAYSD":1}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":" * Represents an intelligent chat robot that helps a person to keep track of various things with encouraging quotes.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":" * Initializes the chat robot, loads past data from the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" * @param filePath the file path to load past data from.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":" * Runs the chat robot to start the interaction. Save data to file after user exits.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":" ui.run(new Parser(tasks));","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":" ui.showSavingError();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"A1WAYSD"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"A1WAYSD"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":48,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"A1WAYSD":46,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":" * Represents specific Duke exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":" * Constructs a DukeException with the specified detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":" * @param message the detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"A1WAYSD":15}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.TaskType;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":" * Represents a parser that parses user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" private boolean isRunning;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" * Initializes the parser with the specified task list and sets the running status to true.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" * @param tasks the task list to be used.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":" public Parser(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" this.isRunning \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" * Returns whether the parser is still running.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" public boolean isRunning() {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" return this.isRunning;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":" * Parses the user input and returns the corresponding message.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" * @param repeat the user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":" * @throws DukeException if the user input is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":" public String parse(String repeat) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" Pattern markPattern \u003d Pattern.compile(\"(mark|unmark|delete) (\\\\d+)\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":" Matcher markMatcher \u003d markPattern.matcher(repeat);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"A1WAYSD"},"content":" Pattern taskPattern \u003d Pattern.compile(\"(todo|deadline|event) (.+)\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"A1WAYSD"},"content":" Matcher taskMatcher \u003d taskPattern.matcher(repeat);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"A1WAYSD"},"content":" Pattern findPattern \u003d Pattern.compile(\"find (.+)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"A1WAYSD"},"content":" Matcher findMatcher \u003d findPattern.matcher(repeat);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"A1WAYSD"},"content":" if (repeat.contains(\"bye\") || repeat.contains(\"88\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"A1WAYSD"},"content":" this.isRunning \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"A1WAYSD"},"content":" return \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"A1WAYSD"},"content":" } else if (findMatcher.find()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"A1WAYSD"},"content":" return this.tasks.findTask(findMatcher.group(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"A1WAYSD"},"content":" } else if (markMatcher.matches()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"A1WAYSD"},"content":" String action \u003d markMatcher.group(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"A1WAYSD"},"content":" int taskIndex \u003d Integer.parseInt(markMatcher.group(2));","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"A1WAYSD"},"content":" if (action.equals(\"delete\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"A1WAYSD"},"content":" return this.tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"A1WAYSD"},"content":" boolean isDone \u003d markMatcher.group(1).equals(\"mark\");","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"A1WAYSD"},"content":" return this.tasks.markTask(taskIndex, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"A1WAYSD"},"content":" } else if (taskMatcher.matches()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"A1WAYSD"},"content":" return this.tasks.addTask(TaskType.valueOf(taskMatcher.group(1).toUpperCase()), taskMatcher.group(2));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"A1WAYSD"},"content":" } else if (repeat.contains(\"list\") || repeat.contains(\"List\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"A1WAYSD"},"content":" return this.tasks.getTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"undefined\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"A1WAYSD":68}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.TaskType;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" * Represents a storage that loads tasks from the specified file and saves tasks to the same file.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":"public class Storage {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" private String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" * Loads tasks from the specified file path. Create the folder if necessary.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" * @throws FileNotFoundException","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" public ArrayList\u003cTask\u003e load() throws FileNotFoundException {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" File folder \u003d new File(\"data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":" if (!folder.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" folder.mkdir();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":" File f \u003d new File(folder, \"duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":" tasks.add(addTask(s.nextLine()));","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"A1WAYSD"},"content":" private Task addTask(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"A1WAYSD"},"content":" TaskType taskType \u003d TaskType.valueOf(description.substring(0, description.indexOf(\" \")).toUpperCase());","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"A1WAYSD"},"content":" boolean isDone \u003d description.charAt(description.indexOf(\"|\") + 2) \u003d\u003d \u00271\u0027;","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"A1WAYSD"},"content":" String taskDescription \u003d description.substring(description.indexOf(\"|\") + 6);","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"A1WAYSD"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"A1WAYSD"},"content":" case TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"A1WAYSD"},"content":" return new ToDo(taskDescription, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"A1WAYSD"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"A1WAYSD"},"content":" String by \u003d taskDescription.substring(taskDescription.indexOf(\"|\") + 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"A1WAYSD"},"content":" taskDescription \u003d taskDescription.substring(0, taskDescription.indexOf(\"|\") - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"A1WAYSD"},"content":" return new Deadline(taskDescription, by, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"A1WAYSD"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"A1WAYSD"},"content":" int secondDividerIndex \u003d taskDescription.indexOf(\"|\", taskDescription.indexOf(\"|\") + 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"A1WAYSD"},"content":" String from \u003d taskDescription.substring(taskDescription.indexOf(\"|\") + 2, secondDividerIndex - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"A1WAYSD"},"content":" String to \u003d taskDescription.substring(secondDividerIndex + 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"A1WAYSD"},"content":" taskDescription \u003d taskDescription.substring(0, taskDescription.indexOf(\"|\") - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"A1WAYSD"},"content":" return new Event(taskDescription, from, to, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"A1WAYSD"},"content":" //TODO: update the file after each task creation/modification","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"A1WAYSD"},"content":" * Saves the specified task list to the specified file path. Create the file if necessary.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"A1WAYSD"},"content":" * @throws IOException","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"A1WAYSD"},"content":" public void save(TaskList taskList) throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"A1WAYSD"},"content":" String txt \u003d taskList.getTasksTxt();","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"A1WAYSD"},"content":" if (txt.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"A1WAYSD"},"content":" return;","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"A1WAYSD"},"content":" new File(filePath).createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"A1WAYSD"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"A1WAYSD"},"content":" fw.write(taskList.getTasksTxt());","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"A1WAYSD"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"A1WAYSD":80}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":" * Represents a user interface of the chat robot.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"Generating new chat session...\");","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" public void showSavingError() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"⚠ Oops! Something wrong when closing:(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" * Prints corresponding error message according to the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" * @param e the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":" public void handleException(DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" String message \u003d e.getMessage();","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" if (message.equals(\"undefined\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"⚠ Sorry! I am not able to understand you. Try another language:D\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":" } else if (message.equals(\"task not found\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"⚠ Oops! Cannot find task:(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" } else if (message.equals(\"todo error\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"⚠ Oops! Need description for the todo:(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" } else if (message.equals(\"deadline error\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"⚠ Oops! Need description and formatted by date for the deadline:(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" } else if (message.equals(\"event error\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"⚠ Oops! Need description, from and to date for the event:(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"⚠ Oops! Something went wrong:(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":" * Runs the UI to print start and ending messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" * @param p the parser.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"A1WAYSD"},"content":" public void run(Parser p) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"A1WAYSD"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"A1WAYSD"},"content":" String logo \u003d \" _ \\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"A1WAYSD"},"content":" + \"| |\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"A1WAYSD"},"content":" + \"| |\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"A1WAYSD"},"content":" + \"| |___\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"A1WAYSD"},"content":" + \"|_____|\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"Greetings from\\n\" + logo);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"Hi! This is your intelligent friend L.\\n\\\"Dream big.\\\"\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"A1WAYSD"},"content":" + \"What can I do for you today?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"A1WAYSD"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"A1WAYSD"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"A1WAYSD"},"content":" String output \u003d p.parse(scanner.nextLine());","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"A1WAYSD"},"content":" if (p.isRunning()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(output);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"A1WAYSD"},"content":" System.out.println(\"Bye!\\n\\\"Beware the barrenness of a busy life.\\\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"A1WAYSD"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"A1WAYSD"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"A1WAYSD"},"content":" handleException(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"A1WAYSD"},"content":" scanner.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"A1WAYSD":67}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" * Represents a deadline task with by date in specified format.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" protected String byDescription;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" public Deadline(String description, String by) throws DateTimeParseException {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" this.taskType \u003d TaskType.DEADLINE;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" Pattern pattern \u003d Pattern.compile(\"(\\\\d{4}-\\\\d{2}-\\\\d{2})\");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":" Matcher matcher \u003d pattern.matcher(by);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" this.by \u003d LocalDate.parse(matcher.group(1));","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" this.byDescription \u003d by.replaceFirst(matcher.group(1), \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" this.byDescription \u003d by;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" this(description, by);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":" * Outputs with by date.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":" return this.by !\u003d null ? \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"A1WAYSD"},"content":" + this.by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \" |\" + this.byDescription + \")\"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"A1WAYSD"},"content":" : \"[D]\" + super.toString() + \" (by: \" + this.byDescription + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"A1WAYSD"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"A1WAYSD"},"content":" * Outputs with by date.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"A1WAYSD"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"A1WAYSD"},"content":" public String toTxt() {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"A1WAYSD"},"content":" return this.by !\u003d null ? super.toTxt() + this.description + \" | \" + this.by + this.byDescription : super.toTxt()","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"A1WAYSD"},"content":" + this.description + \" | \" + this.byDescription;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"A1WAYSD":55}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":" * Represents an event task with from and to date.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" this.taskType \u003d TaskType.EVENT;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" public Event(String description, String from, String to, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" this(description, from, to);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" * Outputs with from and to dates.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" | to: \" + this.to + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":" * Outputs with from and to dates.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" public String toTxt() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":" return super.toTxt() + this.description + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"A1WAYSD":41}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":" * Represents a task with a description and status.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" protected TaskType taskType;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" return (isDone ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" * Marks the task as undone/done.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":" public void markAsDone(boolean isDone) {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":" * Provides a string representation of the task when saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":" public String toTxt() {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" return this.taskType + \" | \" + (this.isDone ? \"1\" : \"0\") + \" | \";","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"A1WAYSD"},"content":" * Provides a string representation of the task when listing.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"A1WAYSD"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"A1WAYSD"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"A1WAYSD"},"content":" return this.getStatusIcon() + \" \" + this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"A1WAYSD":51}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" * Manages a list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" * Adds a task to the list. Throws DukeException if the description is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":" * @param taskType taskType.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" * @param description description.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" * @return success message and the task added.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" * @throws DukeException if the description is invalid.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" public String addTask(TaskType taskType, String description) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" description \u003d description.trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":" case TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":" if (!description.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"A1WAYSD"},"content":" this.tasks.add(new ToDo(description));","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"todo error\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"A1WAYSD"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"A1WAYSD"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"A1WAYSD"},"content":" Pattern p \u003d Pattern.compile(\"(.+) /by (.+)\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"A1WAYSD"},"content":" Matcher m \u003d p.matcher(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"A1WAYSD"},"content":" if (m.matches() \u0026\u0026 !m.group(1).isEmpty() \u0026\u0026 !m.group(2).isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"A1WAYSD"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"A1WAYSD"},"content":" this.tasks.add(new Deadline(m.group(1), m.group(2)));","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"A1WAYSD"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"deadline error\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"deadline error\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"A1WAYSD"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"A1WAYSD"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"A1WAYSD"},"content":" Pattern pattern \u003d Pattern.compile(\"(.+) /from (.+) /to (.+)\");","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"A1WAYSD"},"content":" Matcher matcher \u003d pattern.matcher(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"A1WAYSD"},"content":" if (matcher.matches() \u0026\u0026 !matcher.group(1).isEmpty() \u0026\u0026 !matcher.group(2).isEmpty()","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"A1WAYSD"},"content":" \u0026\u0026 !matcher.group(3).isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"A1WAYSD"},"content":" this.tasks.add(new Event(matcher.group(1), matcher.group(2), matcher.group(3)));","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"event error\");","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"A1WAYSD"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"A1WAYSD"},"content":" int size \u003d this.tasks.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"A1WAYSD"},"content":" String taskInTotal \u003d size \u003e 1 ? \" tasks in total.\" : \" task in total.\";","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"A1WAYSD"},"content":" return \"duke.task.Task added:\\n\" + this.tasks.get(size - 1) + \"\\nNow you have \"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"A1WAYSD"},"content":" + size + taskInTotal + \"\\n\\\"Be here now.\\\"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"A1WAYSD"},"content":" * Returns the string representation of tasks in a list.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"A1WAYSD"},"content":" public String getTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"A1WAYSD"},"content":" String result \u003d \"Here are your tasks:\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"A1WAYSD"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"A1WAYSD"},"content":" result +\u003d (i + 1) + \" \" + tasks.get(i) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"A1WAYSD"},"content":" return result + \"\\\"One thing at a time.\\\"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"A1WAYSD"},"content":" * Returns the tasks in txt format.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"A1WAYSD"},"content":" public String getTasksTxt() {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"A1WAYSD"},"content":" String result \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"A1WAYSD"},"content":" for (int i \u003d 0; i \u003c tasks.size() - 1; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"A1WAYSD"},"content":" result +\u003d tasks.get(i).toTxt() + System.lineSeparator();","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"A1WAYSD"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"A1WAYSD"},"content":" result +\u003d tasks.get(tasks.size() - 1).toTxt();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"A1WAYSD"},"content":" return result;","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"A1WAYSD"},"content":" * Marks the task as undone/done accordingly. Throws DukeException if the task is not found.","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"A1WAYSD"},"content":" * @param taskIndex taskIndex.","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"A1WAYSD"},"content":" * @param isDone task status.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"A1WAYSD"},"content":" * @return success message and the task modified.","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"A1WAYSD"},"content":" * @throws DukeException if the task is not found.","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"A1WAYSD"},"content":" public String markTask(int taskIndex, boolean isDone) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"A1WAYSD"},"content":" if (taskIndex \u003e tasks.size() || taskIndex \u003c\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"task not found\");","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"A1WAYSD"},"content":" tasks.get(taskIndex - 1).markAsDone(isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"A1WAYSD"},"content":" return \"Here\u0027s your modified task:\\n\" + tasks.get(taskIndex - 1) + \"\\n\\\"Keep moving forward.\\\"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"A1WAYSD"},"content":" * Finds tasks that contain the keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"A1WAYSD"},"content":" * @param task keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"A1WAYSD"},"content":" * @return Strings of valid tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"A1WAYSD"},"content":" * @throws DukeException if no task is found.","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"A1WAYSD"},"content":" public String findTask(String task) throws DukeException{","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"A1WAYSD"},"content":" ArrayList\u003cTask\u003e foundedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"A1WAYSD"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"A1WAYSD"},"content":" if (tasks.get(i).toString().contains(task)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"A1WAYSD"},"content":" foundedTasks.add(tasks.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"A1WAYSD"},"content":" if (foundedTasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"task not found\");","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"A1WAYSD"},"content":" String result \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"A1WAYSD"},"content":" for (int i \u003d 0; i \u003c foundedTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"A1WAYSD"},"content":" result +\u003d (i + 1) + \" \" + foundedTasks.get(i) + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"A1WAYSD"},"content":" return result + \"\\\"One thing at a time.\\\"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"A1WAYSD"},"content":" * Deletes the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"A1WAYSD"},"content":" * @param taskIndex taskIndex.","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"A1WAYSD"},"content":" * @return success message and the task deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"A1WAYSD"},"content":" * @throws DukeException if the task is not found.","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"A1WAYSD"},"content":" public String deleteTask(int taskIndex) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"A1WAYSD"},"content":" //TODO: double check if not completed","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"A1WAYSD"},"content":" if (taskIndex \u003e tasks.size() || taskIndex \u003c\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"A1WAYSD"},"content":" throw new DukeException(\"task not found\");","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"A1WAYSD"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"A1WAYSD"},"content":" Task task \u003d tasks.get(taskIndex - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"A1WAYSD"},"content":" tasks.remove(taskIndex - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"A1WAYSD"},"content":" int size \u003d this.tasks.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"A1WAYSD"},"content":" String taskInTotal \u003d size \u003e 1 ? \" tasks in total.\" : \" task in total.\";","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"A1WAYSD"},"content":" return \"I\u0027ve successfully deleted this task:\\n\" + task + \"\\nNow you have \" + size + taskInTotal","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"A1WAYSD"},"content":" + \"\\n\\\"Ride the waves.\\\"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"A1WAYSD":153}},{"path":"src/main/java/duke/task/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":" * Represents the type of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"A1WAYSD":8}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":" * Represents a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" this.taskType \u003d TaskType.TODO;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" this.taskType \u003d TaskType.TODO;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"A1WAYSD"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"A1WAYSD"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"A1WAYSD"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"A1WAYSD"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"A1WAYSD"},"content":" public String toTxt() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"A1WAYSD"},"content":" return super.toTxt() + this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"A1WAYSD":34}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" public void parse_bye_success() throws DukeException{","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":" assertEquals(\"\", new Parser(null).parse(\"88\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" public void parse_undefinedInput_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":" try{","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" assertEquals(\"⚠ Sorry! I am not able to understand you. Try another language:D\", new Parser(null).parse(\"undefined\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"A1WAYSD"},"content":" assertEquals(\"undefined\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"A1WAYSD":24}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":" public void markTask_negativeIndex_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":" assertEquals(\"⚠ OOPS!!! The task index is out of range.\", new TaskList().markTask(-1,true));","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"A1WAYSD"},"content":" assertEquals(\"task not found\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"A1WAYSD"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"A1WAYSD"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"A1WAYSD":19}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"EVENT | 1 | interviews | today 2pm | 3pm","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"DEADLINE | 0 | project | tmr","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"A1WAYSD":2}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"A1WAYSD"},"content":"hi","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"A1WAYSD"},"content":"todo write essays","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"A1WAYSD"},"content":"event interviews /from today 2pm /to 3pm","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"A1WAYSD"},"content":"deadline project /by tmr","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"A1WAYSD"},"content":"check list","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"A1WAYSD"},"content":"mark 3","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"A1WAYSD"},"content":"mark 2","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"A1WAYSD"},"content":"unmark 3","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"A1WAYSD"},"content":"mark 8","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"A1WAYSD"},"content":"todo","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"A1WAYSD"},"content":"event test /from test to","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"A1WAYSD"},"content":"deadline test /by","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"A1WAYSD"},"content":"delete 1","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"A1WAYSD"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"A1WAYSD"},"content":"88","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"A1WAYSD":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":"A1WAYSD"},"content":"java -classpath ..\\bin duke.duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"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":{"A1WAYSD":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":"A1WAYSD"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*/*.java","lastModifiedDate":"2023-08-30"},{"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":{"A1WAYSD":1,"-":37}}] diff --git a/A1WAYSD_ip_master/commits.json b/A1WAYSD_ip_master/commits.json index 9e768682..c53e1045 100644 --- a/A1WAYSD_ip_master/commits.json +++ b/A1WAYSD_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"A1WAYSD":[{"date":"2023-08-22","commitResults":[{"hash":"71729bdc1a72139ff0f2d2344cf7e168f095488e","isMergeCommit":false,"messageTitle":"Add Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":5}}},{"hash":"942ac94c590f5edaf1c6b62ed8b82ba429c75707","isMergeCommit":false,"messageTitle":"Add echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"57536fa86d6ccacbfb44b98097a0a3f99b1e2589","isMergeCommit":false,"messageTitle":"Add list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":2}}},{"hash":"cc91929afff542da3ecea88c65e65c9f3df37269","isMergeCommit":false,"messageTitle":"Add mark feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":6}}},{"hash":"e6540570fcb02c7d674e2c2f7e4cd96835abbd16","isMergeCommit":false,"messageTitle":"Add task type","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":31}}}]},{"date":"2023-08-23","commitResults":[{"hash":"1fc4bc9a3f4762f604c086954526dd32b6954633","isMergeCommit":false,"messageTitle":"Automate text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"54dc4b29259ab0edc86367ec2203fa554c2c9c19","isMergeCommit":false,"messageTitle":"Add error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":2,"deletions":0}}},{"hash":"d0fdfcb3cbcc6499a30d5b2fe5c9d6f4583e8760","isMergeCommit":false,"messageTitle":"Add delete feature \u0026 use arraylist","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"12324616247e9753b6581ae888bb997df8d52da1","isMergeCommit":false,"messageTitle":"Add change to classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":51}}},{"hash":"ead9c34fe978b22e53283a4f6162d2ddb7ae3bc2","isMergeCommit":false,"messageTitle":"Add enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":29}}}]},{"date":"2023-08-28","commitResults":[{"hash":"ae0b0b283e2339e4de575fea10a8f0af04fcc2f3","isMergeCommit":false,"messageTitle":"Improve code style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":38}}},{"hash":"ce44f2c23f55cb1fc397b045367a183d5430b2b0","isMergeCommit":false,"messageTitle":"Add save feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":141,"deletions":27}}},{"hash":"06a9c0983e04761b0d3ae4fde95a8d2ef08653eb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"57d0afe1742625b8bbd3ca896654356f630aabfc","isMergeCommit":false,"messageTitle":"Add local date","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":35,"deletions":17}}},{"hash":"78c04f2b5fe9c4075aef55195576ba76fe31e97b","isMergeCommit":false,"messageTitle":"Add data.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"1e391fab4ad2d41f61a411a584e1c442357eee9a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"8910d8fe3faf362da2dacc30fcbeb71aecd81489","isMergeCommit":false,"messageTitle":"Add ui and parser","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":16},"java":{"insertions":237,"deletions":170}}},{"hash":"2c73e38cac2ace50eba1f47e28524eea07a6041b","isMergeCommit":false,"messageTitle":"Fix load/save file error","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":11,"deletions":2}}}]},{"date":"2023-08-30","commitResults":[{"hash":"21ca44013e98bbe7fd833084fc48f92d9f05fc34","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":9},"bat":{"insertions":1,"deletions":1}}},{"hash":"924779e4980a49661da4a1963f09877b29e20b56","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/nus-cs2103-AY2324S1/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ced8fa100f669b0def728fc3ac4d5ab0168bb0de","isMergeCommit":false,"messageTitle":"Add Gradle for test and checkstyle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":11,"deletions":1},"java":{"insertions":13,"deletions":14}}},{"hash":"6f7ca05e25a95e97d44c914d18710e7c744deab2","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":0}}},{"hash":"83bdc684f4f976de82975beb0f695d18a3ee486a","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":4}}},{"hash":"210830474a6d1f5c7bd408dfcacdc5b279afc5b9","isMergeCommit":false,"messageTitle":"Follow the Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"7b2a9666a7caabc8efe0ac079db030df3c9db52e","isMergeCommit":false,"messageTitle":"Add find feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":28,"deletions":2},"sh":{"insertions":1,"deletions":1}}},{"hash":"9a992eb55b9d32196ede905d895834979b3da96b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"658debffd05aae9cbca922af609cf2504f70d8cf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"54e245233bdcb35c436a0059111482dbeb824a6a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Parser.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"A1WAYSD":{"java":645,"md":0,"fxml":0,"sh":1,"bat":1,"gradle":11,"txt":18}},"authorContributionVariance":{"A1WAYSD":25973.008},"authorDisplayNameMap":{"A1WAYSD":"CS2103T-T11-4 YU J..IALI"}} +{"authorDailyContributionsMap":{"A1WAYSD":[{"date":"2023-08-22","commitResults":[{"hash":"71729bdc1a72139ff0f2d2344cf7e168f095488e","isMergeCommit":false,"messageTitle":"Add Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":5}}},{"hash":"942ac94c590f5edaf1c6b62ed8b82ba429c75707","isMergeCommit":false,"messageTitle":"Add echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"57536fa86d6ccacbfb44b98097a0a3f99b1e2589","isMergeCommit":false,"messageTitle":"Add list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":2}}},{"hash":"cc91929afff542da3ecea88c65e65c9f3df37269","isMergeCommit":false,"messageTitle":"Add mark feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":6}}},{"hash":"e6540570fcb02c7d674e2c2f7e4cd96835abbd16","isMergeCommit":false,"messageTitle":"Add task type","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":31}}}]},{"date":"2023-08-23","commitResults":[{"hash":"1fc4bc9a3f4762f604c086954526dd32b6954633","isMergeCommit":false,"messageTitle":"Automate text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"54dc4b29259ab0edc86367ec2203fa554c2c9c19","isMergeCommit":false,"messageTitle":"Add error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":2,"deletions":0}}},{"hash":"d0fdfcb3cbcc6499a30d5b2fe5c9d6f4583e8760","isMergeCommit":false,"messageTitle":"Add delete feature \u0026 use arraylist","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"12324616247e9753b6581ae888bb997df8d52da1","isMergeCommit":false,"messageTitle":"Add change to classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":51}}},{"hash":"ead9c34fe978b22e53283a4f6162d2ddb7ae3bc2","isMergeCommit":false,"messageTitle":"Add enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":29}}}]},{"date":"2023-08-28","commitResults":[{"hash":"ae0b0b283e2339e4de575fea10a8f0af04fcc2f3","isMergeCommit":false,"messageTitle":"Improve code style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":38}}},{"hash":"ce44f2c23f55cb1fc397b045367a183d5430b2b0","isMergeCommit":false,"messageTitle":"Add save feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":141,"deletions":27}}},{"hash":"06a9c0983e04761b0d3ae4fde95a8d2ef08653eb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"57d0afe1742625b8bbd3ca896654356f630aabfc","isMergeCommit":false,"messageTitle":"Add local date","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":35,"deletions":17}}},{"hash":"78c04f2b5fe9c4075aef55195576ba76fe31e97b","isMergeCommit":false,"messageTitle":"Add data.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"1e391fab4ad2d41f61a411a584e1c442357eee9a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"8910d8fe3faf362da2dacc30fcbeb71aecd81489","isMergeCommit":false,"messageTitle":"Add ui and parser","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":16},"java":{"insertions":237,"deletions":170}}},{"hash":"2c73e38cac2ace50eba1f47e28524eea07a6041b","isMergeCommit":false,"messageTitle":"Fix load/save file error","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":11,"deletions":2}}}]},{"date":"2023-08-30","commitResults":[{"hash":"21ca44013e98bbe7fd833084fc48f92d9f05fc34","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":9},"bat":{"insertions":1,"deletions":1}}},{"hash":"924779e4980a49661da4a1963f09877b29e20b56","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/nus-cs2103-AY2324S1/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ced8fa100f669b0def728fc3ac4d5ab0168bb0de","isMergeCommit":false,"messageTitle":"Add Gradle for test and checkstyle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":11,"deletions":1},"java":{"insertions":13,"deletions":14}}},{"hash":"6f7ca05e25a95e97d44c914d18710e7c744deab2","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":0}}},{"hash":"83bdc684f4f976de82975beb0f695d18a3ee486a","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":4}}},{"hash":"210830474a6d1f5c7bd408dfcacdc5b279afc5b9","isMergeCommit":false,"messageTitle":"Follow the Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"7b2a9666a7caabc8efe0ac079db030df3c9db52e","isMergeCommit":false,"messageTitle":"Add find feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":28,"deletions":2},"sh":{"insertions":1,"deletions":1}}},{"hash":"9a992eb55b9d32196ede905d895834979b3da96b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"658debffd05aae9cbca922af609cf2504f70d8cf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"54e245233bdcb35c436a0059111482dbeb824a6a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Parser.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"f577eaea4e5441d9e63683b31617f45f97ef61ee","isMergeCommit":false,"messageTitle":"Improve javadoc \u0026 junit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":4}}}]}]},"authorFileTypeContributionMap":{"A1WAYSD":{"java":661,"md":0,"fxml":0,"sh":1,"bat":1,"gradle":11,"txt":18}},"authorContributionVariance":{"A1WAYSD":21326.766},"authorDisplayNameMap":{"A1WAYSD":"CS2103T-T11-4 YU J..IALI"}} diff --git a/AryanG01_ip_master/authorship.json b/AryanG01_ip_master/authorship.json index d13af745..7ddbc233 100644 --- a/AryanG01_ip_master/authorship.json +++ b/AryanG01_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"class DeadlineTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":" public DeadlineTask(String description, boolean isDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" return \"[D]\" + super.toString() + \" \" + getDescriptionDetails();","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" return \"D\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" private String getDescriptionDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" String[] details \u003d description.split(\" /from \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" if (details.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" String[] eventParts \u003d details[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" if (eventParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" return details[0] + \" (from: \" + eventParts[0] + \" to: \" + eventParts[1] + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" return details[0] + \" (from: \" + eventParts[0] + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" String[] eventParts \u003d description.split(\" /by \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" if (eventParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" return eventParts[0] + \" (by: \" + eventParts[1] + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" return eventParts[0] + \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":34}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" tasks.loadTasksFromFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" Runtime.getRuntime().addShutdownHook(new Thread(tasks::saveTasksToFile));","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Hello! I\u0027m Axela\");","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" String command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" if (command.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" } else if (command.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Here are the tasks in your list:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" tasks.saveTasksToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" System.out.print(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" tasks.markAsDone(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" tasks.saveTasksToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" tasks.markAsNotDone(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" tasks.saveTasksToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"AryanG01"},"content":" tasks.deleteTask(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"AryanG01"},"content":" tasks.saveTasksToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"AryanG01"},"content":" tasks.processCommand(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"AryanG01"},"content":" tasks.saveTasksToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"AryanG01"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":4,"AryanG01":44}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"class DukeException extends Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":" super(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AryanG01":5}},{"path":"src/main/java/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"class EventTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":" public EventTask(String description, boolean isDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" return \"[E]\" + super.toString() + \" \" + getDescriptionDetails();","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" return \"E\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" private String getDescriptionDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" String[] details \u003d description.split(\" /from \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" if (details.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" String[] eventParts \u003d details[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" if (eventParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" return details[0] + \" (from: \" + eventParts[0] + \" to: \" + eventParts[1] + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" return details[0] + \" (from: \" + eventParts[0] + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" String[] eventParts \u003d description.split(\" /by \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" if (eventParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" return eventParts[0] + \" (by: \" + eventParts[1] + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" return eventParts[0] + \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":34}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" return isDone ? \"X\" : \" \";","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" return \"[\" + getStatusIcon() + \"]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" return String.format(\"%s | %d | %s\", getTaskType(), isDone ? 1 : 0, description);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" return \"\"; // Override in subclasses","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":34}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.io.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" private String filePath \u003d \"./src/main/java/duke.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" public TaskList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" public void processCommand(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" String[] parts \u003d command.split(\" \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" TaskType taskType \u003d TaskType.valueOf(parts[0].toUpperCase());","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" case TODO:","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2 || parts[1].isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" addTask(new TodoTask(parts[1], false));","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2 || parts[1].isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" addTask(new DeadlineTask(parts[1], false));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"AryanG01"},"content":" case EVENT:","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2 || parts[1].isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"AryanG01"},"content":" addTask(new EventTask(parts[1], false));","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"AryanG01"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"AryanG01"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"AryanG01"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"AryanG01"},"content":" public void deleteTask(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"AryanG01"},"content":" int taskIndex \u003d extractTaskIndex(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"AryanG01"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"AryanG01"},"content":" Task deletedTask \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + deletedTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"AryanG01"},"content":" public void markAsDone(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"AryanG01"},"content":" int taskIndex \u003d extractTaskIndex(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"AryanG01"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"AryanG01"},"content":" tasks.get(taskIndex).markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(taskIndex));","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"AryanG01"},"content":" public void markAsNotDone(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"AryanG01"},"content":" int taskIndex \u003d extractTaskIndex(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"AryanG01"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"AryanG01"},"content":" tasks.get(taskIndex).markAsNotDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(taskIndex));","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"AryanG01"},"content":" private int extractTaskIndex(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"AryanG01"},"content":" String[] parts \u003d command.split(\" \");","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Please provide the task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"AryanG01"},"content":" return Integer.parseInt(parts[1].trim()) - 1;","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"AryanG01"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"AryanG01"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"AryanG01"},"content":" sb.append(\" Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"AryanG01"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"AryanG01"},"content":" sb.append(\" \").append(i + 1).append(\".\").append(tasks.get(i));","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"AryanG01"},"content":" sb.append(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"AryanG01"},"content":" return sb.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"AryanG01"},"content":" public void saveTasksToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"AryanG01"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"AryanG01"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"AryanG01"},"content":" writer.write(task.toFileString() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"AryanG01"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"AryanG01"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"Error saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"AryanG01"},"content":" public void loadTasksFromFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"AryanG01"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"AryanG01"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"AryanG01"},"content":" return; // If the file doesn\u0027t exist yet, no need to load tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"AryanG01"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"AryanG01"},"content":" String line;","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"AryanG01"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"AryanG01"},"content":" processFileLine(line);","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"AryanG01"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"AryanG01"},"content":" } catch (IOException | DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"Error loading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"AryanG01"},"content":" private void processFileLine(String line) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"AryanG01"},"content":" // Parse the line and create tasks based on the format in the file","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"AryanG01"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"AryanG01"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"AryanG01"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"AryanG01"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"AryanG01"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"AryanG01"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"AryanG01"},"content":" // Create and add a TodoTask","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"AryanG01"},"content":" addTask(new TodoTask(description, isDone));","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"AryanG01"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"AryanG01"},"content":" // Create and add a DeadlineTask","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"AryanG01"},"content":" addTask(new DeadlineTask(description, isDone));","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"AryanG01"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"AryanG01"},"content":" // Create and add an EventTask","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"AryanG01"},"content":" addTask(new EventTask(description, isDone));","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"AryanG01"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AryanG01":166}},{"path":"src/main/java/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AryanG01":3}},{"path":"src/main/java/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"class TodoTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":" public TodoTask(String description, boolean isDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" return \"[T]\" + super.toString() + \" \" + getDescriptionDetails();","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" return \"T\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" private String getDescriptionDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" String[] details \u003d description.split(\" /from \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" if (details.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" String[] eventParts \u003d details[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" if (eventParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" return details[0] + \" (from: \" + eventParts[0] + \" to: \" + eventParts[1] + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" return details[0] + \" (from: \" + eventParts[0] + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" String[] eventParts \u003d description.split(\" /by \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" if (eventParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" return eventParts[0] + \" (by: \" + eventParts[1] + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" return eventParts[0] + \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":34}},{"path":"src/main/java/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"T | 0 | borrow book /by 1st September","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"AryanG01":2}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"todo read book","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"todo join sports club","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":"todo borrow book","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":"mark 4","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":"todo","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":"deadline","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":"event","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":"blah","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":"mark","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":"mark 9","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":"mark 8","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":"unmark","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":"unmark -1","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":"unmark 7","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":"delete","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":"delete 100","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":"delete 6","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":"list","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"AryanG01":26}},{"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":"AryanG01"},"content":"if not exist C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin mkdir C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin","lastModifiedDate":"2023-08-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":"AryanG01"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-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":"AryanG01"},"content":"javac -cp C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\src\\main\\java -Xlint:none -d C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\src\\main\\java\\*.java","lastModifiedDate":"2023-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":"AryanG01"},"content":"java -classpath C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin Duke \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":{"-":17,"AryanG01":4}}] +[{"path":"src/main/java/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"class DeadlineTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" private LocalDate byDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" public DeadlineTask(String description, LocalDate byDate, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" this.byDate \u003d byDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" return \"[D]\" + super.toString() + \" \" + getDescriptionDetails();","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" return String.format(\"%s | %d | %s (by: %s)\", getTaskType(), isDone ? 1 : 0, description,","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" byDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" return \"D\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" private String getDescriptionDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" return description + \" (by: \" + byDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":31}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" tasks.loadTasksFromFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" Runtime.getRuntime().addShutdownHook(new Thread(tasks::saveTasksToFile));","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Hello! I\u0027m Axela\");","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" String command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" if (command.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" } else if (command.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Here are the tasks in your list:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" tasks.saveTasksToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e master","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" System.out.print(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" tasks.markAsDone(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" tasks.saveTasksToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AryanG01"},"content":" tasks.markAsNotDone(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"AryanG01"},"content":" tasks.saveTasksToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"AryanG01"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"AryanG01"},"content":" tasks.deleteTask(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"AryanG01"},"content":" tasks.saveTasksToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"AryanG01"},"content":" tasks.processCommand(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"AryanG01"},"content":" tasks.saveTasksToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"AryanG01"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":4,"AryanG01":47}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"class DukeException extends Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":" super(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AryanG01":5}},{"path":"src/main/java/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"class EventTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" private LocalDate atDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" public EventTask(String description, LocalDate atDate, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" this.atDate \u003d atDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" return \"[E]\" + super.toString() + \" \" + getDescriptionDetails();","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" return String.format(\"%s | %d | %s (at: %s)\", getTaskType(), isDone ? 1 : 0, description,","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" atDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" return \"E\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" private String getDescriptionDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" return description + \" (at: \" + atDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":31}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" return isDone ? \"X\" : \" \";","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" return \"[\" + getStatusIcon() + \"]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" return String.format(\"%s | %d | %s\", getTaskType(), isDone ? 1 : 0, description);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" return \"\"; // Override in subclasses","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":34}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.io.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" private String filePath \u003d \"src/main/java/duke.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" public TaskList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" public void processCommand(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" String[] parts \u003d command.split(\" \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" TaskType taskType \u003d TaskType.valueOf(parts[0].toUpperCase());","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" case TODO:","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2 || parts[1].isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" String[] todoParts \u003d parts[1].split(\" /from \");","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" if (todoParts.length !\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Todo tasks must include \u0027/from\u0027 for date.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" String[] dateRange \u003d todoParts[1].split(\" /to \");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" if (dateRange.length !\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Todo tasks must include \u0027/to\u0027 for the end date.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" LocalDate fromDate \u003d LocalDate.parse(dateRange[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" LocalDate toDate \u003d LocalDate.parse(dateRange[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":" addTask(new TodoTask(todoParts[0], fromDate, toDate, false));","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"AryanG01"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2 || parts[1].isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AryanG01"},"content":" String[] deadlineParts \u003d parts[1].split(\" /by \");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"AryanG01"},"content":" if (deadlineParts.length !\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Deadline tasks must include \u0027/by\u0027 for date.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"AryanG01"},"content":" LocalDate byDate \u003d LocalDate.parse(deadlineParts[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"AryanG01"},"content":" addTask(new DeadlineTask(deadlineParts[0], byDate, false));","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"AryanG01"},"content":" case EVENT:","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2 || parts[1].isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"AryanG01"},"content":" String[] eventParts \u003d parts[1].split(\" /at \");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"AryanG01"},"content":" if (eventParts.length !\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Event tasks must include \u0027/at\u0027 for date.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"AryanG01"},"content":" LocalDate atDate \u003d LocalDate.parse(eventParts[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"AryanG01"},"content":" addTask(new EventTask(eventParts[0], atDate, false));","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"AryanG01"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"AryanG01"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"AryanG01"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"AryanG01"},"content":" public void deleteTask(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"AryanG01"},"content":" int taskIndex \u003d extractTaskIndex(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"AryanG01"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"AryanG01"},"content":" Task deletedTask \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + deletedTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"AryanG01"},"content":" public void markAsDone(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"AryanG01"},"content":" int taskIndex \u003d extractTaskIndex(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"AryanG01"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"AryanG01"},"content":" tasks.get(taskIndex).markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(taskIndex));","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"AryanG01"},"content":" public void markAsNotDone(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"AryanG01"},"content":" int taskIndex \u003d extractTaskIndex(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"AryanG01"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"AryanG01"},"content":" tasks.get(taskIndex).markAsNotDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(taskIndex));","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"AryanG01"},"content":" private int extractTaskIndex(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"AryanG01"},"content":" String[] parts \u003d command.split(\" \");","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Please provide the task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"AryanG01"},"content":" return Integer.parseInt(parts[1].trim()) - 1;","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"AryanG01"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"AryanG01"},"content":" sb.append(\" Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"AryanG01"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"AryanG01"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"AryanG01"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"AryanG01"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e master","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"AryanG01"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"AryanG01"},"content":" sb.append(\" \").append(i + 1).append(\".\").append(tasks.get(i));","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"AryanG01"},"content":" sb.append(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"AryanG01"},"content":" return sb.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"AryanG01"},"content":" public void saveTasksToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"AryanG01"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"AryanG01"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"AryanG01"},"content":" writer.write(task.toFileString() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"AryanG01"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"AryanG01"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"Error saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"AryanG01"},"content":" public void loadTasksFromFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"AryanG01"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"AryanG01"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"AryanG01"},"content":" return; // If the file doesn\u0027t exist yet, no need to load tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"AryanG01"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"AryanG01"},"content":" String line;","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"AryanG01"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"AryanG01"},"content":" processFileLine(line);","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"AryanG01"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"AryanG01"},"content":" } catch (IOException | DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"Error loading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"AryanG01"},"content":" private void processFileLine(String line) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"AryanG01"},"content":" // Parse the line and create tasks based on the format in the file","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"AryanG01"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"AryanG01"},"content":" if (parts.length !\u003d 3) {","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task format in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"AryanG01"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"AryanG01"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"AryanG01"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"AryanG01"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"AryanG01"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"AryanG01"},"content":" // Check if the description contains date information","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"AryanG01"},"content":" String[] todoParts \u003d description.split(\" \\\\(from: | to: \", 3);","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"AryanG01"},"content":" if (todoParts.length \u003d\u003d 3) {","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"AryanG01"},"content":" LocalDate fromDate \u003d LocalDate.parse(todoParts[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"AryanG01"},"content":" LocalDate toDate \u003d LocalDate.parse(todoParts[2].substring(0, todoParts[2].length() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":185,"author":{"gitId":"AryanG01"},"content":" addTask(new TodoTask(todoParts[0], fromDate, toDate, isDone));","lastModifiedDate":"2023-09-05"},{"lineNumber":186,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":187,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid todo task format in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":188,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":189,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"AryanG01"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"AryanG01"},"content":" // Check if the description contains date information","lastModifiedDate":"2023-09-05"},{"lineNumber":192,"author":{"gitId":"AryanG01"},"content":" String[] deadlineParts \u003d description.split(\" \\\\(by: \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":193,"author":{"gitId":"AryanG01"},"content":" if (deadlineParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":194,"author":{"gitId":"AryanG01"},"content":" LocalDate byDate \u003d LocalDate.parse(deadlineParts[1].substring(0, deadlineParts[1].length() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":195,"author":{"gitId":"AryanG01"},"content":" addTask(new DeadlineTask(deadlineParts[0], byDate, isDone));","lastModifiedDate":"2023-09-05"},{"lineNumber":196,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":197,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid deadline task format in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":198,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":199,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"AryanG01"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"AryanG01"},"content":" // Check if the description contains date information","lastModifiedDate":"2023-09-05"},{"lineNumber":202,"author":{"gitId":"AryanG01"},"content":" String[] eventParts \u003d description.split(\" \\\\(at: \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":203,"author":{"gitId":"AryanG01"},"content":" if (eventParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":204,"author":{"gitId":"AryanG01"},"content":" LocalDate atDate \u003d LocalDate.parse(eventParts[1].substring(0, eventParts[1].length() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":205,"author":{"gitId":"AryanG01"},"content":" addTask(new EventTask(eventParts[0], atDate, isDone));","lastModifiedDate":"2023-09-05"},{"lineNumber":206,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":207,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid event task format in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":208,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":209,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"AryanG01"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Unknown task type in file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":212,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AryanG01":214}},{"path":"src/main/java/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AryanG01":3}},{"path":"src/main/java/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"class TodoTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" private LocalDate fromDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" private LocalDate toDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" public TodoTask(String description, LocalDate fromDate, LocalDate toDate, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" this.fromDate \u003d fromDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" this.toDate \u003d toDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" return \"[T]\" + super.toString() + \" \" + getDescriptionDetails();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" return String.format(\"%s | %d | %s (from: %s to: %s)\", getTaskType(), isDone ? 1 : 0, description,","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" fromDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")),","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" toDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")));","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" return \"T\";","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" private String getDescriptionDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" return description + \" (from: \" + fromDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) +","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" \" to: \" + toDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":35}},{"path":"src/main/java/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"T | 0 | read book (from: 2019-10-15 to: 2019-10-15)","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"D | 0 | read book (by: 2019-10-15)","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"E | 0 | read book (at: 2019-10-15)","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"T | 0 | read book (from: 2019-10-15 to: 2020-10-15)","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":"T | 0 | borrow book /by 6th June","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e master","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"AryanG01":8}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"todo read book","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"todo join sports club","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":"todo borrow book","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":"mark 4","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":"todo","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":"deadline","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":"event","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":"blah","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":"mark","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":"mark 9","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":"mark 8","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":"unmark","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":"unmark -1","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":"unmark 7","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":"delete","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":"delete 100","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":"delete 6","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":"blah","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"AryanG01":27}},{"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":"AryanG01"},"content":"if not exist C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin mkdir C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin","lastModifiedDate":"2023-08-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":"AryanG01"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-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":"AryanG01"},"content":"javac -cp C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\src\\main\\java -Xlint:none -d C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\src\\main\\java\\*.java","lastModifiedDate":"2023-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":"AryanG01"},"content":"java -classpath C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin Duke \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":{"-":17,"AryanG01":4}}] diff --git a/AryanG01_ip_master/commits.json b/AryanG01_ip_master/commits.json index fe7f53d1..7dad4076 100644 --- a/AryanG01_ip_master/commits.json +++ b/AryanG01_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"AryanG01":[{"date":"2023-08-24","commitResults":[{"hash":"08ff577bf38e658cc6b0850ec6ae86aa9ad192cc","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"9503fb3d183ad5ef693bffef83b89514231dcda6","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":4}}},{"hash":"af20120fa730895e8c3bbc4e3aada06e400c8d1d","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"03281e03e339d056c6c09b053627290318fe731c","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":5}}},{"hash":"fe37bbe141fffaa1cb856fde9e5d162ce0ecdb1f","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":21}}}]},{"date":"2023-08-25","commitResults":[{"hash":"4f1bb9381d69ea84ea618be9f1e86387ef3a7a7e","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"bat":{"insertions":5,"deletions":5}}}]},{"date":"2023-08-26","commitResults":[{"hash":"85328e8296f102022438b718ea94a93f493db900","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":56}}},{"hash":"be85d7a5b320f149a4780e6ca5aecf87ca463378","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":21}}},{"hash":"b11f3241ea3ab933c3d79cef90076bc32b12dacb","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":32}}}]},{"date":"2023-08-27","commitResults":[{"hash":"ac724c55711d1496a2bb64ce8e6066874620c405","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":15,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"7fc356d17d38f11957ff0146b8420c459f999ed5","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":96,"deletions":11}}},{"hash":"b959bdf3a7315a931076d8c5cfbf725ccca76ee5","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"16a688d7b9d0d329e6ad0eb48f8e6d4f15288e37","isMergeCommit":false,"messageTitle":"master","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"AryanG01":{"java":354,"md":0,"fxml":0,"sh":0,"bat":4,"gradle":0,"txt":28}},"authorContributionVariance":{"AryanG01":8260.104},"authorDisplayNameMap":{"AryanG01":"CS2103T-F10-1 ARYA..ANJU"}} +{"authorDailyContributionsMap":{"AryanG01":[{"date":"2023-08-24","commitResults":[{"hash":"08ff577bf38e658cc6b0850ec6ae86aa9ad192cc","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"9503fb3d183ad5ef693bffef83b89514231dcda6","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":4}}},{"hash":"af20120fa730895e8c3bbc4e3aada06e400c8d1d","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"03281e03e339d056c6c09b053627290318fe731c","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":5}}},{"hash":"fe37bbe141fffaa1cb856fde9e5d162ce0ecdb1f","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":21}}}]},{"date":"2023-08-25","commitResults":[{"hash":"4f1bb9381d69ea84ea618be9f1e86387ef3a7a7e","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"bat":{"insertions":5,"deletions":5}}}]},{"date":"2023-08-26","commitResults":[{"hash":"85328e8296f102022438b718ea94a93f493db900","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":56}}},{"hash":"be85d7a5b320f149a4780e6ca5aecf87ca463378","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":21}}},{"hash":"b11f3241ea3ab933c3d79cef90076bc32b12dacb","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":32}}}]},{"date":"2023-08-27","commitResults":[{"hash":"ac724c55711d1496a2bb64ce8e6066874620c405","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":15,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"7fc356d17d38f11957ff0146b8420c459f999ed5","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":96,"deletions":11}}},{"hash":"b959bdf3a7315a931076d8c5cfbf725ccca76ee5","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"9d584500b5cefdc41886f2de3253e28a2457f574","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":3,"deletions":4}}},{"hash":"16a688d7b9d0d329e6ad0eb48f8e6d4f15288e37","isMergeCommit":false,"messageTitle":"master","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"c459b53ea14955187a970135dde0e5bd1a66e32d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"ca53b892a5ce1d5629258fcaca203991c4025b6a","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":102,"deletions":64}}},{"hash":"6fa56a4c3c58f03b57182a048a0e6a0afbb6a58a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-8","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke.java\n#\tsrc/main/java/TaskList.java\n#\tsrc/main/java/duke.txt\n","fileTypesAndContributionMap":{}},{"hash":"1461f3c932d9fe61634032b945d75eef95a04599","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"AryanG01":{"java":400,"md":0,"fxml":0,"sh":0,"bat":4,"gradle":0,"txt":35}},"authorContributionVariance":{"AryanG01":8302.691},"authorDisplayNameMap":{"AryanG01":"CS2103T-F10-1 ARYA..ANJU"}} diff --git a/Carlintyj_ip_master/authorship.json b/Carlintyj_ip_master/authorship.json index ef70a4aa..30a41eef 100644 --- a/Carlintyj_ip_master/authorship.json +++ b/Carlintyj_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":"Carlintyj"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-30"},{"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":"Carlintyj"},"content":" maven { url \u0027https://oss.sonatype.org/content/repositories/snapshots/\u0027 }","lastModifiedDate":"2023-08-30"},{"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":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","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":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-30"},{"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":{"-":43,"Carlintyj":6}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"D | 0 | return book | 2023-09-09 18:00","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"E | 0 | project meeting | 2019-09-02 18:00 to 2019-09-02 19:00","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Carlintyj":2}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"D | 0 | return book | 2019-09-02 18:00","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"E | 0 | project meeting | 2019-09-02 18:00 to 2019-09-02 19:00","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"T | 0 | join sports club","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":4}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" * Represents the main class of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" * Duke is a chatbot that helps manage tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" * Constructs a Duke object.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" * @param filePath The path to the file used for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" * Runs the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" * The main method to start the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" * Creates a Duke object and starts the application.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" * @param args Command-line arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":60,"author":{"gitId":"Carlintyj"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":4,"Carlintyj":58}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":" * Represents an exception specific to the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":" * Constructs a DukeException with the specified error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" * @param message The error message describing the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Carlintyj":16}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.task.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" * Represents a command to add tasks to the task list in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" private String fullCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" char type;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" * Constructs an AddCommand object with full command and task type.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" * @param fullCommand The full command input provided by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" * @param type The type of task being added (\u0027T\u0027 for Todo, \u0027D\u0027 for Deadline, \u0027E\u0027 for Event).","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" public AddCommand(String fullCommand, char type) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" this.fullCommand \u003d fullCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" * Executes the add task command, adding the specified task to the task list and updating the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage to update the tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" * @throws DukeException If there\u0027s an error while parsing the user input or updating the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" switch (type) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" String description \u003d fullCommand.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" Todo todo \u003d new Todo(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n\\t\\t\"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" + todo","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" + \"\\n\\tNow you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" storage.updateFileContents(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" String deadlineDescription \u003d fullCommand.substring(9);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" String descriptionText \u003d deadlineDescription.substring(0, deadlineDescription.indexOf(\"/by\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" String dateTime \u003d deadlineDescription.substring(deadlineDescription.indexOf(\"/by\") + 4).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" Deadline deadline \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":" DateTimeFormatter altInputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" LocalDateTime byDateTime \u003d LocalDateTime.parse(dateTime, altInputFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":" deadline \u003d new Deadline(descriptionText, byDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Carlintyj"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"Invalid Date Time: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Carlintyj"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n\\t\\t\"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Carlintyj"},"content":" + deadline","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Carlintyj"},"content":" + \"\\n\\tNow you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Carlintyj"},"content":" storage.updateFileContents(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Carlintyj"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Carlintyj"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Carlintyj"},"content":" String eventDescription \u003d fullCommand.substring(6);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Carlintyj"},"content":" int indexFrom \u003d eventDescription.indexOf(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Carlintyj"},"content":" int indexTo \u003d eventDescription.indexOf(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Carlintyj"},"content":" String eventString \u003d eventDescription.substring(0, indexFrom).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Carlintyj"},"content":" String startTime \u003d eventDescription.substring(indexFrom + \"/from\".length(), indexTo).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Carlintyj"},"content":" String endTime \u003d eventDescription.substring(indexTo + \"/to\".length()).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Carlintyj"},"content":" Event eventTask \u003d new Event(eventString,","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Carlintyj"},"content":" LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")),","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Carlintyj"},"content":" LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Carlintyj"},"content":" taskList.addTask(eventTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n\\t\\t\"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Carlintyj"},"content":" + eventTask","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Carlintyj"},"content":" + \"\\n\\tNow you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Carlintyj"},"content":" storage.updateFileContents(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Carlintyj"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Carlintyj"},"content":" * AddCommand is not an exit command, so this method returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Carlintyj"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Carlintyj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Carlintyj"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":100}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" * Represents an abstract command in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage to update the tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" * @throws DukeException If there\u0027s an error while parsing the user input or updating the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" * @return True if the command is an exit command, false otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":27}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":" * Represents a command to delete tasks to the task list in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * Constructs an DeleteCommand object with full command and task type.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * @param index The index at which the user wish to delete.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" * Executes the delete task command, deleting the specified task to the task list and updating the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage to update the tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" * @throws DukeException If there\u0027s an error while parsing the user input or updating the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" if (index \u003e\u003d taskList.size() || index \u003c 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid index to be deleted!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" String deletedTask \u003d taskList.getPrint(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" taskList.deleteTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(\"Noted. I\u0027ve removed this task:\\n\\t\\t\"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" + deletedTask","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" + \"\\n\\tNow you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" storage.updateFileContents(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" * DeleteCommand is not an exit command, so this method returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":55}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":" * Represents a command to exit the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" * Message card for the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" * @param message The message to be wrapped in the messageCard.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" private String messageCard(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" String horizontalLine \u003d \"\\t____________________________________________________________\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" return horizontalLine + \"\\t \" + message + \"\\n\" + horizontalLine;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" * Executes the exit task command, exiting the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage to update the tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" System.out.println(messageCard(\"Bye. Hope to see you again soon!\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" * ExitCommand is an exit command, so this method returns true.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" * @return True.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":45}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" String searchItem;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" public FindCommand(String searchItem) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" this.searchItem \u003d searchItem;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" String str \u003d \"Here are the tasks in your list:\\n\\t \";","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" if (task.toString().contains(this.searchItem)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" str +\u003d count + 1 + \".\" + task + \"\\n\\t \";","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" count++;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(str.substring(0, str.length() - 3));","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":35}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" * Represents a command to list all the tasks in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * Executes the list task command.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage to update the tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" * @throws DukeException If there\u0027s an error while parsing the user input or updating the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" String str \u003d \"Here are the tasks in your list:\\n\\t \";","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" str +\u003d count + 1 + \".\" + task.toString() + \"\\n\\t \";","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" count++;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(str.substring(0, str.length() - 3));","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" * ListCommand is not an exit command, so this method returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":44}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":" * Represents a command to mark tasks to the task list in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * Constructs an MarkCommand object with full command and task type.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * @param index The index at which the user wish to mark.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" * Executes the mark task command, marking the specific task input by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage to update the tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" if (index \u003e\u003d taskList.size() || index \u003c 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid task to be marked!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" taskList.mark(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(\"OK, I\u0027ve marked this task as done yet:\\n\\t\\t\"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" + taskList.getPrint(index));","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" storage.updateFileContents(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" * MarkCommand is not an exit command, so this method returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":53}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":" * Represents a command to unmark tasks to the task list in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * Constructs an UnmarkCommand object with full command and task type.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * @param index The index at which the user wish to unmark.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" * Executes the unmark task command, unmarking the specific task input by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage to update the tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" if (index \u003e\u003d taskList.size() || index \u003c 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid task to be unmarked!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" taskList.unmark(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(\"OK, I\u0027ve marked this task as not done yet:\\n\\t\\t\"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" + taskList.getPrint(index));","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" storage.updateFileContents(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" * UnmarkCommand is not an exit command, so this method returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":53}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.command.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":" * Parses user input and generates the appropriate Command objects for the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" * This class is responsible for converting user input strings into executable commands.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" * Parses the user input string and generates a corresponding Command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * @param userInput The input string provided by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" * @return A Command object representing the action to be executed.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * @throws DukeException If there\u0027s an error while parsing the user input or generating a Command.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" public static Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" if (userInput.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" } else if (userInput.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" } else if (userInput.contains(\"mark\") \u0026\u0026 userInput.substring(0, 4).equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" if (!userInput.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" int index \u003d Integer.parseInt(userInput.substring(5)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid task to be marked!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid task to be marked!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" } else if (userInput.contains(\"unmark\") \u0026\u0026 userInput.substring(0, 6).equals(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" if (!userInput.equals(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" int index \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid task to be marked!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid task to be unmarked!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" } else if (userInput.contains(\"delete\") \u0026\u0026 userInput.substring(0, 6).equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" if (!userInput.equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" int index \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid index to be deleted!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" } else if (userInput.contains(\"find\") \u0026\u0026 userInput.substring(0, 4).equals(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" if (!userInput.equals(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" String searchItem \u003d userInput.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":" return new FindCommand(searchItem);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! The task to be found cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Carlintyj"},"content":" if (userInput.contains(\"todo\") \u0026\u0026 userInput.substring(0, 4).equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Carlintyj"},"content":" // Add a task","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Carlintyj"},"content":" if (userInput.equals(\"todo\")) { // checks if description is empty","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! The description of todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Carlintyj"},"content":" return new AddCommand(userInput, \u0027T\u0027);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Carlintyj"},"content":" } else if (userInput.contains(\"deadline\") \u0026\u0026 userInput.substring(0, 8).equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Carlintyj"},"content":" // Add a deadline","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Carlintyj"},"content":" if (userInput.equals(\"deadline\") || !userInput.contains(\"/by\")) { // checks if description is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! The description of deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Carlintyj"},"content":" return new AddCommand(userInput, \u0027D\u0027);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Carlintyj"},"content":" } else if (userInput.contains(\"event\") \u0026\u0026 userInput.substring(0, 5).equals(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Carlintyj"},"content":" // Add an event","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Carlintyj"},"content":" if (userInput.equals(\"event\") || !userInput.contains(\"/from\")","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Carlintyj"},"content":" || !userInput.contains(\"/to\")) { // checks if description is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! The description of event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Carlintyj"},"content":" return new AddCommand(userInput, \u0027E\u0027);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":88}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.task.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" * Manages the reading and updating of tasks from/to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" protected String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" * @param filePath The path to the file used for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" private void readFile(File f) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" f.getParentFile().mkdirs(); // Creates parent directories if they don\u0027t exist","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" f.createNewFile(); // Creates the file itself","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" * Loads tasks from the file and returns them as an ArrayList.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" * @return An ArrayList of Task objects loaded from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" * @throws DukeException If there\u0027s an error while loading tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" readFile(f);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" ArrayList\u003cTask\u003e taskArr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" String str \u003d s.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" String[] task \u003d str.split(\" \\\\| \");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" switch (task[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" Todo todo \u003d new Todo(task[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":" if (task[1].equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Carlintyj"},"content":" taskArr.add(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Carlintyj"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Carlintyj"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Carlintyj"},"content":" Deadline deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Carlintyj"},"content":" DateTimeFormatter altInputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Carlintyj"},"content":" LocalDateTime byDateTime \u003d LocalDateTime.parse(task[3], altInputFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Carlintyj"},"content":" deadline \u003d new Deadline(task[2], byDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Carlintyj"},"content":" if (task[1].equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Carlintyj"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Carlintyj"},"content":" taskArr.add(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Carlintyj"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Carlintyj"},"content":" System.out.println(\"Invalid Date Time: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Carlintyj"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Carlintyj"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Carlintyj"},"content":" String[] time \u003d task[3].split(\" to \");","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Carlintyj"},"content":" Event eventTask \u003d new Event(task[2],","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Carlintyj"},"content":" LocalDateTime.parse(time[0], DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")),","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Carlintyj"},"content":" LocalDateTime.parse(time[1], DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Carlintyj"},"content":" if (task[1].equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Carlintyj"},"content":" eventTask.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Carlintyj"},"content":" taskArr.add(eventTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Carlintyj"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Carlintyj"},"content":" return taskArr;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Carlintyj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Carlintyj"},"content":" * Updates the contents of the file with the tasks from the provided TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The TaskList containing tasks to be updated in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Carlintyj"},"content":" public void updateFileContents(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Carlintyj"},"content":" FileWriter file \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Carlintyj"},"content":" file.write(\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Carlintyj"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Carlintyj"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Carlintyj"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Carlintyj"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Carlintyj"},"content":" String taskType \u003d task.toString().substring(1, 2); // Extract \"T\"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Carlintyj"},"content":" String taskStatus \u003d task.toString().substring(4, 5); // Extract \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Carlintyj"},"content":" String description \u003d task.toString().substring(7);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"Carlintyj"},"content":" String convertedTask \u003d taskType + \" | \" + (taskStatus.equals(\" \") ? \"0\" : \"1\") + \" | \" + description;","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"Carlintyj"},"content":" fw.write(convertedTask + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"Carlintyj"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Carlintyj"},"content":" String originalTask \u003d task.writeFileString();","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"Carlintyj"},"content":" String taskType \u003d originalTask.substring(1, 2); // Extract \"D\"","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Carlintyj"},"content":" String taskStatus \u003d originalTask.substring(4, 5); // Extract \"X\"","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Carlintyj"},"content":" String description \u003d originalTask.substring(7, originalTask.indexOf(\" (by:\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Carlintyj"},"content":" String date \u003d originalTask.substring(originalTask.indexOf(\"(by: \") + 5, originalTask.indexOf(\")\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Carlintyj"},"content":" String convertedTask \u003d taskType + \" | \" + (taskStatus.equals(\"X\") ? \"1\" : \"0\") + \" | \" + description + \" | \" + date;","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Carlintyj"},"content":" fw.write(convertedTask + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Carlintyj"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"Carlintyj"},"content":" String originalTask \u003d task.writeFileString();","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"Carlintyj"},"content":" String taskType \u003d originalTask.substring(1, 2); // Extract \"E\"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"Carlintyj"},"content":" String taskStatus \u003d originalTask.substring(4, 5); // Extract \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"Carlintyj"},"content":" String description \u003d originalTask.substring(7, originalTask.indexOf(\" (from:\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"Carlintyj"},"content":" String startTime \u003d originalTask.substring(originalTask.indexOf(\"(from: \") + 7, originalTask.indexOf(\" to:\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"Carlintyj"},"content":" String endTime \u003d originalTask.substring(originalTask.indexOf(\"to: \") + 4, originalTask.indexOf(\")\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"Carlintyj"},"content":" String convertedTask \u003d taskType + \" | \" + (taskStatus.equals(\" \") ? \"0\" : \"1\") + \" | \" + description + \" | \" + startTime + \" to \" + endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"Carlintyj"},"content":" fw.write(convertedTask + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"Carlintyj"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"Carlintyj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"Carlintyj"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":139}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":" * Represents a task with a specific deadline in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" protected LocalDateTime byDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" * Constructs a Deadline object with the specified description and due date.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" * @param byDate The due date and time of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" public Deadline(String description, LocalDateTime byDate) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" this.byDate \u003d byDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the Deadline task for display purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the Deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the Deadline task for writing to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" * The date and time are formatted differently for file storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the Deadline task for file storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" public String writeFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Carlintyj":43}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":" * Represents a task with a specific Event in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * Constructs a Event object with the specified description, start and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" * @param from The start date and time of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" * @param to The end date and time of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the Event task for display purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the Event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"))","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" + \" to: \" + to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the Deadline task for writing to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" * The date and time are formatted differently for file storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the Event task for file storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" public String writeFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"))","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" + \" to: \" + to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Carlintyj":49}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":" * Represents a generic task in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" * Constructs a Task object with the specified description.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" * @return The status icon of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" * Marks the task as done by setting the \u0027isDone\u0027 flag to true.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" * Marks the task as not done by setting the \u0027isDone\u0027 flag to false.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the task for display purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the task for writing to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" * This method is used to format the task for storage in a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the task for file storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Carlintyj"},"content":" public String writeFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Carlintyj"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Carlintyj":62}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":" * Represents a list of tasks in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":" * This class provides methods like adding, deleting, marking, and retrieving tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" protected ArrayList\u003cTask\u003e arrTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" * Constructs a TaskList object with an existing list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * @param arrTask An ArrayList of tasks to initialize the TaskList with.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" public TaskList(ArrayList\u003cTask\u003e arrTask) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" this.arrTask \u003d arrTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" * Constructs an empty TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" this.arrTask \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" * Returns the number of tasks in the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" public int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" return arrTask.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" * Marks a task at the specified index as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" * @param index The index of the task to mark as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" public void mark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" arrTask.get(index).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" * Marks a task at the specified index as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" * @param index The index of the task to mark as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" public void unmark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" arrTask.get(index).markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":" * Returns a formatted string representation of the task at the specified index for display.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":" * @param index The index of the task to retrieve the display string for.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the task for display purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Carlintyj"},"content":" public String getPrint(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Carlintyj"},"content":" return arrTask.get(index).toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Carlintyj"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Carlintyj"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Carlintyj"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Carlintyj"},"content":" this.arrTask.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Carlintyj"},"content":" * Deletes a task at the specified index from the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Carlintyj"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Carlintyj"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Carlintyj"},"content":" this.arrTask.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Carlintyj"},"content":" * Retrieves a task at the specified index from the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Carlintyj"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Carlintyj"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Carlintyj"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Carlintyj"},"content":" return this.arrTask.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":92}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":" * Represents a task with a specific Todo in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":" * Constructs a Todo object with the specified description.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the Todo task for display purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the Event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the Deadline task for writing to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" * The date and time are formatted differently for file storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the Todo task for file storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" public String writeFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" return super.writeFileString();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Carlintyj":37}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":" * Represents the user interface of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":" * This class is responsible for displaying messages and reading user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" private String ChatBotName \u003d \"Carl\";","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" Scanner SC;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * Constructs an Ui object and initializes the Scanner for reading user input from the console.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" this.SC \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" * Formats a given message into a stylized card with a horizontal line.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" * @param message The message to be displayed in the card.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" * @return The stylized message card.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" private String messageCard(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" String horizontalLine \u003d \"\\t____________________________________________________________\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" return horizontalLine + \"\\t \" + message + \"\\n\" + horizontalLine;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" * Displays a message in the message card.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" public void sendMessage(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" System.out.println(messageCard(message));","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" * Displays an error message for loading tasks from a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" System.out.println((messageCard(\"Carl: Error Loading File\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" * Displays an error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" * @param message The error message to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" public void showError(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" System.out.println((messageCard(message)));","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":" * Displays a welcome message.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Carlintyj"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Carlintyj"},"content":" System.out.println(messageCard(\"Hello! I\u0027m \" + ChatBotName","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Carlintyj"},"content":" + \"\\n\\t What can I do for you?\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Carlintyj"},"content":" * Reads and retrieves a command from the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Carlintyj"},"content":" * @return The user\u0027s input command.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Carlintyj"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Carlintyj"},"content":" String userInput \u003d this.SC.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Carlintyj"},"content":" return userInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":74}},{"path":"src/test/java/duke/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.task.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" public void AddSingleTodo() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo read book\", \u0027T\u0027).execute(testList, new Ui(), new Storage(\"data/tasks.txt\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" assertEquals(1, testList.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" public void AddManyTasks() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" Storage storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo read book\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"event project meeting /from 2019-09-02 18:00 /to 2019-09-02 19:00\", \u0027E\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"deadline return book /by 2019-09-02 18:00\", \u0027D\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo join sports\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo homework\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo buy food\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" assertEquals(6, testList.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" public void InvalidDate() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" Storage storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" assertThrows(DateTimeParseException.class,","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" () -\u003e new AddCommand(\"event project meeting /from 2019-09-02 18:00 /to 2019-09 19:00\", \u0027E\u0027).execute(testList, ui, storage));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" public void ExitTest() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" Command c \u003d new AddCommand(\"todo read book\", \u0027T\u0027);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" c. execute(testList, new Ui(), new Storage(\"data/tasks.txt\"));;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" boolean isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" assertEquals(false, isExit);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":53}},{"path":"src/test/java/duke/command/MarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.task.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":"public class MarkCommandTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" public void SingleMark() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" Storage storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo read book\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" new MarkCommand(0).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" assertEquals(\"[T][X] read book\", testList.getPrint(0));","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" public void ManyTasksMark() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" Storage storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo read book\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"event project meeting /from 2019-09-02 18:00 /to 2019-09-02 19:00\", \u0027E\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"deadline return book /by 2019-09-02 18:00\", \u0027D\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo join sports\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo homework\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo buy food\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" new MarkCommand(2).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" assertEquals(\"[D][X] return book (by: Sep 02 2019 18:00)\", testList.getPrint(2));","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" public void InvalidMarkIndex() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" Storage storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" assertThrows(DukeException.class,","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" () -\u003e new MarkCommand(0).execute(testList, ui, storage));","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" public void ExitTest() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" Storage storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo read book\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" Command c \u003d new MarkCommand(0);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":" c.execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" assertEquals(\"[T][X] read book\", testList.getPrint(0));","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":" boolean isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Carlintyj"},"content":" assertEquals(false, isExit);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":61}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"T | 0 | read book","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"D | 1 | return book | 2019-09-02 18:00","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"T | 0 | join sports club","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Carlintyj":3}},{"path":"text-ui-test/data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"T | 0 | read book","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"D | 1 | return book | 2019-09-02 18:00","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"T | 0 | join sports club","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":3}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"todo read book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"deadline return book /by 2019-09-02 18:00","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"event project meeting /from 2019-09-02 18:00 /to 2019-09-02 19:00","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"todo join sports club","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"unmark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"unmark 7","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"deadline","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"blah","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":"delete 3","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":"delete 10","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Carlintyj":17}}] +[{"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":"Carlintyj"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"javafx {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" version \u003d \"11.0.2\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" maven { url \u0027https://oss.sonatype.org/content/repositories/snapshots/\u0027 }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":61,"author":{"gitId":"Carlintyj"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"Carlintyj"},"content":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Carlintyj"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":43,"Carlintyj":27}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"D | 0 | return book | 2023-09-09 18:00","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"E | 0 | project meeting | 2019-09-02 18:00 to 2019-09-02 19:00","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Carlintyj":2}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"D | 0 | return book | 2019-09-02 18:00","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"E | 0 | project meeting | 2019-09-02 18:00 to 2019-09-02 19:00","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"T | 0 | join sports club","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":4}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import java.util.concurrent.TimeUnit;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" * Represents the main class of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" * Duke is a chatbot that helps manage tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" * Constructs a Duke object.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" * @param filePath The path to the file used for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" if (c.isExit()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" Platform.exit();","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" return ui.displayMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" return ui.displayMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" return input;","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":3,"Carlintyj":49}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":" * Represents an exception specific to the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" * Constructs a DukeException with the specified error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" * @param message The error message describing the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Carlintyj":15}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Main;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Carlintyj":13}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * Represents a command to add tasks to the task list in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" private String fullCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" private char type;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" * Constructs an AddCommand object with full command and task type.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" * @param fullCommand The full command input provided by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" * @param type The type of task being added (\u0027T\u0027 for Todo, \u0027D\u0027 for Deadline, \u0027E\u0027 for Event).","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" public AddCommand(String fullCommand, char type) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" this.fullCommand \u003d fullCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" * Executes the add task command, adding the specified task to the task list and updating the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage to update the tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" * @throws DukeException If there\u0027s an error while parsing the user input or updating the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" switch (type) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" String description \u003d fullCommand.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" Todo todo \u003d new Todo(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n\\t\\t\"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" + todo","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" + \"\\n\\tNow you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" storage.updateFileContents(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" String deadlineDescription \u003d fullCommand.substring(9);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":" String descriptionText \u003d deadlineDescription.substring(0, deadlineDescription.indexOf(\"/by\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" String dateTime \u003d deadlineDescription.substring(deadlineDescription.indexOf(\"/by\") + 4).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":" Deadline deadline \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Carlintyj"},"content":" DateTimeFormatter altInputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Carlintyj"},"content":" LocalDateTime byDateTime \u003d LocalDateTime.parse(dateTime, altInputFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Carlintyj"},"content":" deadline \u003d new Deadline(descriptionText, byDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Carlintyj"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"Invalid Date Time: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Carlintyj"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n\\t\\t\"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Carlintyj"},"content":" + deadline","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Carlintyj"},"content":" + \"\\n\\tNow you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Carlintyj"},"content":" storage.updateFileContents(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Carlintyj"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Carlintyj"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Carlintyj"},"content":" String eventDescription \u003d fullCommand.substring(6);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Carlintyj"},"content":" int indexFrom \u003d eventDescription.indexOf(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Carlintyj"},"content":" int indexTo \u003d eventDescription.indexOf(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Carlintyj"},"content":" String eventString \u003d eventDescription.substring(0, indexFrom).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Carlintyj"},"content":" String startTime \u003d eventDescription.substring(indexFrom + \"/from\".length(), indexTo).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Carlintyj"},"content":" String endTime \u003d eventDescription.substring(indexTo + \"/to\".length()).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Carlintyj"},"content":" Event eventTask \u003d new Event(eventString,","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Carlintyj"},"content":" LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")),","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Carlintyj"},"content":" LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Carlintyj"},"content":" taskList.addTask(eventTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n\\t\\t\"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Carlintyj"},"content":" + eventTask","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Carlintyj"},"content":" + \"\\n\\tNow you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Carlintyj"},"content":" storage.updateFileContents(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Carlintyj"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Carlintyj"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Carlintyj"},"content":" * AddCommand is not an exit command, so this method returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Carlintyj"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Carlintyj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Carlintyj"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":105}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" * Represents an abstract command in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage to update the tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" * @throws DukeException If there\u0027s an error while parsing the user input or updating the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" * @return True if the command is an exit command, false otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":27}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":" * Represents a command to delete tasks to the task list in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * Constructs an DeleteCommand object with full command and task type.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * @param index The index at which the user wish to delete.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" * Executes the delete task command, deleting the specified task to the task list and updating the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage to update the tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" * @throws DukeException If there\u0027s an error while parsing the user input or updating the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" if (index \u003e\u003d taskList.size() || index \u003c 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid index to be deleted!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" String deletedTask \u003d taskList.getPrint(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" taskList.deleteTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(\"Noted. I\u0027ve removed this task:\\n\\t\\t\"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" + deletedTask","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" + \"\\n\\tNow you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" storage.updateFileContents(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" * DeleteCommand is not an exit command, so this method returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":55}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" * Represents a command to exit the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" * Executes the exit task command, exiting the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage to update the tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" * ExitCommand is an exit command, so this method returns true.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" * @return True.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":34}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" * Represents a command to find tasks in the task list that match a given search query.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" private String searchItem;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" * Constructs a new FindCommand with the specified search query.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" * @param searchItem The search query entered by the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" public FindCommand(String searchItem) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" this.searchItem \u003d searchItem;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" * Executes the find command to search for tasks in the task list that contain","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" * the search query and displays the matching tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The TaskList containing all tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage for saving and loading tasks (not used in this command).","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" * @throws DukeException If there is an issue executing the command.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" String str \u003d \"Here are the tasks in your list:\\n\\t \";","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" if (task.toString().contains(this.searchItem)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" str +\u003d count + 1 + \".\" + task + \"\\n\\t \";","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" count++;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(str.substring(0, str.length() - 3));","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command should exit the application.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" * @return False, as the find command does not exit the application.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":56}},{"path":"src/main/java/duke/command/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" * Represents a command to list all available commands.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * Executes the help command.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage to update the tasks in the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" * @throws DukeException If there\u0027s an error while parsing the user input or updating the storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" String str \u003d \"Here are the available commands:\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" \"1. todo \u003ctask\u003e\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" \"2. deadline \u003ctask\u003e /by \u003cdate\u003e\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" \"3. event \u003ctask\u003e /from \u003cdate\u003e /to \u003cdate\u003e\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" \"4. mark \u003cindex\u003e\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" \"5. unmark \u003cindex\u003e\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" \"6. delete \u003cindex\u003e\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" \"7. find \u003cindex\u003e\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" \"8. list\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" \"9. bye\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(str);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" * HelpCommand is not an exit command, so this method returns false.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" * @return False.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Carlintyj":48}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" * Represents a command to list all the tasks in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * Executes the list task command.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage to update the tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" * @throws DukeException If there\u0027s an error while parsing the user input or updating the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" String str \u003d \"Here are the tasks in your list:\\n\\t \";","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" str +\u003d count + 1 + \".\" + task.toString() + \"\\n\\t \";","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" count++;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(str.substring(0, str.length() - 3));","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" * ListCommand is not an exit command, so this method returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":44}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":" * Represents a command to mark tasks to the task list in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" private int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * Constructs an MarkCommand object with full command and task type.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * @param index The index at which the user wish to mark.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" * Executes the mark task command, marking the specific task input by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage to update the tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" if (index \u003e\u003d taskList.size() || index \u003c 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid task to be marked!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" taskList.mark(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(\"OK, I\u0027ve marked this task as done yet:\\n\\t\\t\"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" + taskList.getPrint(index));","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" storage.updateFileContents(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" * MarkCommand is not an exit command, so this method returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":53}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":" * Represents a command to unmark tasks to the task list in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * Constructs an UnmarkCommand object with full command and task type.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * @param index The index at which the user wish to unmark.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" * Executes the unmark task command, unmarking the specific task input by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" * @param storage The storage to update the tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" if (index \u003e\u003d taskList.size() || index \u003c 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid task to be unmarked!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" taskList.unmark(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" ui.sendMessage(\"OK, I\u0027ve marked this task as not done yet:\\n\\t\\t\"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" + taskList.getPrint(index));","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" storage.updateFileContents(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" * UnmarkCommand is not an exit command, so this method returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":53}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"import duke.command.HelpCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" * Parses user input and generates the appropriate Command objects for the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * This class is responsible for converting user input strings into executable commands.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" * Parses the user input string and generates a corresponding Command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" * @param userInput The input string provided by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" * @return A Command object representing the action to be executed.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" * @throws DukeException If there\u0027s an error while parsing the user input or generating a Command.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" public static Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" if (userInput.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" } else if (userInput.equals(\"help\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" return new HelpCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" } else if (userInput.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" } else if (userInput.contains(\"mark\") \u0026\u0026 userInput.substring(0, 4).equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" if (!userInput.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" int index \u003d Integer.parseInt(userInput.substring(5)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid task to be marked!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid task to be marked!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" } else if (userInput.contains(\"unmark\") \u0026\u0026 userInput.substring(0, 6).equals(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" if (!userInput.equals(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" int index \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid task to be marked!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid task to be unmarked!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" } else if (userInput.contains(\"delete\") \u0026\u0026 userInput.substring(0, 6).equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":" if (!userInput.equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Carlintyj"},"content":" int index \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Carlintyj"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! Invalid index to be deleted!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Carlintyj"},"content":" } else if (userInput.contains(\"find\") \u0026\u0026 userInput.substring(0, 4).equals(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Carlintyj"},"content":" if (!userInput.equals(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Carlintyj"},"content":" String searchItem \u003d userInput.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Carlintyj"},"content":" return new FindCommand(searchItem);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! The task to be found cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Carlintyj"},"content":" if (userInput.contains(\"todo\") \u0026\u0026 userInput.substring(0, 4).equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Carlintyj"},"content":" // Add a task","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Carlintyj"},"content":" if (userInput.equals(\"todo\")) { // checks if description is empty","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! The description of todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Carlintyj"},"content":" return new AddCommand(userInput, \u0027T\u0027);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Carlintyj"},"content":" } else if (userInput.contains(\"deadline\") \u0026\u0026 userInput.substring(0, 8).equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Carlintyj"},"content":" // Add a deadline","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Carlintyj"},"content":" if (userInput.equals(\"deadline\") || !userInput.contains(\"/by\")) { // checks if description is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! The description of deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Carlintyj"},"content":" return new AddCommand(userInput, \u0027D\u0027);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Carlintyj"},"content":" } else if (userInput.contains(\"event\") \u0026\u0026 userInput.substring(0, 5).equals(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Carlintyj"},"content":" // Add an event","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Carlintyj"},"content":" if (userInput.equals(\"event\") || !userInput.contains(\"/from\")","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Carlintyj"},"content":" || !userInput.contains(\"/to\")) { // checks if description is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! The description of event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Carlintyj"},"content":" return new AddCommand(userInput, \u0027E\u0027);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Carlintyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":99}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" * Manages the reading and updating of tasks from/to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" protected String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" * @param filePath The path to the file used for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" private void readFile(File f) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" f.getParentFile().mkdirs(); // Creates parent directories if they don\u0027t exist","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" f.createNewFile(); // Creates the file itself","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" * Loads tasks from the file and returns them as an ArrayList.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" * @return An ArrayList of Task objects loaded from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" * @throws DukeException If there\u0027s an error while loading tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" readFile(f);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" ArrayList\u003cTask\u003e taskArr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" String str \u003d s.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":" String[] task \u003d str.split(\" \\\\| \");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" switch (task[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Carlintyj"},"content":" Todo todo \u003d new Todo(task[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Carlintyj"},"content":" if (task[1].equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Carlintyj"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Carlintyj"},"content":" taskArr.add(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Carlintyj"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Carlintyj"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Carlintyj"},"content":" Deadline deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Carlintyj"},"content":" DateTimeFormatter altInputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Carlintyj"},"content":" LocalDateTime byDateTime \u003d LocalDateTime.parse(task[3], altInputFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Carlintyj"},"content":" deadline \u003d new Deadline(task[2], byDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Carlintyj"},"content":" if (task[1].equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Carlintyj"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Carlintyj"},"content":" taskArr.add(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Carlintyj"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Carlintyj"},"content":" System.out.println(\"Invalid Date Time: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Carlintyj"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Carlintyj"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Carlintyj"},"content":" String[] time \u003d task[3].split(\" to \");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Carlintyj"},"content":" Event eventTask \u003d new Event(task[2],","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Carlintyj"},"content":" LocalDateTime.parse(time[0], DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")),","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Carlintyj"},"content":" LocalDateTime.parse(time[1], DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Carlintyj"},"content":" if (task[1].equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Carlintyj"},"content":" eventTask.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Carlintyj"},"content":" taskArr.add(eventTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Carlintyj"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Carlintyj"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Carlintyj"},"content":" return taskArr;","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Carlintyj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Carlintyj"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Carlintyj"},"content":" * Updates the contents of the file with the tasks from the provided TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Carlintyj"},"content":" * @param taskList The TaskList containing tasks to be updated in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Carlintyj"},"content":" public void updateFileContents(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Carlintyj"},"content":" FileWriter file \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Carlintyj"},"content":" file.write(\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Carlintyj"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Carlintyj"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"Carlintyj"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"Carlintyj"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"Carlintyj"},"content":" String taskType \u003d task.toString().substring(1, 2); // Extract \"T\"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Carlintyj"},"content":" String taskStatus \u003d task.toString().substring(4, 5);","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"Carlintyj"},"content":" String description \u003d task.toString().substring(7);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Carlintyj"},"content":" String convertedTask \u003d taskType + \" | \" + (taskStatus.equals(\" \") ? \"0\" : \"1\") + \" | \"","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"Carlintyj"},"content":" + description;","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"Carlintyj"},"content":" fw.write(convertedTask + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Carlintyj"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Carlintyj"},"content":" String originalTask \u003d task.writeFileString();","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Carlintyj"},"content":" String taskType \u003d originalTask.substring(1, 2); // Extract \"D\"","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Carlintyj"},"content":" String taskStatus \u003d originalTask.substring(4, 5); // Extract \"X\"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"Carlintyj"},"content":" String description \u003d originalTask.substring(7, originalTask.indexOf(\" (by:\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"Carlintyj"},"content":" String date \u003d originalTask.substring(originalTask.indexOf(\"(by: \") + 5,","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"Carlintyj"},"content":" originalTask.indexOf(\")\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"Carlintyj"},"content":" String convertedTask \u003d taskType + \" | \" + (taskStatus.equals(\"X\") ? \"1\" : \"0\") + \" | \"","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"Carlintyj"},"content":" + description + \" | \" + date;","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"Carlintyj"},"content":" fw.write(convertedTask + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"Carlintyj"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"Carlintyj"},"content":" String originalTask \u003d task.writeFileString();","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"Carlintyj"},"content":" String taskType \u003d originalTask.substring(1, 2); // Extract \"E\"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"Carlintyj"},"content":" String taskStatus \u003d originalTask.substring(4, 5); // Extract \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"Carlintyj"},"content":" String description \u003d originalTask.substring(7, originalTask.indexOf(\" (from:\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"Carlintyj"},"content":" String startTime \u003d originalTask.substring(originalTask.indexOf(\"(from: \") + 7,","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"Carlintyj"},"content":" originalTask.indexOf(\" to:\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"Carlintyj"},"content":" String endTime \u003d originalTask.substring(originalTask.indexOf(\"to: \") + 4,","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"Carlintyj"},"content":" originalTask.indexOf(\")\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"Carlintyj"},"content":" String convertedTask \u003d taskType + \" | \" + (taskStatus.equals(\" \") ? \"0\" : \"1\") + \" | \"","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"Carlintyj"},"content":" + description + \" | \" + startTime + \" to \" + endTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"Carlintyj"},"content":" fw.write(convertedTask + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"Carlintyj"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"Carlintyj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"Carlintyj"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":149}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":" * Represents a task with a specific deadline in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" protected LocalDateTime byDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" * Constructs a Deadline object with the specified description and due date.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" * @param byDate The due date and time of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" public Deadline(String description, LocalDateTime byDate) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" this.byDate \u003d byDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the Deadline task for display purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the Deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" + byDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the Deadline task for writing to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" * The date and time are formatted differently for file storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the Deadline task for file storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" public String writeFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" + byDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Carlintyj":45}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":" * Represents a task with a specific Event in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * Constructs a Event object with the specified description, start and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" * @param from The start date and time of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" * @param to The end date and time of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the Event task for display purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the Event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"))","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" + \" to: \" + to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the Deadline task for writing to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" * The date and time are formatted differently for file storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the Event task for file storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" public String writeFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"))","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" + \" to: \" + to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Carlintyj":49}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":" * Represents a generic task in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" * Constructs a Task object with the specified description.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" * @return The status icon of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" * Marks the task as done by setting the \u0027isDone\u0027 flag to true.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" * Marks the task as not done by setting the \u0027isDone\u0027 flag to false.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the task for display purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the task for writing to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" * This method is used to format the task for storage in a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the task for file storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Carlintyj"},"content":" public String writeFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Carlintyj"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Carlintyj":62}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":" * Represents a list of tasks in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":" * This class provides methods like adding, deleting, marking, and retrieving tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" protected ArrayList\u003cTask\u003e arrTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" * Constructs a TaskList object with an existing list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" * @param arrTask An ArrayList of tasks to initialize the TaskList with.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" public TaskList(ArrayList\u003cTask\u003e arrTask) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" this.arrTask \u003d arrTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" * Constructs an empty TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" this.arrTask \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" * Returns the number of tasks in the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" public int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" return arrTask.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" * Marks a task at the specified index as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" * @param index The index of the task to mark as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" public void mark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" arrTask.get(index).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" * Marks a task at the specified index as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" * @param index The index of the task to mark as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" public void unmark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" arrTask.get(index).markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":" * Returns a formatted string representation of the task at the specified index for display.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":" * @param index The index of the task to retrieve the display string for.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the task for display purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Carlintyj"},"content":" public String getPrint(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Carlintyj"},"content":" return arrTask.get(index).toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Carlintyj"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Carlintyj"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Carlintyj"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Carlintyj"},"content":" this.arrTask.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Carlintyj"},"content":" * Deletes a task at the specified index from the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Carlintyj"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Carlintyj"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Carlintyj"},"content":" this.arrTask.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Carlintyj"},"content":" * Retrieves a task at the specified index from the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Carlintyj"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Carlintyj"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Carlintyj"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Carlintyj"},"content":" return this.arrTask.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":92}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":" * Represents a task with a specific Todo in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":" * Constructs a Todo object with the specified description.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the Todo task for display purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the Event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" * Returns a string representation of the Deadline task for writing to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" * The date and time are formatted differently for file storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" * @return A formatted string representation of the Todo task for file storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" public String writeFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" return super.writeFileString();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Carlintyj":37}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"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":20,"author":{"gitId":"Carlintyj"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Carlintyj"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Carlintyj":61}},{"path":"src/main/java/duke/ui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" private Duke duke \u003d new Duke(\"data/tasks.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Carlintyj":32}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" DialogBox.getDukeDialog(ui.showWelcome(), dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"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":44,"author":{"gitId":"Carlintyj"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Carlintyj":56}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":" * Represents the user interface of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":" * This class is responsible for displaying messages and reading user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" private String chatBotName \u003d \"Carl\";","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" private String message \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" * Displays a message in the message card.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" * @return String of message.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" public String sendMessage(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" return this.message \u003d message;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" * Displays a welcome message.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" * @return The welcome message to be displayed.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" return \"CARL BOT:\\nHello! I\u0027m \" + chatBotName","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" + \"\\nWhat can I do for you?\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" \"Type \\\"help\\\" to begin\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" * Displays a welcome message.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" * @return The welcome message to be displayed.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" public String displayMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" return \"CARL:\\n\" + this.message;","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":45}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17.0.7\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":" \u003cLabel fx:id\u003d\"dialog\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" \u003cFont name\u003d\"KoHo Regular\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" \u003c/font\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"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":16,"author":{"gitId":"Carlintyj"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Carlintyj":20}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"\u003c?import javafx.scene.control.Menu?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"\u003c?import javafx.scene.control.MenuBar?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"\u003c?import javafx.scene.control.MenuItem?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"\u003cAnchorPane minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"600.0\" xmlns\u003d\"http://javafx.com/javafx/17.0.7\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"524.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"524.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-05"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hvalue\u003d\"1.0\" pannable\u003d\"true\" prefHeight\u003d\"557.0\" prefWidth\u003d\"600.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"588.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" \u003cMenuBar prefHeight\u003d\"28.0\" prefWidth\u003d\"600.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" \u003cmenus\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":" \u003cMenu mnemonicParsing\u003d\"false\" text\u003d\"File\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" \u003citems\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" \u003cMenuItem mnemonicParsing\u003d\"false\" text\u003d\"Close\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" \u003c/items\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" \u003c/Menu\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" \u003cMenu mnemonicParsing\u003d\"false\" text\u003d\"Edit\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" \u003citems\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" \u003cMenuItem mnemonicParsing\u003d\"false\" text\u003d\"Delete\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" \u003c/items\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" \u003c/Menu\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" \u003cMenu mnemonicParsing\u003d\"false\" text\u003d\"Help\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" \u003citems\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" \u003cMenuItem mnemonicParsing\u003d\"false\" text\u003d\"About\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" \u003c/items\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" \u003c/Menu\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" \u003c/menus\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":" \u003c/MenuBar\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Carlintyj":41}},{"path":"src/test/java/duke/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" public void AddSingleTodo() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo read book\", \u0027T\u0027)","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" .execute(testList, new Ui(), new Storage(\"data/tasks.txt\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" assertEquals(1, testList.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" public void AddManyTasks() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" Storage storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo read book\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"event project meeting /from 2019-09-02 18:00 /to 2019-09-02 19:00\", \u0027E\u0027)","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" .execute(testList, ui, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"deadline return book /by 2019-09-02 18:00\", \u0027D\u0027)","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" .execute(testList, ui, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo join sports\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo homework\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo buy food\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" assertEquals(6, testList.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" public void InvalidDate() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" Storage storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" assertThrows(DateTimeParseException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"event project meeting /from 2019-09-02 18:00 /to 2019-09 19:00\", \u0027E\u0027)","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" .execute(testList, ui, storage));","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" public void ExitTest() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" Command c \u003d new AddCommand(\"todo read book\", \u0027T\u0027);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" c.execute(testList, new Ui(), new Storage(\"data/tasks.txt\"));;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" boolean isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":" assertEquals(false, isExit);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":58}},{"path":"src/test/java/duke/command/MarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"public class MarkCommandTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":" public void SingleMark() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":" Storage storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Carlintyj"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo read book\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Carlintyj"},"content":" new MarkCommand(0).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Carlintyj"},"content":" assertEquals(\"[T][X] read book\", testList.getPrint(0));","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Carlintyj"},"content":" public void ManyTasksMark() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Carlintyj"},"content":" Storage storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Carlintyj"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo read book\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"event project meeting /from 2019-09-02 18:00 /to 2019-09-02 19:00\", \u0027E\u0027)","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Carlintyj"},"content":" .execute(testList, ui, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"deadline return book /by 2019-09-02 18:00\", \u0027D\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo join sports\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo homework\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo buy food\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Carlintyj"},"content":" new MarkCommand(2).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Carlintyj"},"content":" assertEquals(\"[D][X] return book (by: Sep 02 2019 18:00)\", testList.getPrint(2));","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Carlintyj"},"content":" public void InvalidMarkIndex() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Carlintyj"},"content":" Storage storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Carlintyj"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Carlintyj"},"content":" assertThrows(DukeException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Carlintyj"},"content":" new MarkCommand(0).execute(testList, ui, storage));","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Carlintyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Carlintyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Carlintyj"},"content":" public void ExitTest() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Carlintyj"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Carlintyj"},"content":" Storage storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Carlintyj"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Carlintyj"},"content":" new AddCommand(\"todo read book\", \u0027T\u0027).execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Carlintyj"},"content":" Command c \u003d new MarkCommand(0);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Carlintyj"},"content":" c.execute(testList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Carlintyj"},"content":" assertEquals(\"[T][X] read book\", testList.getPrint(0));","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Carlintyj"},"content":" boolean isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Carlintyj"},"content":" assertEquals(false, isExit);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Carlintyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Carlintyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":61}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"T | 0 | read book","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"D | 1 | return book | 2019-09-02 18:00","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"T | 0 | join sports club","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Carlintyj":3}},{"path":"text-ui-test/data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"T | 0 | read book","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"D | 1 | return book | 2019-09-02 18:00","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"T | 0 | join sports club","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Carlintyj":3}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Carlintyj"},"content":"todo read book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Carlintyj"},"content":"deadline return book /by 2019-09-02 18:00","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Carlintyj"},"content":"event project meeting /from 2019-09-02 18:00 /to 2019-09-02 19:00","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Carlintyj"},"content":"todo join sports club","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Carlintyj"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Carlintyj"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Carlintyj"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Carlintyj"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Carlintyj"},"content":"unmark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Carlintyj"},"content":"unmark 7","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Carlintyj"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Carlintyj"},"content":"deadline","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Carlintyj"},"content":"blah","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Carlintyj"},"content":"delete 3","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Carlintyj"},"content":"delete 10","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Carlintyj"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Carlintyj"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Carlintyj":17}}] diff --git a/Carlintyj_ip_master/commits.json b/Carlintyj_ip_master/commits.json index 0cb7f7c9..2c9258e6 100644 --- a/Carlintyj_ip_master/commits.json +++ b/Carlintyj_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Carlintyj":[{"date":"2023-08-22","commitResults":[{"hash":"912d8cfe5ae97a83222112f1f7b9b5bbe3a8b763","isMergeCommit":false,"messageTitle":"Given chatbot a new name and implemented initial skeleton","messageBody":"","tags":["level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"426e88b8230c62ab5dda4f85b83992f9ccb88a83","isMergeCommit":false,"messageTitle":"Improve skeletal version by echoing commands by user","messageBody":"","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":5}}},{"hash":"74a1837d891cc06ea7bf86cac23797e60d4ceaa1","isMergeCommit":false,"messageTitle":"Added the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}},{"hash":"24b17a3e5fbde98f729ad2a0fd7e0fea347568ec","isMergeCommit":false,"messageTitle":"Added the ability to mark tasks as done and back to not done.","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":7}}},{"hash":"08603b8b2aec177ee9d61a3024a01e6c81a604d2","isMergeCommit":false,"messageTitle":"Added support for tracking three types of tasks","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":5}}},{"hash":"b96f64b64d52493401bead8164d3ceef1d404f6b","isMergeCommit":false,"messageTitle":"Test using I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":3,"deletions":2},"sh":{"insertions":0,"deletions":0}}},{"hash":"2872e615f280211512af79f879a72ea890c018de","isMergeCommit":false,"messageTitle":"Added Error Handling","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":61,"deletions":22}}},{"hash":"0b9beaabe4b68aec3a06dd8e6d1bd1401bab8e9a","isMergeCommit":false,"messageTitle":"Added support for deleting tasks from the list.","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":49,"deletions":31}}}]},{"date":"2023-08-29","commitResults":[{"hash":"c69d6b0133e26ecb05feb4d2a8bd9a96c4417471","isMergeCommit":false,"messageTitle":"Save tasks in the hard disk automatically whenever the task list changes.","messageBody":"","tags":["level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":190,"deletions":82}}},{"hash":"70384ae1d37fe6392808b7d584ec1ebc3c7cfc9a","isMergeCommit":false,"messageTitle":"Revert \"Save tasks in the hard disk automatically whenever the task list changes.\"","messageBody":"This reverts commit c69d6b0133e26ecb05feb4d2a8bd9a96c4417471.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":7},"java":{"insertions":82,"deletions":190}}},{"hash":"7419e6f4a8f1f887b89b3755e1617a5ccbad4c9f","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Save tasks in the hard disk automatically whenever the task list changes.\"\"","messageBody":"This reverts commit 70384ae1d37fe6392808b7d584ec1ebc3c7cfc9a.\n","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":190,"deletions":82}}},{"hash":"7f70cce68d82fb9fa5d09e538b0d732af416a020","isMergeCommit":false,"messageTitle":"Store dates as LocalDate","messageBody":"","tags":["level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":7},"java":{"insertions":62,"deletions":29}}}]},{"date":"2023-08-30","commitResults":[{"hash":"cc5770813dc53b2b1b440d278333cd18c2d24356","isMergeCommit":false,"messageTitle":"Configured program into more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":1},"java":{"insertions":451,"deletions":253}}},{"hash":"2f24ecc12be419d1017a29a5a389c320683b0180","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":15}}},{"hash":"9d66b26fc9fa8bbac5acfe05438b38b84e1098eb","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"* add-gradle-support:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"c27861be5e9cfa322bca8de760809a1b8390eac5","isMergeCommit":false,"messageTitle":"Automate project builds using Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1}}},{"hash":"46b3418e13a080fdfc4f23d591e3492f78f2801b","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4},"java":{"insertions":114,"deletions":0}}},{"hash":"4e1042052ff4203d7f6230c60cc2f792cd436c57","isMergeCommit":false,"messageTitle":"Package App as JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"bedb067a571f134ed0cfc746d6af21088e17d3fc","isMergeCommit":false,"messageTitle":"Give users a way to find a task by searching for a keyword","messageBody":"","tags":["level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":42,"deletions":0}}},{"hash":"228e14ab0b604b749def7761165ac76a0d50ee1f","isMergeCommit":false,"messageTitle":"Follow coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":84}}},{"hash":"f1a6d9094dbbd85c60aaf4b9f7c98df59bad1645","isMergeCommit":false,"messageTitle":"JavaDocs for the Duke application","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":389,"deletions":3}}},{"hash":"1ac7ffaafb6819c5c867a03024d51c260390187a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Give users a way to find a task by searching for a keyword\n","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Carlintyj":{"java":1184,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":6,"txt":29}},"authorContributionVariance":{"Carlintyj":215895.64},"authorDisplayNameMap":{"Carlintyj":"CS2103T-T17-4 TAN ..RLIN"}} +{"authorDailyContributionsMap":{"Carlintyj":[{"date":"2023-08-22","commitResults":[{"hash":"912d8cfe5ae97a83222112f1f7b9b5bbe3a8b763","isMergeCommit":false,"messageTitle":"Given chatbot a new name and implemented initial skeleton","messageBody":"","tags":["level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"426e88b8230c62ab5dda4f85b83992f9ccb88a83","isMergeCommit":false,"messageTitle":"Improve skeletal version by echoing commands by user","messageBody":"","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":5}}},{"hash":"74a1837d891cc06ea7bf86cac23797e60d4ceaa1","isMergeCommit":false,"messageTitle":"Added the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}},{"hash":"24b17a3e5fbde98f729ad2a0fd7e0fea347568ec","isMergeCommit":false,"messageTitle":"Added the ability to mark tasks as done and back to not done.","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":7}}},{"hash":"08603b8b2aec177ee9d61a3024a01e6c81a604d2","isMergeCommit":false,"messageTitle":"Added support for tracking three types of tasks","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":5}}},{"hash":"b96f64b64d52493401bead8164d3ceef1d404f6b","isMergeCommit":false,"messageTitle":"Test using I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":3,"deletions":2},"sh":{"insertions":0,"deletions":0}}},{"hash":"2872e615f280211512af79f879a72ea890c018de","isMergeCommit":false,"messageTitle":"Added Error Handling","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":61,"deletions":22}}},{"hash":"0b9beaabe4b68aec3a06dd8e6d1bd1401bab8e9a","isMergeCommit":false,"messageTitle":"Added support for deleting tasks from the list.","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":49,"deletions":31}}}]},{"date":"2023-08-29","commitResults":[{"hash":"c69d6b0133e26ecb05feb4d2a8bd9a96c4417471","isMergeCommit":false,"messageTitle":"Save tasks in the hard disk automatically whenever the task list changes.","messageBody":"","tags":["level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":190,"deletions":82}}},{"hash":"70384ae1d37fe6392808b7d584ec1ebc3c7cfc9a","isMergeCommit":false,"messageTitle":"Revert \"Save tasks in the hard disk automatically whenever the task list changes.\"","messageBody":"This reverts commit c69d6b0133e26ecb05feb4d2a8bd9a96c4417471.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":7},"java":{"insertions":82,"deletions":190}}},{"hash":"7419e6f4a8f1f887b89b3755e1617a5ccbad4c9f","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Save tasks in the hard disk automatically whenever the task list changes.\"\"","messageBody":"This reverts commit 70384ae1d37fe6392808b7d584ec1ebc3c7cfc9a.\n","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":190,"deletions":82}}},{"hash":"7f70cce68d82fb9fa5d09e538b0d732af416a020","isMergeCommit":false,"messageTitle":"Store dates as LocalDate","messageBody":"","tags":["level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":7},"java":{"insertions":62,"deletions":29}}}]},{"date":"2023-08-30","commitResults":[{"hash":"cc5770813dc53b2b1b440d278333cd18c2d24356","isMergeCommit":false,"messageTitle":"Configured program into more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":1},"java":{"insertions":451,"deletions":253}}},{"hash":"2f24ecc12be419d1017a29a5a389c320683b0180","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":15}}},{"hash":"9d66b26fc9fa8bbac5acfe05438b38b84e1098eb","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"* add-gradle-support:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"c27861be5e9cfa322bca8de760809a1b8390eac5","isMergeCommit":false,"messageTitle":"Automate project builds using Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1}}},{"hash":"46b3418e13a080fdfc4f23d591e3492f78f2801b","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4},"java":{"insertions":114,"deletions":0}}},{"hash":"4e1042052ff4203d7f6230c60cc2f792cd436c57","isMergeCommit":false,"messageTitle":"Package App as JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"bedb067a571f134ed0cfc746d6af21088e17d3fc","isMergeCommit":false,"messageTitle":"Give users a way to find a task by searching for a keyword","messageBody":"","tags":["level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":42,"deletions":0}}},{"hash":"228e14ab0b604b749def7761165ac76a0d50ee1f","isMergeCommit":false,"messageTitle":"Follow coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":84}}},{"hash":"f1a6d9094dbbd85c60aaf4b9f7c98df59bad1645","isMergeCommit":false,"messageTitle":"JavaDocs for the Duke application","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":389,"deletions":3}}},{"hash":"1ac7ffaafb6819c5c867a03024d51c260390187a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Give users a way to find a task by searching for a keyword\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"be4f1660fb7db8e3ff5e7a9489d24e62ad946c78","isMergeCommit":false,"messageTitle":"Uses checkstyle to detect coding violations and fix it.","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":55}}},{"hash":"b0781902bc46bddb4cabab44b40e8b6914e575b8","isMergeCommit":false,"messageTitle":"Adds a GUI to the chatbot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":22,"deletions":1},"fxml":{"insertions":61,"deletions":0},"java":{"insertions":243,"deletions":79}}}]}]},"authorFileTypeContributionMap":{"Carlintyj":{"java":1398,"md":0,"fxml":61,"sh":0,"bat":0,"gradle":27,"txt":29}},"authorContributionVariance":{"Carlintyj":165275.48},"authorDisplayNameMap":{"Carlintyj":"CS2103T-T17-4 TAN ..RLIN"}} diff --git a/Cleon2_ip_master/authorship.json b/Cleon2_ip_master/authorship.json index b8db158e..8bdfcd12 100644 --- a/Cleon2_ip_master/authorship.json +++ b/Cleon2_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"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":"Cleon2"},"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":{"Cleon2":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":"Cleon2"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"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":{"Cleon2":1,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"T | 0 | chicken rice | ","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"D | 0 | nasi lemak | 2023-09-22T09:00","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"E | 0 | rotisserie chicken | 2021-03-22T09:00--2023-04-23T12:00","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Cleon2":3}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" * Represents the main application class for Duke.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" private DukeList ItemList;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" private Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" * Constructs a Duke instance with the given file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" * @param filePath The path to the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" this.ItemList \u003d new DukeList(this.storage.load());","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" this.ItemList \u003d new DukeList();","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" * The main method that initializes and runs the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" * Runs the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" // Initializing Scanner","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" c.execute(ItemList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":" } finally {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Cleon2"},"content":" ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":67,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Cleon2":66,"-":3}},{"path":"src/main/java/duke/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" * Represents a command to add a task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" private String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" private LocalDateTime till;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" private String type;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" * Constructs a command to add a ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" public AddCommand(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" this.type \u003d \"todo\";","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" * Constructs a command to add a Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" public AddCommand(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" this.type \u003d \"deadline\";","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" this.till \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" * Constructs a command to add an Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" * @param from The starting time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" * @param to The ending time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" public AddCommand(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" this.type \u003d \"event\";","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":" this.till \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" * Executes the command to add a task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" * @param storage The storage manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Cleon2"},"content":" public void execute(DukeList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Cleon2"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Cleon2"},"content":" switch (this.type) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Cleon2"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Cleon2"},"content":" task \u003d new ToDo(this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Cleon2"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Cleon2"},"content":" task \u003d new Deadline(this.description, this.till);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Cleon2"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Cleon2"},"content":" task \u003d new Event(this.description, this.from, this.till);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Cleon2"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Cleon2"},"content":" ui.acknowledgeAdd(tasks.getSize(), task);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Cleon2"},"content":" storage.updateStorage(tasks.getArrayList());","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Cleon2"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Cleon2"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Cleon2"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Cleon2"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":89}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" * Represents an abstract command that can be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" * Executes the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" * @param storage The storage manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" * @throws DukeException If there is an error executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" public abstract void execute(DukeList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * @return True if the command is an exit command, otherwise false.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":29}},{"path":"src/main/java/duke/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" * Constructs a command to delete a task at the specified index.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" * Executes the command to delete a task from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" * @param storage The storage manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" * @throws DukeException If the specified index is out of bounds.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" public void execute(DukeList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" if (tasks.getSize() \u003c index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" throw new DukeException(\"The task you are trying to delete is out of bounds!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" ui.acknowledgeDelete(index, tasks.getTask(index - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" tasks.deleteTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" storage.updateStorage(tasks.getArrayList());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Cleon2":51}},{"path":"src/main/java/duke/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" * Executes the command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" * @param storage The storage manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" public void execute(DukeList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" ui.exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * @return True, as this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":33}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"public class FindCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" private String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" public void execute(DukeList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" ArrayList\u003cTask\u003e filteredTasks \u003d tasks.filterByKeyword(this.keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" ui.acknowledgeFind(filteredTasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" storage.updateStorage(tasks.getArrayList());","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Cleon2":28}},{"path":"src/main/java/duke/commands/IncorrectCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" * Represents a command to handle incorrect or invalid user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"public class IncorrectCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" private String ErrMessage;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" * Constructs a command to handle incorrect input.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" * @param ErrMessage The error message to be thrown.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" public IncorrectCommand(String ErrMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" this.ErrMessage \u003d ErrMessage;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" * Executes the command to handle incorrect input by throwing a DukeException.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" * @param storage The storage manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" * @throws DukeException Always thrown with the error message provided during construction.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" public void execute(DukeList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" throw new DukeException(this.ErrMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":45}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":" * Represents a command to list all tasks in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" * Executes the command to list all tasks in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" * @param storage The storage manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" public void execute(DukeList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" ui.showList(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":34}},{"path":"src/main/java/duke/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" * Represents a command to mark or unmark a task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" * Constructs a command to mark or unmark a task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" * @param index The index of the task to be marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" * @param type The type of action: \"mark\" or \"unmark\".","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" public MarkCommand(int index, String type) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" this.isDone \u003d type.equals(\"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * Executes the command to mark or unmark a task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" * @param storage The storage manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" * @throws DukeException If the specified index is out of bounds or the task is already marked/unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" public void execute(DukeList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" if (tasks.getSize() \u003c index || tasks.getTask(index - 1).isDone() \u003d\u003d isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" throw new DukeException(\"The task you are trying to mark is either out of bound, \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" \"or has already been marked/unmarked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" if (isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" tasks.setTaskAsDone(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" ui.acknowledgeMark(index, tasks.getTask(index - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" tasks.setTaskAsUndone(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" ui.acknowledgeUnmark(index, tasks.getTask(index - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" storage.updateStorage(tasks.getArrayList());","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":61}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":" * Represents a custom exception specific to the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" * Constructs a DukeException with the specified error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" * @param message The error message to be associated with the exception.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" * Overrides the getMessage() method to prepend \"OOPS! \" to the error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" * @return The formatted error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" return \"OOPS! \" + super.getMessage();","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Cleon2":26}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.commands.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" * Represents a parser to convert user input into executable commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"//Solution below inspired by Shishir Bychapur","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" * Parses the user input and converts it into an executable command.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" * @return A Command object based on the parsed input.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" public static Command parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" String[] split \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" Command c \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" switch (split[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" case \"bye\":","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" c \u003d validateExit(split);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" case \"list\":","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" c \u003d validateList(split);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" c \u003d validateMark(split);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" c \u003d validateTodo(split);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" c \u003d validateDeadline(split);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" c \u003d validateEvent(split);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" c \u003d validateDelete(split);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" c \u003d validateFind(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" c \u003d new IncorrectCommand(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" return c;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" * Validates and constructs a Todo command.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":" * @param split The user input split into parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":" * @return A TodoCommand object if input is valid, else an IncorrectCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Cleon2"},"content":" public static Command validateTodo(String[] split) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Cleon2"},"content":" if (split.length \u003d\u003d 1 || split[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a valid task.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Cleon2"},"content":" return new AddCommand(split[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Cleon2"},"content":" * Validates and constructs a Deadline command.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Cleon2"},"content":" * @param split The user input split into parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Cleon2"},"content":" * @return A DeadlineCommand object if input is valid, else an IncorrectCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Cleon2"},"content":" public static Command validateDeadline(String[] split) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Cleon2"},"content":" if (split.length \u003d\u003d 1 || split[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a valid task.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Cleon2"},"content":" if (!split[1].contains(\" /by \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please indicate a deadline using /by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Cleon2"},"content":" String[] task \u003d split[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Cleon2"},"content":" if (task.length \u003c\u003d 1 || task[1].isBlank() || task[0].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a valid task and/or deadline.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Cleon2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Cleon2"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy HHmm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Cleon2"},"content":" return new AddCommand(task[0], LocalDateTime.parse(task[1], formatter));","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Cleon2"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter the date \u0026 time in DD/MM/YY HHMM format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Cleon2"},"content":" * Validates and constructs an Event command.","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Cleon2"},"content":" * @param split The user input split into parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Cleon2"},"content":" * @return An EventCommand object if input is valid, else an IncorrectCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Cleon2"},"content":" public static Command validateEvent(String[] split) {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Cleon2"},"content":" if (!split[1].contains(\" /from \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please indicate a start datetime using /from.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Cleon2"},"content":" String[] task \u003d split[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"Cleon2"},"content":" if (task.length \u003c\u003d 1 || task[1].isBlank() || task[0].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a valid task.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"Cleon2"},"content":" if (!task[1].contains(\" /to \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please indicate an end datetime using /to.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Cleon2"},"content":" String[] to \u003d task[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Cleon2"},"content":" if (to.length \u003c\u003d 1 || to[1].isBlank() || to[0].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter valid to \u0026 from dates\");","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"Cleon2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"Cleon2"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy HHmm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"Cleon2"},"content":" LocalDateTime from \u003d LocalDateTime.parse(to[0], formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"Cleon2"},"content":" LocalDateTime till \u003d LocalDateTime.parse(to[1], formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"Cleon2"},"content":" if (from.isAfter(till) || from.isEqual(till)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please ensure that the start date is not equal to\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"Cleon2"},"content":" \" or later than the end date\");","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"Cleon2"},"content":" return new AddCommand(task[0], from, till);","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"Cleon2"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter the date \u0026 time in DD/MM/YY HHMM format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"Cleon2"},"content":" * Validates and constructs an Exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"Cleon2"},"content":" * @param split The user input split into parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"Cleon2"},"content":" * @return An ExitCommand object if input is valid, else an IncorrectCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"Cleon2"},"content":" private static Command validateFind(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"Cleon2"},"content":" if (split.length \u003d\u003d 1 || split[1].isBlank()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a valid find command.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"Cleon2"},"content":" return new FindCommand(split[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"Cleon2"},"content":" private static Command validateExit(String[] split) {","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"Cleon2"},"content":" if (split.length !\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"The bye command should not have \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"Cleon2"},"content":" \"any additional words appended to it\");","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"Cleon2"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"Cleon2"},"content":" * Validates and constructs a List command.","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"Cleon2"},"content":" * @param split The user input split into parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"Cleon2"},"content":" * @return A ListCommand object if input is valid, else an IncorrectCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"Cleon2"},"content":" public static Command validateList(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"Cleon2"},"content":" if (split.length !\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"The list command should not have any \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"Cleon2"},"content":" \"additional words appended to it\");","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"Cleon2"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"Cleon2"},"content":" * Validates and constructs a Mark command.","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"Cleon2"},"content":" * @param split The user input split into parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"Cleon2"},"content":" * @return A MarkCommand object if input is valid, else an IncorrectCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"Cleon2"},"content":" public static Command validateMark(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"Cleon2"},"content":" if (split.length !\u003d 2 || split[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a valid mark command!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"Cleon2"},"content":" if (!Character.isDigit(split[1].charAt(0))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"The second argument must be a digit!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"Cleon2"},"content":" int index \u003d Integer.parseInt(split[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"Cleon2"},"content":" if (index \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a number greater than 0!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"Cleon2"},"content":" return new MarkCommand(index, split[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"Cleon2"},"content":" * Validates and constructs a Delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"Cleon2"},"content":" * @param split The user input split into parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"Cleon2"},"content":" * @return A DeleteCommand object if input is valid, else an IncorrectCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"Cleon2"},"content":" public static Command validateDelete(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"Cleon2"},"content":" if (split.length !\u003d 2 || split[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a valid delete command!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"Cleon2"},"content":" if (!Character.isDigit(split[1].charAt(0))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"The second argument must be a digit!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"Cleon2"},"content":" int index \u003d Integer.parseInt(split[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"Cleon2"},"content":" if (index \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a number greater than 0!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"Cleon2"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":212}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" * Represents the storage manager for saving and loading tasks to/from a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" private File file;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" * Constructs a Storage instance and initializes the file based on the given path.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * @param path The path to the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" public Storage(String path) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" String[] splitted \u003d path.split(\"/\");","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" File directory \u003d new File(splitted[0]);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" directory.mkdir();","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" File savedData \u003d new File(path);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" if (!savedData.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" savedData.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" this.file \u003d savedData;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" } catch (IOException err) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" System.out.println(err);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" * Loads tasks from the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":" * @return An ArrayList of Task objects loaded from the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" * @throws DukeException If an error occurs during reading or parsing the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" Scanner sc \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" ArrayList\u003cTask\u003e savedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" String current \u003d sc.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":" String[] splitted \u003d current.split(\" \\\\| \", 4);","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":" switch (splitted[0]) {","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Cleon2"},"content":" case \"T\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Cleon2"},"content":" Task toDo \u003d new ToDo(splitted[2], splitted[1].equals(\"1\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Cleon2"},"content":" savedTasks.add(toDo);","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Cleon2"},"content":" case \"D\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Cleon2"},"content":" Task deadline \u003d new Deadline(splitted[2], formatInputDate(splitted[3]), splitted[1].equals(\"1\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Cleon2"},"content":" savedTasks.add(deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Cleon2"},"content":" case \"E\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Cleon2"},"content":" String[] timeline \u003d splitted[3].split(\"--\");","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Cleon2"},"content":" LocalDateTime from \u003d formatInputDate(timeline[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Cleon2"},"content":" LocalDateTime to \u003d formatInputDate(timeline[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Cleon2"},"content":" Task event \u003d new Event(splitted[2], from, to, splitted[1].equals(\"1\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Cleon2"},"content":" savedTasks.add(event);","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Cleon2"},"content":" default: {","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Cleon2"},"content":" throw new DukeException(\"Error reading data from storage.\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Cleon2"},"content":" + \"Creating a task list from scratch.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"Cleon2"},"content":" return savedTasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"Cleon2"},"content":" } catch (FileNotFoundException err) {","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"Cleon2"},"content":" System.out.println(err);","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"Cleon2"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Cleon2"},"content":" * Updates the storage file with the given list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks to be saved.","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Cleon2"},"content":" public void updateStorage(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"Cleon2"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"Cleon2"},"content":" FileWriter writer \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"Cleon2"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"Cleon2"},"content":" writer.write(task.toFile() + System.lineSeparator());","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"Cleon2"},"content":" writer.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"Cleon2"},"content":" } catch (IOException err) {","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"Cleon2"},"content":" System.out.println(err);","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Cleon2"},"content":" * Formats an input date string into a LocalDateTime object.","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Cleon2"},"content":" * @param date The input date string.","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Cleon2"},"content":" * @return A LocalDateTime object representing the formatted date.","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Cleon2"},"content":" public LocalDateTime formatInputDate(String date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Cleon2"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ISO_LOCAL_DATE_TIME;","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Cleon2"},"content":" LocalDateTime localDateTime \u003d LocalDateTime.parse(date, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Cleon2"},"content":" return localDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Cleon2":121}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":" * Represents a task with a specific deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" * Constructs a Deadline task with the given description and deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" * Constructs a Deadline task with the given description, deadline, and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" public Deadline(String description, LocalDateTime by, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" * Converts the Deadline task to its string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" * @return The string representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" return \"[D]\" + super.toString() + \" (by: \" + super.localDateTimeToString(by) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" * Converts the Deadline task to its file format representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" * @return The file format representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" public String toFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" return \"D\" + super.toFile() + this.by;","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Cleon2":52}},{"path":"src/main/java/duke/tasks/DukeList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import java.lang.reflect.Array;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" * Represents a tasklist","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"public class DukeList {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" private ArrayList\u003cTask\u003e dukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" public DukeList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" dukeList \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" public DukeList(ArrayList\u003cTask\u003e ItemList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" dukeList \u003d ItemList;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" * This method simply prints out an acknowledgemnt that a task has been added","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * @param newTask takes in a new task","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" public void add(Task newTask) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" this.dukeList.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" * This method deletes a task from the tasklist","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" * @param taskNum index of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" public void deleteTask(int taskNum) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" dukeList.remove(taskNum - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" public ArrayList\u003cTask\u003e filterByKeyword(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" ArrayList\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" for (Task task : dukeList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" String description \u003d task.getDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" if (description.contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" filteredTasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" return filteredTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" * Sets task as done","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" * @param taskNum index of task","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" public void setTaskAsDone(int taskNum) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" Task chosenTask \u003d dukeList.get(taskNum - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" chosenTask.setAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Cleon2"},"content":" * Sets task as undone","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Cleon2"},"content":" * @param taskNum index of task","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Cleon2"},"content":" public void setTaskAsUndone(int taskNum) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Cleon2"},"content":" Task chosenTask \u003d dukeList.get(taskNum - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Cleon2"},"content":" chosenTask.setAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Cleon2"},"content":" * returns size of list","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Cleon2"},"content":" * @return size of list","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Cleon2"},"content":" public int getSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Cleon2"},"content":" return dukeList.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Cleon2"},"content":" public ArrayList\u003cTask\u003e getArrayList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Cleon2"},"content":" return this.dukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Cleon2"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Cleon2"},"content":" return dukeList.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":85}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":" * Represents a task that starts and ends at specific date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" * Constructs an Event task with the given description, start time, and end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * Constructs an Event task with the given description, start time, end time, and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" * Converts the Event task to its string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" * @return The string representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" return \"[E]\" + super.toString() + \" (from: \" + super.localDateTimeToString(from) + \" to: \" +","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" super.localDateTimeToString(to) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" * Converts the Event task to its file format representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" * @return The file format representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" public String toFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" return \"E\" + super.toFile() + this.from + \"--\" + this.to;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Cleon2":59}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":" * Represents a single task with a description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" private String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" * Constructs a Task instance with the given description and sets completion status to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" * Constructs a Task instance with the given description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" * @return The status icon (\"X\" if done, \" \" if not done).","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" * Converts the task to its string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" * Converts the task to its file format representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" * @return The file format representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" public String toFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" return \" | \" + (this.isDone ? 1 : 0) + \" | \" + this.description + \" | \";","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Cleon2"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Cleon2"},"content":" public void setAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"Cleon2"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Cleon2"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Cleon2"},"content":" public void setAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"Cleon2"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Cleon2"},"content":" * Converts a LocalDateTime object to a formatted string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Cleon2"},"content":" * @param dateTime The LocalDateTime object to be converted.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Cleon2"},"content":" * @return The formatted string representation of the date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Cleon2"},"content":" public String localDateTimeToString(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Cleon2"},"content":" String dayOfMonth \u003d dateTime.getDayOfMonth() + getDayOfMonthSuffix(dateTime.getDayOfMonth());","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Cleon2"},"content":" String month \u003d dateTime.getMonth().toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Cleon2"},"content":" month \u003d month.substring(0, 1).toUpperCase() + month.substring(1).toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Cleon2"},"content":" String year \u003d String.valueOf(dateTime.getYear());","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Cleon2"},"content":" String hour \u003d dateTime.format(DateTimeFormatter.ofPattern(\"h\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Cleon2"},"content":" String minute \u003d dateTime.format(DateTimeFormatter.ofPattern(\"mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Cleon2"},"content":" String amPm \u003d dateTime.format(DateTimeFormatter.ofPattern(\"a\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Cleon2"},"content":" return String.format(\"%s of %s %s, %s:%s%s\", dayOfMonth, month, year, hour, minute, amPm);","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Cleon2"},"content":" * Returns the suffix for the day of the month.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Cleon2"},"content":" * @param n The day of the month.","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Cleon2"},"content":" * @return The suffix (\"st\", \"nd\", \"rd\", or \"th\").","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Cleon2"},"content":" public String getDayOfMonthSuffix(final int n) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Cleon2"},"content":" if (n \u003e\u003d 11 \u0026\u0026 n \u003c\u003d 13) {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Cleon2"},"content":" return \"th\";","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Cleon2"},"content":" switch (n % 10) {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Cleon2"},"content":" case 1:","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Cleon2"},"content":" return \"st\";","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Cleon2"},"content":" case 2:","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Cleon2"},"content":" return \"nd\";","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Cleon2"},"content":" case 3:","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Cleon2"},"content":" return \"rd\";","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Cleon2"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Cleon2"},"content":" return \"th\";","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Cleon2"},"content":" * Checks if the task is marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Cleon2"},"content":" * @return True if the task is done, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Cleon2"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"Cleon2"},"content":" return isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"Cleon2"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Cleon2"},"content":" return description;","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Cleon2":127}},{"path":"src/main/java/duke/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":" * Represents a to-do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" * Constructs a ToDo instance with the given description and sets completion status to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" * Constructs a ToDo instance with the given description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" * @param isDone The completion status of the to-do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" * Converts the to-do task to its string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" * @return The string representation of the to-do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" * Converts the to-do task to its file format representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" * @return The file format representation of the to-do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" public String toFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" return \"T\" + super.toFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Cleon2":45}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" private Scanner input;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" this.input \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" return this.input.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" public void showLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"_______________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" * This method prints out the initial greeting","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" //Introduction","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" \" Hello! I\u0027m Cleon\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" \" What can I do for you?\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" public void showList(DukeList tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" int len \u003d tasks.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" for (int i \u003d 0; i \u003c len; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" int num \u003d i + 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" Task currTask \u003d tasks.getTask(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" System.out.println(num + \". \" + currTask.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"Issues loading past data. Creating a new tasklist from scratch\");","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" public void showError(String errMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" System.out.println(errMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" public void acknowledgeAdd(int size, Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"Added the following task to the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" System.out.println(size + \". \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"You currently have \" + size + \" tasks in your list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":" public void acknowledgeDelete(int index, Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Cleon2"},"content":" System.out.println(index + \". \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Cleon2"},"content":" public void acknowledgeFind(ArrayList\u003cTask\u003e filteredTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Cleon2"},"content":" if (filteredTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"No tasks with the given keyword can be found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Cleon2"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Cleon2"},"content":" int len \u003d filteredTasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Cleon2"},"content":" for (int i \u003d 0; i \u003c len; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Cleon2"},"content":" int num \u003d i + 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Cleon2"},"content":" Task currTask \u003d filteredTasks.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Cleon2"},"content":" System.out.println(num + \". \" + currTask.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Cleon2"},"content":" public void acknowledgeMark(int index, Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Cleon2"},"content":" public void acknowledgeUnmark(int index, Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Cleon2"},"content":" public void exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":103}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.commands.IncorrectCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.commands.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" void list_wrongInput_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" Command com \u003d Parser.parse(\"list \");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" assertTrue(com instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" void list_correctInput_listCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" Command com \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" assertTrue(com instanceof ListCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":27}},{"path":"src/test/java/duke/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" void file_absentFile_createsNewFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" String path \u003d \"data/test.txt\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" assertFalse(file.exists());","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" assertTrue(file.exists());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" void file_absentFolder_createNewFolder() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" String path \u003d \"testdata/test.txt\";","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" File folder \u003d new File(\"testdata\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" assertFalse(folder.isDirectory());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" assertTrue(folder.exists());","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":30}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Cleon2":2}},{"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":"Cleon2"},"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":{"Cleon2":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"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":"Cleon2"},"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":{"Cleon2":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":"Cleon2"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Cleon2":6,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"T | 0 | chicken rice | ","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"D | 0 | nasi lemak | 2023-09-22T09:00","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"E | 0 | rotisserie chicken | 2021-03-22T09:00--2023-04-23T12:00","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Cleon2":3}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" * Represents the main application class for Duke.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" private DukeList itemList;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" private Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" * Constructs a Duke instance with the given file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" * @param filePath The path to the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" this.itemList \u003d new DukeList(this.storage.load());","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" this.itemList \u003d new DukeList();","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" * The main method that initializes and runs the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" * Runs the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" // Initializing Scanner","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" c.execute(itemList, ui, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":" } finally {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Cleon2"},"content":" ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":67,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Cleon2":66,"-":3}},{"path":"src/main/java/duke/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" * Represents a command to add a task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" private String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" private LocalDateTime till;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" private String type;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * Constructs a command to add a ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" public AddCommand(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" this.type \u003d \"todo\";","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" * Constructs a command to add a Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" public AddCommand(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" this.type \u003d \"deadline\";","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" this.till \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" * Constructs a command to add an Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":" * @param from The starting time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" * @param to The ending time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" public AddCommand(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" this.type \u003d \"event\";","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" this.till \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Cleon2"},"content":" * Executes the command to add a task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Cleon2"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Cleon2"},"content":" * @param storage The storage manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Cleon2"},"content":" public void execute(DukeList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"Cleon2"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Cleon2"},"content":" switch (this.type) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Cleon2"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Cleon2"},"content":" task \u003d new ToDo(this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Cleon2"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Cleon2"},"content":" task \u003d new Deadline(this.description, this.till);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Cleon2"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Cleon2"},"content":" task \u003d new Event(this.description, this.from, this.till);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Cleon2"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"Cleon2"},"content":" throw new DukeException(\"Invalid task type!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Cleon2"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Cleon2"},"content":" ui.acknowledgeAdd(tasks.getSize(), task);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Cleon2"},"content":" storage.updateStorage(tasks.getArrayList());","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Cleon2"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Cleon2"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Cleon2"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Cleon2"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":98}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" * Represents an abstract command that can be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" * Executes the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" * @param storage The storage manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" * @throws DukeException If there is an error executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" public abstract void execute(DukeList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * @return True if the command is an exit command, otherwise false.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":29}},{"path":"src/main/java/duke/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" * Constructs a command to delete a task at the specified index.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" * Executes the command to delete a task from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" * @param storage The storage manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" * @throws DukeException If the specified index is out of bounds.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" public void execute(DukeList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" if (tasks.getSize() \u003c index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" throw new DukeException(\"The task you are trying to delete is out of bounds!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" ui.acknowledgeDelete(index, tasks.getTask(index - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" tasks.deleteTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" storage.updateStorage(tasks.getArrayList());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Cleon2":51}},{"path":"src/main/java/duke/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" * Executes the command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" * @param storage The storage manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" public void execute(DukeList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" ui.exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * @return True, as this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":33}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" * Represents a command to find a task","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" private String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" * Executes the command to find a task","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * @param storage The storage manager.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" public void execute(DukeList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" ArrayList\u003cTask\u003e filteredTasks \u003d tasks.filterByKeyword(this.keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" ui.acknowledgeFind(filteredTasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" storage.updateStorage(tasks.getArrayList());","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Cleon2":39}},{"path":"src/main/java/duke/commands/IncorrectCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" * Represents a command to handle incorrect or invalid user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"public class IncorrectCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" private String errMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" * Constructs a command to handle incorrect input.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" * @param errMessage The error message to be thrown.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" public IncorrectCommand(String errMessage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" this.errMessage \u003d errMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" * Executes the command to handle incorrect input by throwing a DukeException.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" * @param storage The storage manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" * @throws DukeException Always thrown with the error message provided during construction.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" public void execute(DukeList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" throw new DukeException(this.errMessage);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":45}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":" * Represents a command to list all tasks in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" * Executes the command to list all tasks in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" * @param storage The storage manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" public void execute(DukeList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" ui.showList(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":34}},{"path":"src/main/java/duke/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" * Represents a command to mark or unmark a task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" * Constructs a command to mark or unmark a task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" * @param index The index of the task to be marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" * @param type The type of action: \"mark\" or \"unmark\".","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" public MarkCommand(int index, String type) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" this.isDone \u003d type.equals(\"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * Executes the command to mark or unmark a task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" * @param storage The storage manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" * @throws DukeException If the specified index is out of bounds or the task is already marked/unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" public void execute(DukeList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" if (tasks.getSize() \u003c index || tasks.getTask(index - 1).isDone() \u003d\u003d isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" throw new DukeException(\"The task you are trying to mark is either out of bound, \"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" + \"or has already been marked/unmarked\");","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" if (isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" tasks.setTaskAsDone(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" ui.acknowledgeMark(index, tasks.getTask(index - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" tasks.setTaskAsUndone(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" ui.acknowledgeUnmark(index, tasks.getTask(index - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" storage.updateStorage(tasks.getArrayList());","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":61}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":" * Represents a custom exception specific to the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" * Constructs a DukeException with the specified error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" * @param message The error message to be associated with the exception.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" * Overrides the getMessage() method to prepend \"OOPS! \" to the error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" * @return The formatted error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" return \"OOPS! \" + super.getMessage();","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Cleon2":26}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import duke.commands.AddCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"import duke.commands.DeleteCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"import duke.commands.ExitCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"import duke.commands.FindCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"import duke.commands.IncorrectCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":"import duke.commands.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":"import duke.commands.MarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" * Represents a parser to convert user input into executable commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":"//Solution below inspired by Shishir Bychapur","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * Parses the user input and converts it into an executable command.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" * @return A Command object based on the parsed input.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" public static Command parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" String[] split \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" Command c \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" switch (split[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" case \"bye\":","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" c \u003d validateExit(split);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" case \"list\":","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" c \u003d validateList(split);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" c \u003d validateMark(split);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" c \u003d validateTodo(split);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" c \u003d validateDeadline(split);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" c \u003d validateEvent(split);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" c \u003d validateDelete(split);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" c \u003d validateFind(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Cleon2"},"content":" c \u003d new IncorrectCommand(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Cleon2"},"content":" return c;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Cleon2"},"content":" * Validates and constructs a Todo command.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Cleon2"},"content":" * @param split The user input split into parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Cleon2"},"content":" * @return A TodoCommand object if input is valid, else an IncorrectCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Cleon2"},"content":" public static Command validateTodo(String[] split) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Cleon2"},"content":" if (split.length \u003d\u003d 1 || split[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a valid task.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Cleon2"},"content":" return new AddCommand(split[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Cleon2"},"content":" * Validates and constructs a Deadline command.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Cleon2"},"content":" * @param split The user input split into parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Cleon2"},"content":" * @return A DeadlineCommand object if input is valid, else an IncorrectCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Cleon2"},"content":" public static Command validateDeadline(String[] split) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Cleon2"},"content":" if (split.length \u003d\u003d 1 || split[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a valid task.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Cleon2"},"content":" if (!split[1].contains(\" /by \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please indicate a deadline using /by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Cleon2"},"content":" String[] task \u003d split[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Cleon2"},"content":" if (task.length \u003c\u003d 1 || task[1].isBlank() || task[0].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a valid task and/or deadline.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Cleon2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Cleon2"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy HHmm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Cleon2"},"content":" return new AddCommand(task[0], LocalDateTime.parse(task[1], formatter));","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Cleon2"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter the date \u0026 time in DD/MM/YY HHMM format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Cleon2"},"content":" * Validates and constructs an Event command.","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Cleon2"},"content":" * @param split The user input split into parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Cleon2"},"content":" * @return An EventCommand object if input is valid, else an IncorrectCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Cleon2"},"content":" public static Command validateEvent(String[] split) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"Cleon2"},"content":" if (!split[1].contains(\" /from \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please indicate a start datetime using /from.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Cleon2"},"content":" String[] task \u003d split[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Cleon2"},"content":" if (task.length \u003c\u003d 1 || task[1].isBlank() || task[0].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a valid task.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"Cleon2"},"content":" if (!task[1].contains(\" /to \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please indicate an end datetime using /to.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"Cleon2"},"content":" String[] to \u003d task[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"Cleon2"},"content":" if (to.length \u003c\u003d 1 || to[1].isBlank() || to[0].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter valid to \u0026 from dates\");","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"Cleon2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"Cleon2"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy HHmm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Cleon2"},"content":" LocalDateTime from \u003d LocalDateTime.parse(to[0], formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Cleon2"},"content":" LocalDateTime till \u003d LocalDateTime.parse(to[1], formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Cleon2"},"content":" if (from.isAfter(till) || from.isEqual(till)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please ensure that the start date is not equal to\"","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"Cleon2"},"content":" + \" or later than the end date\");","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"Cleon2"},"content":" return new AddCommand(task[0], from, till);","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"Cleon2"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter the date \u0026 time in DD/MM/YY HHMM format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"Cleon2"},"content":" * Validates and constructs an Exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"Cleon2"},"content":" * @param split The user input split into parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"Cleon2"},"content":" * @return An ExitCommand object if input is valid, else an IncorrectCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"Cleon2"},"content":" private static Command validateFind(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"Cleon2"},"content":" if (split.length \u003d\u003d 1 || split[1].isBlank()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a valid find command.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"Cleon2"},"content":" return new FindCommand(split[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"Cleon2"},"content":" private static Command validateExit(String[] split) {","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"Cleon2"},"content":" if (split.length !\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"The bye command should not have \"","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"Cleon2"},"content":" + \"any additional words appended to it\");","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"Cleon2"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"Cleon2"},"content":" * Validates and constructs a List command.","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"Cleon2"},"content":" * @param split The user input split into parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"Cleon2"},"content":" * @return A ListCommand object if input is valid, else an IncorrectCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"Cleon2"},"content":" public static Command validateList(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"Cleon2"},"content":" if (split.length !\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"The list command should not have any \"","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"Cleon2"},"content":" + \"additional words appended to it\");","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"Cleon2"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"Cleon2"},"content":" * Validates and constructs a Mark command.","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"Cleon2"},"content":" * @param split The user input split into parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"Cleon2"},"content":" * @return A MarkCommand object if input is valid, else an IncorrectCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"Cleon2"},"content":" public static Command validateMark(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"Cleon2"},"content":" if (split.length !\u003d 2 || split[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a valid mark command!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"Cleon2"},"content":" if (!Character.isDigit(split[1].charAt(0))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"The second argument must be a digit!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"Cleon2"},"content":" int index \u003d Integer.parseInt(split[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"Cleon2"},"content":" if (index \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a number greater than 0!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"Cleon2"},"content":" return new MarkCommand(index, split[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"Cleon2"},"content":" * Validates and constructs a Delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"Cleon2"},"content":" * @param split The user input split into parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"Cleon2"},"content":" * @return A DeleteCommand object if input is valid, else an IncorrectCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"Cleon2"},"content":" public static Command validateDelete(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"Cleon2"},"content":" if (split.length !\u003d 2 || split[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a valid delete command!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"Cleon2"},"content":" if (!Character.isDigit(split[1].charAt(0))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"The second argument must be a digit!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"Cleon2"},"content":" int index \u003d Integer.parseInt(split[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"Cleon2"},"content":" if (index \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"Cleon2"},"content":" return new IncorrectCommand(\"Please enter a number greater than 0!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"Cleon2"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":222}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" * Represents the storage manager for saving and loading tasks to/from a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" private File file;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" * Constructs a Storage instance and initializes the file based on the given path.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * @param path The path to the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" public Storage(String path) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" String[] splitted \u003d path.split(\"/\");","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" File directory \u003d new File(splitted[0]);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" directory.mkdir();","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" File savedData \u003d new File(path);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" if (!savedData.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" savedData.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" this.file \u003d savedData;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" } catch (IOException err) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" System.out.println(err);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" * Loads tasks from the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":" * @return An ArrayList of Task objects loaded from the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" * @throws DukeException If an error occurs during reading or parsing the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" Scanner sc \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" ArrayList\u003cTask\u003e savedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" String current \u003d sc.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":" String[] splitted \u003d current.split(\" \\\\| \", 4);","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":" switch (splitted[0]) {","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Cleon2"},"content":" case \"T\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Cleon2"},"content":" Task toDo \u003d new ToDo(splitted[2], splitted[1].equals(\"1\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Cleon2"},"content":" savedTasks.add(toDo);","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Cleon2"},"content":" case \"D\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Cleon2"},"content":" Task deadline \u003d new Deadline(splitted[2], formatInputDate(splitted[3]), splitted[1].equals(\"1\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Cleon2"},"content":" savedTasks.add(deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Cleon2"},"content":" case \"E\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Cleon2"},"content":" String[] timeline \u003d splitted[3].split(\"--\");","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Cleon2"},"content":" LocalDateTime from \u003d formatInputDate(timeline[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Cleon2"},"content":" LocalDateTime to \u003d formatInputDate(timeline[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Cleon2"},"content":" Task event \u003d new Event(splitted[2], from, to, splitted[1].equals(\"1\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Cleon2"},"content":" savedTasks.add(event);","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Cleon2"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Cleon2"},"content":" default: {","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Cleon2"},"content":" throw new DukeException(\"Error reading data from storage.\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Cleon2"},"content":" + \"Creating a task list from scratch.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"Cleon2"},"content":" return savedTasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"Cleon2"},"content":" } catch (FileNotFoundException err) {","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"Cleon2"},"content":" System.out.println(err);","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"Cleon2"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Cleon2"},"content":" * Updates the storage file with the given list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks to be saved.","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Cleon2"},"content":" public void updateStorage(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"Cleon2"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"Cleon2"},"content":" FileWriter writer \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"Cleon2"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"Cleon2"},"content":" writer.write(task.toFile() + System.lineSeparator());","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"Cleon2"},"content":" writer.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"Cleon2"},"content":" } catch (IOException err) {","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"Cleon2"},"content":" System.out.println(err);","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Cleon2"},"content":" * Formats an input date string into a LocalDateTime object.","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Cleon2"},"content":" * @param date The input date string.","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Cleon2"},"content":" * @return A LocalDateTime object representing the formatted date.","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Cleon2"},"content":" public LocalDateTime formatInputDate(String date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Cleon2"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ISO_LOCAL_DATE_TIME;","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Cleon2"},"content":" LocalDateTime localDateTime \u003d LocalDateTime.parse(date, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Cleon2"},"content":" return localDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Cleon2":121}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":" * Represents a task with a specific deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" * Constructs a Deadline task with the given description and deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" * Constructs a Deadline task with the given description, deadline, and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" public Deadline(String description, LocalDateTime by, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" * Converts the Deadline task to its string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" * @return The string representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" return \"[D]\" + super.toString() + \" (by: \" + super.localDateTimeToString(by) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" * Converts the Deadline task to its file format representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" * @return The file format representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" public String toFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" return \"D\" + super.toFile() + this.by;","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Cleon2":52}},{"path":"src/main/java/duke/tasks/DukeList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":" * Represents a tasklist","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"public class DukeList {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" private ArrayList\u003cTask\u003e dukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" public DukeList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" dukeList \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" public DukeList(ArrayList\u003cTask\u003e itemList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" dukeList \u003d itemList;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" * This method simply prints out an acknowledgemnt that a task has been added","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" * @param newTask takes in a new task","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" public void add(Task newTask) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" this.dukeList.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" * This method deletes a task from the tasklist","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" * @param taskNum index of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" public void deleteTask(int taskNum) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" dukeList.remove(taskNum - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" * Returns a filtered arraylist based on the keyword","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" * @param keyword keyword associated with the task","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" * @return","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" public ArrayList\u003cTask\u003e filterByKeyword(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" ArrayList\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" for (Task task : dukeList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" String description \u003d task.getDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" if (description.contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" filteredTasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":" return filteredTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" * Sets task as done","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" * @param taskNum index of task","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" public void setTaskAsDone(int taskNum) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" Task chosenTask \u003d dukeList.get(taskNum - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":" chosenTask.setAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Cleon2"},"content":" * Sets task as undone","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Cleon2"},"content":" * @param taskNum index of task","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Cleon2"},"content":" public void setTaskAsUndone(int taskNum) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Cleon2"},"content":" Task chosenTask \u003d dukeList.get(taskNum - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Cleon2"},"content":" chosenTask.setAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Cleon2"},"content":" * returns size of list","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Cleon2"},"content":" * @return size of list","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Cleon2"},"content":" public int getSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Cleon2"},"content":" return dukeList.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Cleon2"},"content":" public ArrayList\u003cTask\u003e getArrayList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Cleon2"},"content":" return this.dukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Cleon2"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Cleon2"},"content":" return dukeList.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":87}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":" * Represents a task that starts and ends at specific date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" * Constructs an Event task with the given description, start time, and end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * Constructs an Event task with the given description, start time, end time, and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" * Converts the Event task to its string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" * @return The string representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" return \"[E]\" + super.toString() + \" (from: \" + super.localDateTimeToString(from) + \" to: \"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" + super.localDateTimeToString(to) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" * Converts the Event task to its file format representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" * @return The file format representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" public String toFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" return \"E\" + super.toFile() + this.from + \"--\" + this.to;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Cleon2":59}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":" * Represents a single task with a description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" private String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" * Constructs a Task instance with the given description and sets completion status to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" * Constructs a Task instance with the given description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" * @return The status icon (\"X\" if done, \" \" if not done).","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" * Converts the task to its string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" * Converts the task to its file format representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" * @return The file format representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" public String toFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" return \" | \" + (this.isDone ? 1 : 0) + \" | \" + this.description + \" | \";","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Cleon2"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Cleon2"},"content":" public void setAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"Cleon2"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Cleon2"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Cleon2"},"content":" public void setAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"Cleon2"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Cleon2"},"content":" * Converts a LocalDateTime object to a formatted string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Cleon2"},"content":" * @param dateTime The LocalDateTime object to be converted.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Cleon2"},"content":" * @return The formatted string representation of the date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Cleon2"},"content":" public String localDateTimeToString(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Cleon2"},"content":" String dayOfMonth \u003d dateTime.getDayOfMonth() + getDayOfMonthSuffix(dateTime.getDayOfMonth());","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Cleon2"},"content":" String month \u003d dateTime.getMonth().toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Cleon2"},"content":" month \u003d month.substring(0, 1).toUpperCase() + month.substring(1).toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Cleon2"},"content":" String year \u003d String.valueOf(dateTime.getYear());","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Cleon2"},"content":" String hour \u003d dateTime.format(DateTimeFormatter.ofPattern(\"h\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Cleon2"},"content":" String minute \u003d dateTime.format(DateTimeFormatter.ofPattern(\"mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Cleon2"},"content":" String amPm \u003d dateTime.format(DateTimeFormatter.ofPattern(\"a\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Cleon2"},"content":" return String.format(\"%s of %s %s, %s:%s%s\", dayOfMonth, month, year, hour, minute, amPm);","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Cleon2"},"content":" * Returns the suffix for the day of the month.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Cleon2"},"content":" * @param n The day of the month.","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Cleon2"},"content":" * @return The suffix (\"st\", \"nd\", \"rd\", or \"th\").","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Cleon2"},"content":" public String getDayOfMonthSuffix(final int n) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Cleon2"},"content":" if (n \u003e\u003d 11 \u0026\u0026 n \u003c\u003d 13) {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Cleon2"},"content":" return \"th\";","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Cleon2"},"content":" switch (n % 10) {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Cleon2"},"content":" case 1:","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Cleon2"},"content":" return \"st\";","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Cleon2"},"content":" case 2:","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Cleon2"},"content":" return \"nd\";","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Cleon2"},"content":" case 3:","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Cleon2"},"content":" return \"rd\";","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Cleon2"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Cleon2"},"content":" return \"th\";","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Cleon2"},"content":" * Checks if the task is marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Cleon2"},"content":" * @return True if the task is done, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Cleon2"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"Cleon2"},"content":" return isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"Cleon2"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Cleon2"},"content":" return description;","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Cleon2":127}},{"path":"src/main/java/duke/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":" * Represents a to-do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":" * Constructs a ToDo instance with the given description and sets completion status to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" * Constructs a ToDo instance with the given description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" * @param isDone The completion status of the to-do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" * Converts the to-do task to its string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":" * @return The string representation of the to-do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" * Converts the to-do task to its file format representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" * @return The file format representation of the to-do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" public String toFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" return \"T\" + super.toFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Cleon2":45}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":" * The Ui class handles interactions with the user, including displaying messages and receiving input.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" private Scanner input;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" * Initializes a new Ui object with a Scanner for user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" this.input \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" * Reads a command input from the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" * @return The user\u0027s input command as a String.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" return this.input.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Cleon2"},"content":" * Displays a line separator for a cleaner output.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Cleon2"},"content":" public void showLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"_______________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Cleon2"},"content":" * Displays the initial greeting message when the application starts.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Cleon2"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Cleon2"},"content":" // Introduction","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Cleon2"},"content":" + \" Hello! I\u0027m Cleon\\n\" + \" What can I do for you?\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Cleon2"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Cleon2"},"content":" * @param tasks The list of tasks to be displayed.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Cleon2"},"content":" public void showList(DukeList tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Cleon2"},"content":" int len \u003d tasks.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Cleon2"},"content":" for (int i \u003d 0; i \u003c len; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Cleon2"},"content":" int num \u003d i + 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Cleon2"},"content":" Task currTask \u003d tasks.getTask(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Cleon2"},"content":" System.out.println(num + \". \" + currTask.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Cleon2"},"content":" * Displays an error message when there is an issue loading past data.","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Cleon2"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"Issues loading past data. Creating a new tasklist from scratch\");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"Cleon2"},"content":" * Displays an error message with a custom error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"Cleon2"},"content":" * @param errMessage The error message to be displayed.","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"Cleon2"},"content":" public void showError(String errMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Cleon2"},"content":" System.out.println(errMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"Cleon2"},"content":" * Acknowledges the addition of a task to the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"Cleon2"},"content":" * @param size The current size of the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"Cleon2"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"Cleon2"},"content":" public void acknowledgeAdd(int size, Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"Added the following task to the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Cleon2"},"content":" System.out.println(size + \". \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"You currently have \" + size + \" tasks in your list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"Cleon2"},"content":" * Acknowledges the deletion of a task from the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"Cleon2"},"content":" * @param index The index of the task that was deleted.","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"Cleon2"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"Cleon2"},"content":" public void acknowledgeDelete(int index, Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Cleon2"},"content":" System.out.println(index + \". \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"Cleon2"},"content":" * Acknowledges the result of a keyword-based task search.","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"Cleon2"},"content":" * @param filteredTasks The list of tasks matching the search criteria.","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"Cleon2"},"content":" public void acknowledgeFind(ArrayList\u003cTask\u003e filteredTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Cleon2"},"content":" if (filteredTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"No tasks with the given keyword can be found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Cleon2"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Cleon2"},"content":" int len \u003d filteredTasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Cleon2"},"content":" for (int i \u003d 0; i \u003c len; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Cleon2"},"content":" int num \u003d i + 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Cleon2"},"content":" Task currTask \u003d filteredTasks.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"Cleon2"},"content":" System.out.println(num + \". \" + currTask.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"Cleon2"},"content":" * Acknowledges the marking of a task as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"Cleon2"},"content":" * @param index The index of the task that was marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"Cleon2"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"Cleon2"},"content":" public void acknowledgeMark(int index, Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"Cleon2"},"content":" * Acknowledges the marking of a task as not done yet.","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"Cleon2"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"Cleon2"},"content":" * @param index The index of the task that was marked as not done yet.","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"Cleon2"},"content":" * @param task The task that was marked as not done yet.","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"Cleon2"},"content":" public void acknowledgeUnmark(int index, Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"Cleon2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"Cleon2"},"content":" * Displays a farewell message when the application is exiting.","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"Cleon2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"Cleon2"},"content":" public void exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"Cleon2"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"Cleon2"},"content":" this.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":160}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"import duke.commands.IncorrectCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import duke.commands.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"import duke.tasks.DukeList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" void list_wrongInput_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" Command com \u003d Parser.parse(\"list \");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" assertTrue(com instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" void list_correctInput_listCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" Command com \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" assertTrue(com instanceof ListCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":27}},{"path":"src/test/java/duke/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Cleon2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Cleon2"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Cleon2"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Cleon2"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Cleon2"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Cleon2"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Cleon2"},"content":" void file_absentFile_createsNewFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Cleon2"},"content":" String path \u003d \"data/test.txt\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Cleon2"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Cleon2"},"content":" assertFalse(file.exists());","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Cleon2"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Cleon2"},"content":" assertTrue(file.exists());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Cleon2"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Cleon2"},"content":" void file_absentFolder_createNewFolder() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Cleon2"},"content":" String path \u003d \"testdata/test.txt\";","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Cleon2"},"content":" File folder \u003d new File(\"testdata\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Cleon2"},"content":" assertFalse(folder.isDirectory());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Cleon2"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Cleon2"},"content":" assertTrue(folder.exists());","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Cleon2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Cleon2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Cleon2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Cleon2":30}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Cleon2"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Cleon2"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Cleon2":2}},{"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":"Cleon2"},"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":{"Cleon2":1,"-":20}}] diff --git a/Cleon2_ip_master/commits.json b/Cleon2_ip_master/commits.json index 3c2e8fe3..1e983f89 100644 --- a/Cleon2_ip_master/commits.json +++ b/Cleon2_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Cleon2":[{"date":"2023-08-22","commitResults":[{"hash":"5105c0ae7cb222754c0b819cf8b52f8ba9f150b7","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0and1","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"30aa5f38e32c4fba078cdfa3ed4055312a08cb99","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-2","Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":5}}},{"hash":"2ee4a7447c7a7ac75f4f8415020b207cb4d34abe","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":4}}}]},{"date":"2023-08-23","commitResults":[{"hash":"1144e86ff2cc75c644183be8a06e6b0720c762c4","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":15}}}]},{"date":"2023-08-24","commitResults":[{"hash":"b7b18c8242cca21db7e956f52ecb5820ca6d2377","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":164,"deletions":45}}},{"hash":"846c938fe86fd8e24c6f5c8efb97adad7b51efdc","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"sh":{"insertions":0,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"8af882e9cfa7aff2a7b45905bdd323a234bcb40c","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":237,"deletions":112}}},{"hash":"07b0655fabeeff43c9b0f772c3707049dc791789","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":151,"deletions":4}}},{"hash":"fdd2de4bacae2f7d97f3141f3fe64bf4b7b573f3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"7e1e4bd75ef27e40a8ce46eaa5ec1891202e00e4","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":87,"deletions":18}}},{"hash":"f13b5a0715e12201667215b1ecc8f7c5ec2ccd37","isMergeCommit":true,"messageTitle":"merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"0e7923e5eedb245cdca79047b596115b192e6a51","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":256,"deletions":232}}},{"hash":"9c3c5dd1d22e8150a4779a9dbbcb256dc25472aa","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"2d332ba88565d4bf40ed7a2a7851f8035e5b6368","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":11},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"881326cdb7baf26a354d6fa2f29112f69ced61b9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"3e292d29734d787340018b5fecf28527aaf64131","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/nus-cs2103-AY2324S1/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1cc22fcc4982078b6a7834b35760586d3c55c809","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"311831833a48e26fefd47a4611afcc79bb5bcc48","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":632,"deletions":382}}}]},{"date":"2023-08-31","commitResults":[{"hash":"df4ea99369b0a8dfbdf9884d3e14666161697ec1","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":392,"deletions":51}}},{"hash":"462e8ae945029cb2d181111a9693bb3cfcaf111d","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"1ac6124a9a34f2b4612d04cc8276d1bdaee1cee3","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":76,"deletions":12}}},{"hash":"52edc9e8dc2a170225b1dc92a330ab1c1bb6f18b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"fca851c50cce5a1d782c4051a7b66564edfd2884","isMergeCommit":true,"messageTitle":"resolved conflict","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"47a737c9bade669a72bc5ff6da8ffabeea43ed3b","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"1892415d08eb850b65c4893c385005b4ccce89e6","isMergeCommit":true,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"06d40a9ba4c72dc4b72c61c250a55d2b1aebb1e0","isMergeCommit":false,"messageTitle":"added acknowledgements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"Cleon2":{"java":1323,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":1,"txt":5}},"authorContributionVariance":{"Cleon2":94185.336},"authorDisplayNameMap":{"Cleon2":"CS2103T-F10-2 CLEO..XUAN"}} +{"authorDailyContributionsMap":{"Cleon2":[{"date":"2023-08-22","commitResults":[{"hash":"5105c0ae7cb222754c0b819cf8b52f8ba9f150b7","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0and1","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"30aa5f38e32c4fba078cdfa3ed4055312a08cb99","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-2","Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":5}}},{"hash":"2ee4a7447c7a7ac75f4f8415020b207cb4d34abe","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":4}}}]},{"date":"2023-08-23","commitResults":[{"hash":"1144e86ff2cc75c644183be8a06e6b0720c762c4","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":15}}}]},{"date":"2023-08-24","commitResults":[{"hash":"b7b18c8242cca21db7e956f52ecb5820ca6d2377","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":164,"deletions":45}}},{"hash":"846c938fe86fd8e24c6f5c8efb97adad7b51efdc","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"sh":{"insertions":0,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"8af882e9cfa7aff2a7b45905bdd323a234bcb40c","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":237,"deletions":112}}},{"hash":"07b0655fabeeff43c9b0f772c3707049dc791789","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":151,"deletions":4}}},{"hash":"fdd2de4bacae2f7d97f3141f3fe64bf4b7b573f3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"7e1e4bd75ef27e40a8ce46eaa5ec1891202e00e4","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":87,"deletions":18}}},{"hash":"f13b5a0715e12201667215b1ecc8f7c5ec2ccd37","isMergeCommit":true,"messageTitle":"merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"0e7923e5eedb245cdca79047b596115b192e6a51","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":256,"deletions":232}}},{"hash":"9c3c5dd1d22e8150a4779a9dbbcb256dc25472aa","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"2d332ba88565d4bf40ed7a2a7851f8035e5b6368","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":11},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"881326cdb7baf26a354d6fa2f29112f69ced61b9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"3e292d29734d787340018b5fecf28527aaf64131","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/nus-cs2103-AY2324S1/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1cc22fcc4982078b6a7834b35760586d3c55c809","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"311831833a48e26fefd47a4611afcc79bb5bcc48","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":632,"deletions":382}}}]},{"date":"2023-08-31","commitResults":[{"hash":"df4ea99369b0a8dfbdf9884d3e14666161697ec1","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":392,"deletions":51}}},{"hash":"462e8ae945029cb2d181111a9693bb3cfcaf111d","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"1ac6124a9a34f2b4612d04cc8276d1bdaee1cee3","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":76,"deletions":12}}},{"hash":"52edc9e8dc2a170225b1dc92a330ab1c1bb6f18b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"fca851c50cce5a1d782c4051a7b66564edfd2884","isMergeCommit":true,"messageTitle":"resolved conflict","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"47a737c9bade669a72bc5ff6da8ffabeea43ed3b","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"1892415d08eb850b65c4893c385005b4ccce89e6","isMergeCommit":true,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"06d40a9ba4c72dc4b72c61c250a55d2b1aebb1e0","isMergeCommit":false,"messageTitle":"added acknowledgements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"b21b128e47384d5f1cb6b266bbc56de0b1b13cb1","isMergeCommit":false,"messageTitle":"fixed coding violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":208,"deletions":119}}},{"hash":"6f616ca225ad1e368b57aded00dd9f11e26fc224","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Cleon2":{"java":1412,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":6,"txt":5}},"authorContributionVariance":{"Cleon2":81388.51},"authorDisplayNameMap":{"Cleon2":"CS2103T-F10-2 CLEO..XUAN"}} diff --git a/Elijah5399_ip_master/authorship.json b/Elijah5399_ip_master/authorship.json index 4930d034..4a55d0ee 100644 --- a/Elijah5399_ip_master/authorship.json +++ b/Elijah5399_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"# Alyssa project template","lastModifiedDate":"2023-08-20"},{"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":"Elijah5399"},"content":"3. After that, locate the `src/main/java/Alyssa.java` file, right-click it, and choose `Run Alyssa.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-20"},{"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":{"Elijah5399":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":"Elijah5399"},"content":" mainClass.set(\"alyssa.Alyssa\")","lastModifiedDate":"2023-08-30"},{"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":"Elijah5399"},"content":" archiveBaseName \u003d \"MYAlyssa\"","lastModifiedDate":"2023-08-30"},{"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":{"-":40,"Elijah5399":2}},{"path":"src/main/java/alyssa/Alyssa.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"import alyssa.Exceptions.AlyssaArgumentException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" * This class represents the main program.","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":"public class Alyssa {","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" private static final String line \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" private String saveFilePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" private String dirPath;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" private Parser parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" * Constructor method for Alyssa.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" * @param saveFilePath Relative path of the save file.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" * @param dirPath Directory to be created, where the save file resides.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" public Alyssa(String saveFilePath, String dirPath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" this.saveFilePath \u003d saveFilePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" this.dirPath \u003d dirPath;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" new Alyssa(\"./data/alyssa.txt\", \"./data\").execute();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" private void run(Command command, String rest) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" switch (command) {","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" case BYE:","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" ui.goodbye();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":" case LIST:","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":" taskList.listTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Elijah5399"},"content":" case MARK:","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"Elijah5399"},"content":" taskList.markTask(rest);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Elijah5399"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"Elijah5399"},"content":" this.ui.printWithLines(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"Elijah5399"},"content":" this.ui.printWithLines(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"Elijah5399"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Elijah5399"},"content":" case UNMARK:","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"Elijah5399"},"content":" taskList.unmarkTask(rest);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Elijah5399"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Elijah5399"},"content":" this.ui.printWithLines(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Elijah5399"},"content":" this.ui.printWithLines(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Elijah5399"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"Elijah5399"},"content":" case TODO:","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"Elijah5399"},"content":" taskList.addTodo(rest);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"Elijah5399"},"content":" this.ui.printWithLines(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"Elijah5399"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"Elijah5399"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"Elijah5399"},"content":" taskList.addDeadline(rest);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"Elijah5399"},"content":" this.ui.printWithLines(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":73,"author":{"gitId":"Elijah5399"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"Elijah5399"},"content":" case EVENT:","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"Elijah5399"},"content":" taskList.addEvent(rest);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"Elijah5399"},"content":" this.ui.printWithLines(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"Elijah5399"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":81,"author":{"gitId":"Elijah5399"},"content":" case DELETE:","lastModifiedDate":"2023-08-22"},{"lineNumber":82,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":83,"author":{"gitId":"Elijah5399"},"content":" taskList.deleteTask(rest);","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"Elijah5399"},"content":" this.ui.printWithLines(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Elijah5399"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":87,"author":{"gitId":"Elijah5399"},"content":" this.ui.printWithLines(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"Elijah5399"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":90,"author":{"gitId":"Elijah5399"},"content":" case FIND:","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Elijah5399"},"content":" taskList.printRelevantTasks(rest);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Elijah5399"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Elijah5399"},"content":" default:","lastModifiedDate":"2023-08-22"},{"lineNumber":94,"author":{"gitId":"Elijah5399"},"content":" ui.invalidTaskResponse();","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":96,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":97,"author":{"gitId":"Elijah5399"},"content":" private void execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Elijah5399"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-22"},{"lineNumber":99,"author":{"gitId":"Elijah5399"},"content":" boolean isRunning \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":100,"author":{"gitId":"Elijah5399"},"content":" Command command;","lastModifiedDate":"2023-08-22"},{"lineNumber":101,"author":{"gitId":"Elijah5399"},"content":" this.ui.greet();","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Elijah5399"},"content":" this.storage \u003d new Storage(saveFilePath, dirPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Elijah5399"},"content":" this.taskList \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Elijah5399"},"content":" while (isRunning) {","lastModifiedDate":"2023-08-22"},{"lineNumber":105,"author":{"gitId":"Elijah5399"},"content":" String nextInput \u003d sc.nextLine();","lastModifiedDate":"2023-08-22"},{"lineNumber":106,"author":{"gitId":"Elijah5399"},"content":" String[] parsedInput \u003d this.parser.parseCommand(nextInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Elijah5399"},"content":" String commandString \u003d parsedInput[0];","lastModifiedDate":"2023-08-22"},{"lineNumber":108,"author":{"gitId":"Elijah5399"},"content":" command \u003d Command.assignCommand(commandString);","lastModifiedDate":"2023-08-22"},{"lineNumber":109,"author":{"gitId":"Elijah5399"},"content":" String rest \u003d parsedInput.length \u003e 1 ? parsedInput[1] : \"\";","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"Elijah5399"},"content":" run(command, rest);","lastModifiedDate":"2023-08-22"},{"lineNumber":111,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Elijah5399"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Elijah5399"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Oops... We couldn\u0027t save your task data to a file :(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Elijah5399"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Elijah5399"},"content":" if (command \u003d\u003d Command.BYE) {","lastModifiedDate":"2023-08-22"},{"lineNumber":118,"author":{"gitId":"Elijah5399"},"content":" isRunning \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":120,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":121,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":122,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Elijah5399":122}},{"path":"src/main/java/alyssa/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" * This is an enum containing the possible commands given by the user.","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"public enum Command {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":" BYE, LIST, MARK, UNMARK, TODO, DEADLINE, EVENT, DELETE, FIND, INVALID;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" * Assigns a given command string with its enum counterpart.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" * @param cmd The command as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" * @return The command as an enum.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" protected static Command assignCommand(String cmd) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" switch (cmd) {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" case \"bye\":","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" return Command.BYE;","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" case \"list\":","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" return Command.LIST;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" case \"mark\":","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" return Command.MARK;","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" return Command.UNMARK;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" case \"todo\":","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" return Command.TODO;","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" case \"event\":","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" return Command.EVENT;","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" return Command.DEADLINE;","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" case \"delete\":","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" return Command.DELETE;","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" return Command.FIND;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" default:","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" return Command.INVALID;","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Elijah5399":38}},{"path":"src/main/java/alyssa/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":" * A Deadline is a task with an end date/time.","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" * alyssa.Deadline constructor method.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" * @param description A description for the deadline task.","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" * @param by When the deadline should be completed by.","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.getBy() + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" * Returns the deadline\u0027s by in a different format: e.g. Jun 05 2001.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" public String getBy() {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" return by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" * Returns the deadline\u0027s by in the format: 2001-06-05.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" public String getByForStorage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" return by.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Elijah5399":38}},{"path":"src/main/java/alyssa/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" * An event is a task with a start date/time and","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":" * an end date/time.","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" /** The date/time this event starts from. */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" private String from;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" /** The date/time this event ends. */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" private String to;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" * Constructor method for alyssa.Event.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" * @param description A description for the event.","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" * @param from A string representing when the event starts.","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" * @param to A string representing when the event ends.","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" * Returns from of this event.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" public String getFrom() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" return this.from;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" * Returns to of this event.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":" public String getTo() {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":" return this.to;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Elijah5399":41}},{"path":"src/main/java/alyssa/Exceptions/AlyssaArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa.Exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" * This class represents the exception which is thrown when a correct command is given with","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":" * incomplete/invalid arguments.","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"public class AlyssaArgumentException extends AlyssaException {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" public AlyssaArgumentException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Elijah5399":11}},{"path":"src/main/java/alyssa/Exceptions/AlyssaException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa.Exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" * A generic exception. All custom exceptions extend from this.","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"public class AlyssaException extends RuntimeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":" public AlyssaException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Elijah5399":10}},{"path":"src/main/java/alyssa/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" * The Parser class processes commands.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" * Splits a command by whitespaces, to a maximum of 2 strings.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" * @param command The raw command provided on user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" * @return An array of strings containing the split command, of length at most 2.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" protected String[] parseCommand(String command) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" return command.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" * Splits a stored task by ~, to a maximum of 5 strings.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" * @param storedTask The task to be parsed.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" * @return The parsed task, in the form of a String array of length at most 5.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" protected String[] parserStoredTask(String storedTask) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" return storedTask.split(\" ~ \", 5);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Elijah5399":23}},{"path":"src/main/java/alyssa/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":"import alyssa.Exceptions.AlyssaArgumentException;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":"import alyssa.Exceptions.AlyssaException;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" * This class deals with loading tasks from ./data/alyssa.txt and saving tasks in one file.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" /** The relative path to storage file. Usually ./data/alyssa.txt. */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" /** The relative path of the folder which the storage file is in. Usually ./data. */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" private String dirPath;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" /** The storage file. */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" private File saveFile;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" private Parser parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" * Constructor method for the alyssa.Storage class.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" * @param filePath The relative path of alyssa.txt.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" public Storage(String filePath, String dirPath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" this.dirPath \u003d dirPath;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" * Checks for the presence of ./data and ./data/alyssa.txt, and adds them if absent.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":" private void checkSaveFile() {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":" File dataDir \u003d new File(dirPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":" if (!dataDir.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":" //System.out.println(\"data directory doesn\u0027t exist\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Elijah5399"},"content":" dataDir.mkdir();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Elijah5399"},"content":" saveFile \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Elijah5399"},"content":" if (!saveFile.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Elijah5399"},"content":" //System.out.println(\"savefile doesn\u0027t exist\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Elijah5399"},"content":" saveFile.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Elijah5399"},"content":" saveFile.setReadable(true);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Elijah5399"},"content":" saveFile.setWritable(true);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Elijah5399"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Something went wrong when creating a new alyssa.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Elijah5399"},"content":" * Imports tasks from ./data/alyssa.txt if there are any.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Elijah5399"},"content":" * @return a list of Tasks, used to instantiate the TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Elijah5399"},"content":" protected List\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Elijah5399"},"content":" List\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Elijah5399"},"content":" checkSaveFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Elijah5399"},"content":" Scanner fileScanner \u003d new Scanner(saveFile);","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Elijah5399"},"content":" //each line read by fileScanner is a task!","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Elijah5399"},"content":" while (fileScanner.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Elijah5399"},"content":" String nextTask \u003d fileScanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Elijah5399"},"content":" String[] parsedTask \u003d parser.parseStoredTask(nextTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Elijah5399"},"content":" String typeOfTask \u003d parsedTask[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Elijah5399"},"content":" String taskSymbol \u003d parsedTask[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Elijah5399"},"content":" String desc \u003d parsedTask[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Elijah5399"},"content":" switch (typeOfTask) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Elijah5399"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Elijah5399"},"content":" Todo newTodo \u003d new Todo(desc);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Elijah5399"},"content":" if (taskSymbol.equals(\"X\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Elijah5399"},"content":" newTodo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Elijah5399"},"content":" taskList.add(newTodo);","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Elijah5399"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Elijah5399"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Elijah5399"},"content":" LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Elijah5399"},"content":" by \u003d LocalDate.parse(parsedTask[3]);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Elijah5399"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Invalid by. Syntax: yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Elijah5399"},"content":" Deadline newDeadline \u003d new Deadline(desc, by);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Elijah5399"},"content":" if (taskSymbol.equals(\"X\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Elijah5399"},"content":" newDeadline.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Elijah5399"},"content":" taskList.add(newDeadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Elijah5399"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Elijah5399"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Elijah5399"},"content":" Event newEvent \u003d new Event(desc, parsedTask[3], parsedTask[4]);","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Elijah5399"},"content":" if (taskSymbol.equals(\"X\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Elijah5399"},"content":" newEvent.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Elijah5399"},"content":" taskList.add(newEvent);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Elijah5399"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Elijah5399"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaException(\"Corrupted alyssa.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Elijah5399"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Weird... you didn\u0027t have a saved alyssa.txt file even after we added it for you\");","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Elijah5399"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Elijah5399"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Corrupted alyssa.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Elijah5399"},"content":" return taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Elijah5399"},"content":" * Saves existing tasks to ./data/alyssa.txt.","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Elijah5399"},"content":" * @throws IOException when file or path cannot be found, or file is a directory, or file cannot be opened.","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Elijah5399"},"content":" protected void saveTasks(TaskList lst) throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Elijah5399"},"content":" List\u003cTask\u003e taskList \u003d lst.getTaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Elijah5399"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Elijah5399"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Elijah5399"},"content":" String entry \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"Elijah5399"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"Elijah5399"},"content":" Todo todo \u003d (Todo) task;","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Elijah5399"},"content":" entry \u003d \"T ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d todo.getStatusIcon() + \" ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d todo.getDescription();","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Elijah5399"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Elijah5399"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"Elijah5399"},"content":" entry \u003d \"D ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d deadline.getStatusIcon() + \" ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d deadline.getDescription() + \" ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d deadline.getByForStorage();","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Elijah5399"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Elijah5399"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"Elijah5399"},"content":" entry \u003d \"E ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d event.getStatusIcon() + \" ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d event.getDescription() + \" ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d event.getFrom() + \" ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d event.getTo();","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"Elijah5399"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaException(\"Oops! Something went wrong.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d System.lineSeparator();","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"Elijah5399"},"content":" fw.write(entry);","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"Elijah5399"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Elijah5399":149}},{"path":"src/main/java/alyssa/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" * Task represents a task created by a user. It can be either","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":" * done or undone.","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" private String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" * Constructor method for alyssa.Task.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" * @param description A brief description of the task.","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" * Returns the status icon corresponding to whether this task is done.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" * @return \"X\" if the task is done, and a whitespace otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" * Marks this task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" * Marks this task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Elijah5399"},"content":" * Returns the description of this task.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Elijah5399"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"Elijah5399"},"content":" return this.description;","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"Elijah5399"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"Elijah5399"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"Elijah5399"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Elijah5399":52}},{"path":"src/main/java/alyssa/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"import alyssa.Exceptions.AlyssaArgumentException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" * This class supports Alyssa by encapsulating the current tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" private static final String line \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" private List\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" * Constructor method for TaskList if an existing List of Tasks is present.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" * @param taskList The existing List of Tasks to be used.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" public TaskList(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" * Constructor method for TaskList. This TaskList is instantiated with no existing tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" protected void listTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" int counter \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" System.out.println(counter + \".\" + task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" counter++;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":" * Marks a provided task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Elijah5399"},"content":" * @param rest The number of the task to be marked, given as a String.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Elijah5399"},"content":" * @throws AlyssaArgumentException AlyssaArgumentException is thrown if the task number is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Elijah5399"},"content":" * @throws NumberFormatException NumberFormatException is thrown if the provided String is not an int.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Elijah5399"},"content":" protected void markTask(String rest) throws AlyssaArgumentException, NumberFormatException {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Elijah5399"},"content":" int index \u003d Integer.valueOf(rest); //this could throw a NumberFormatException if rest is not a number","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Elijah5399"},"content":" if (index \u003c 1 || index \u003e taskList.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Invalid task number\");","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Elijah5399"},"content":" Task task \u003d taskList.get(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Elijah5399"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Elijah5399"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Elijah5399"},"content":" * Marks a provided task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Elijah5399"},"content":" * @param rest The number of the task to be unmarked, given as a String.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Elijah5399"},"content":" * @throws AlyssaArgumentException AlyssaArgumentException is thrown if the task number is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Elijah5399"},"content":" * @throws NumberFormatException NumberFormatException is thrown if the provided String is not an int.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Elijah5399"},"content":" protected void unmarkTask(String rest) throws AlyssaArgumentException, NumberFormatException {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Elijah5399"},"content":" int index \u003d Integer.valueOf(rest); //this could throw a NumberFormatException if rest is not a number","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Elijah5399"},"content":" if (index \u003c 1 || index \u003e taskList.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Invalid task number\");","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Elijah5399"},"content":" Task task \u003d taskList.get(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Elijah5399"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Elijah5399"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Elijah5399"},"content":" * Adds a given todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Elijah5399"},"content":" * @param desc Description of the todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Elijah5399"},"content":" * @throws AlyssaArgumentException AlyssaArgumentException is thrown if the description is empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Elijah5399"},"content":" protected void addTodo(String desc) throws AlyssaArgumentException {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Elijah5399"},"content":" if (desc.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Please specify a description for the todo.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Elijah5399"},"content":" Task newTodo \u003d new Todo(desc);","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Elijah5399"},"content":" taskList.add(newTodo);","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Elijah5399"},"content":" System.out.println(newTodo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Now you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Elijah5399"},"content":" * Adds a given deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Elijah5399"},"content":" * @param rest Details of the deadline, provided as a String.","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Elijah5399"},"content":" * @throws AlyssaArgumentException AlyssaArgumentException is thrown if the String given is not of the correct format.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Elijah5399"},"content":" protected void addDeadline(String rest) throws AlyssaArgumentException {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Elijah5399"},"content":" String[] parsed \u003d rest.split(\" /by \");","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Elijah5399"},"content":" if (parsed.length \u003c 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Incorrect deadline syntax. Syntax: deadline desc /by date\");","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Elijah5399"},"content":" String desc \u003d parsed[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Elijah5399"},"content":" String by \u003d parsed[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Elijah5399"},"content":" Task newDeadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Elijah5399"},"content":" newDeadline \u003d new Deadline(desc, LocalDate.parse(by));","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Elijah5399"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Invalid by. Syntax: yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Elijah5399"},"content":" taskList.add(newDeadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Elijah5399"},"content":" System.out.println(newDeadline.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Now you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"Elijah5399"},"content":" * Adds an event to the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"Elijah5399"},"content":" * @param rest Details of the event, in the form of a String.","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"Elijah5399"},"content":" * @throws AlyssaArgumentException AlyssaArgumentException is thrown if the String given is not of the correct format.","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"Elijah5399"},"content":" protected void addEvent(String rest) throws AlyssaArgumentException {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Elijah5399"},"content":" String[] parsed \u003d rest.split(\" /from | /to \");","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Elijah5399"},"content":" if (parsed.length \u003c 3) {","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Incorrect event syntax. Syntax: event desc /from date /to date\");","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Elijah5399"},"content":" String desc \u003d parsed[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Elijah5399"},"content":" String from \u003d parsed[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Elijah5399"},"content":" String to \u003d parsed[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Elijah5399"},"content":" Task newEvent \u003d new Event(desc, from, to);","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Elijah5399"},"content":" taskList.add(newEvent);","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"Elijah5399"},"content":" System.out.println(newEvent.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Now you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"Elijah5399"},"content":" * Deletes a task in the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"Elijah5399"},"content":" * @param rest Position of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"Elijah5399"},"content":" * @throws AlyssaArgumentException AlyssaArgumentException is thrown if the task number is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"Elijah5399"},"content":" * @throws NumberFormatException NumberFormatException is thrown if rest is not an int.","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"Elijah5399"},"content":" protected void deleteTask(String rest) throws AlyssaArgumentException, NumberFormatException {","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"Elijah5399"},"content":" int index \u003d Integer.valueOf(rest); //this could throw a NumberFormatException if rest is not a number","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"Elijah5399"},"content":" if (index \u003c 1 || index \u003e taskList.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Invalid task number\");","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"Elijah5399"},"content":" Task toDelete \u003d taskList.get(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"Elijah5399"},"content":" System.out.println(toDelete.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"Elijah5399"},"content":" taskList.remove(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Now you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"Elijah5399"},"content":" * Returns the encapsulated task list as a List\u003cTask\u003e.","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"Elijah5399"},"content":" public List\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"Elijah5399"},"content":" return this.taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"Elijah5399"},"content":" protected void printRelevantTasks(String searchKey) {","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"Elijah5399"},"content":" List\u003cString\u003e toPrint \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"Elijah5399"},"content":" for (int i \u003d 0; i \u003c this.taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"Elijah5399"},"content":" Task task \u003d this.taskList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"Elijah5399"},"content":" if (task.getDescription().contains(searchKey)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"Elijah5399"},"content":" toPrint.add((i + 1) + \".\" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"Elijah5399"},"content":" for (String relevantTask : toPrint) {","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"Elijah5399"},"content":" System.out.println(relevantTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Elijah5399":184}},{"path":"src/main/java/alyssa/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":" * A Todo is a task without a date/time attached to it.","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":" * Constructor method for Todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" * @param description Description of the Todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Elijah5399":17}},{"path":"src/main/java/alyssa/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" * This class helps Alyssa interact with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":" private static final String line \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" private static final String logo \u003d \" ___ __ __ __ ____ ____ ___\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" + \"| | | | \\\\ \\\\ / / | __| | __| | |\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" + \"| | | | \\\\ / \\\\ \\\\ \\\\ \\\\ | |\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" + \"|___| | | | | \\\\ \\\\ \\\\ \\\\ |___|\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" + \"| | | |___ | | _\\\\ \\\\ _\\\\ \\\\ | |\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" + \"| | |_____| |_| |____| |____| | |\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" * Sends a greeting message via System.out.println.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" protected void greet() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" System.out.println(logo);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Hello! I\u0027m Alyssa!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" * Sends a goodbye message via System.out.println.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" protected void goodbye() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" * Sends a error message via System.out.println.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" protected void invalidTaskResponse() {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Elijah5399"},"content":" * Prints any message, surrounded by lines, via System.out.println.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Elijah5399"},"content":" protected void printWithLines(String output) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Elijah5399"},"content":" System.out.println(output);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Elijah5399"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Elijah5399":49}},{"path":"src/test/java/alyssa/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" * This class tests the method(s) in the Deadline class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" * Tests if getBy works correctly. eg 2023-08-30 is stored as LocalDate, and shown as Aug 30 2023.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" public void getBy_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" Deadline deadline \u003d new Deadline(\"Finish CS2103T iP\", LocalDate.parse(\"2023-08-30\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" assertEquals(\"Aug 30 2023\", deadline.getBy());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Elijah5399":22}},{"path":"src/test/java/alyssa/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"import alyssa.Exceptions.AlyssaArgumentException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" * Here we test if the markTask function in TaskList is working as expected.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" * We ensure that it throws the correct exception when the deadline has missing","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" * /by or incorrectly formatted /by, and that it works correctly with proper","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" * deadlines.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" * Verifies that adding a deadline with no /by field produces the correct Exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" public void addDeadline_invalidRest_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" taskList.addDeadline(\"read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" assertEquals(\"Incorrect deadline syntax. Syntax: deadline desc /by date\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" * Verifies that adding a deadline with a wrongly formatted /by field produces the correct Exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" public void addDeadline_invalidBy_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":" taskList.addDeadline(\"read book /by tmr\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":" assertEquals(\"Invalid by. Syntax: yyyy-mm-dd\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Elijah5399"},"content":" * Verifies that adding a deadline with the correct syntax works as expected.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Elijah5399"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Elijah5399"},"content":" public void addDeadline_validSyntax_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Elijah5399"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Elijah5399"},"content":" taskList.addDeadline(\"read book /by 2023-12-01\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Elijah5399"},"content":" assertEquals(1, taskList.getTaskList().size());","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Elijah5399"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Elijah5399"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Elijah5399":58}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"deadline return book /by 2030-06-23","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"delete 2","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Elijah5399":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":"Elijah5399"},"content":"java -classpath ..\\bin Alyssa \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-20"},{"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":{"-":20,"Elijah5399":1}},{"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":"Elijah5399"},"content":"if ! javac -cp ../src/main/java/alyssa -Xlint:none -d ../bin ../src/main/java/alyssa/*.java ../src/main/java/alyssa/Exceptions/*.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":"Elijah5399"},"content":"java -classpath ../bin Alyssa \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-21"},{"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":"Elijah5399"},"content":"diff -u ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-21"},{"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":{"-":35,"Elijah5399":3}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"# Alyssa project template","lastModifiedDate":"2023-08-20"},{"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":"Elijah5399"},"content":"3. After that, locate the `src/main/java/Alyssa.java` file, right-click it, and choose `Run Alyssa.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-20"},{"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":{"Elijah5399":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":"Elijah5399"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"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":"Elijah5399"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"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":"Elijah5399"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"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":"Elijah5399"},"content":" mainClass.set(\"alyssa.Launcher\")","lastModifiedDate":"2023-09-05"},{"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":"Elijah5399"},"content":" archiveBaseName \u003d \"MYAlyssa\"","lastModifiedDate":"2023-08-30"},{"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":{"-":40,"Elijah5399":21}},{"path":"src/main/java/alyssa/Alyssa.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"import alyssa.Exceptions.AlyssaArgumentException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" * This class represents the main program.","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":"public class Alyssa {","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" public static final String LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" private static final String FILEPATH \u003d \"./data/alyssa.txt\";","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" private static final String DIRPATH \u003d \"./data\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" private Parser parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" /*","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" * Constructor method for Alyssa.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" public Alyssa() {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":" this.storage \u003d new Storage(FILEPATH, DIRPATH);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":" this.taskList \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Elijah5399"},"content":" private String run(Command command, String rest) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Elijah5399"},"content":" switch (command) {","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"Elijah5399"},"content":" case BYE:","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"Elijah5399"},"content":" return ui.goodbye();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Elijah5399"},"content":" case LIST:","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"Elijah5399"},"content":" return taskList.listTasks();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Elijah5399"},"content":" case MARK:","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Elijah5399"},"content":" String output \u003d taskList.markTask(rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Elijah5399"},"content":" return output;","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Elijah5399"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Elijah5399"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Elijah5399"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"Elijah5399"},"content":" case UNMARK:","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"Elijah5399"},"content":" String output \u003d taskList.unmarkTask(rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Elijah5399"},"content":" return output;","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Elijah5399"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"Elijah5399"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"Elijah5399"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"Elijah5399"},"content":" case TODO:","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"Elijah5399"},"content":" String output \u003d taskList.addTodo(rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"Elijah5399"},"content":" return output;","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"Elijah5399"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"Elijah5399"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"Elijah5399"},"content":" String output \u003d taskList.addDeadline(rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"Elijah5399"},"content":" return output;","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"Elijah5399"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":81,"author":{"gitId":"Elijah5399"},"content":" case EVENT:","lastModifiedDate":"2023-08-22"},{"lineNumber":82,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":83,"author":{"gitId":"Elijah5399"},"content":" String output \u003d taskList.addEvent(rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"Elijah5399"},"content":" return output;","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"Elijah5399"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":88,"author":{"gitId":"Elijah5399"},"content":" case DELETE:","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":90,"author":{"gitId":"Elijah5399"},"content":" String output \u003d taskList.deleteTask(rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"Elijah5399"},"content":" return output;","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":93,"author":{"gitId":"Elijah5399"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"Elijah5399"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":95,"author":{"gitId":"Elijah5399"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":97,"author":{"gitId":"Elijah5399"},"content":" case FIND:","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Elijah5399"},"content":" return taskList.printRelevantTasks(rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"Elijah5399"},"content":" default:","lastModifiedDate":"2023-08-22"},{"lineNumber":100,"author":{"gitId":"Elijah5399"},"content":" return ui.invalidTaskResponse();","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":102,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"Elijah5399"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"Elijah5399"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"Elijah5399"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"Elijah5399"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"Elijah5399"},"content":" String[] parsedInput \u003d this.parser.parseCommand(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"Elijah5399"},"content":" String commandString \u003d parsedInput[0];","lastModifiedDate":"2023-08-22"},{"lineNumber":112,"author":{"gitId":"Elijah5399"},"content":" Command command;","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"Elijah5399"},"content":" command \u003d Command.assignCommand(commandString);","lastModifiedDate":"2023-08-22"},{"lineNumber":114,"author":{"gitId":"Elijah5399"},"content":" String rest \u003d parsedInput.length \u003e 1 ? parsedInput[1] : \"\";","lastModifiedDate":"2023-08-22"},{"lineNumber":115,"author":{"gitId":"Elijah5399"},"content":" String output \u003d run(command, rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Elijah5399"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Elijah5399"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Elijah5399"},"content":" return \"Oops... We couldn\u0027t save your task data to a file :(\";","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":121,"author":{"gitId":"Elijah5399"},"content":" return output;","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Elijah5399":123}},{"path":"src/main/java/alyssa/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" * This is an enum containing the possible commands given by the user.","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"public enum Command {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":" BYE, LIST, MARK, UNMARK, TODO, DEADLINE, EVENT, DELETE, FIND, INVALID;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" * Assigns a given command string with its enum counterpart.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" * @param cmd The command as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" * @return The command as an enum.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" protected static Command assignCommand(String cmd) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" switch (cmd) {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" case \"bye\":","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" return Command.BYE;","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" case \"list\":","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" return Command.LIST;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" case \"mark\":","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" return Command.MARK;","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" return Command.UNMARK;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" case \"todo\":","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" return Command.TODO;","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" case \"event\":","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" return Command.EVENT;","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" return Command.DEADLINE;","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" case \"delete\":","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" return Command.DELETE;","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" return Command.FIND;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" default:","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" return Command.INVALID;","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Elijah5399":38}},{"path":"src/main/java/alyssa/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":" * A Deadline is a task with an end date/time.","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" * alyssa.Deadline constructor method.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" * @param description A description for the deadline task.","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" * @param by When the deadline should be completed by.","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.getBy() + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" * Returns the deadline\u0027s by in a different format: e.g. Jun 05 2001.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" public String getBy() {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" return by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" * Returns the deadline\u0027s by in the format: 2001-06-05.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" public String getByForStorage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" return by.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Elijah5399":38}},{"path":"src/main/java/alyssa/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"import alyssa.MainWindow;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"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":21,"author":{"gitId":"Elijah5399"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Elijah5399"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Elijah5399"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Elijah5399"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Elijah5399"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Elijah5399"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Elijah5399"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Elijah5399"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Elijah5399"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Elijah5399"},"content":" public static DialogBox getAlyssaDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Elijah5399"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Elijah5399"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Elijah5399"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Elijah5399":62}},{"path":"src/main/java/alyssa/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" * An event is a task with a start date/time and","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":" * an end date/time.","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" /** The date/time this event starts from. */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" private String from;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" /** The date/time this event ends. */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" private String to;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" * Constructor method for alyssa.Event.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" * @param description A description for the event.","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" * @param from A string representing when the event starts.","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" * @param to A string representing when the event ends.","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" * Returns from of this event.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" public String getFrom() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" return this.from;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" * Returns to of this event.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":" public String getTo() {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":" return this.to;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Elijah5399":41}},{"path":"src/main/java/alyssa/Exceptions/AlyssaArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa.Exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" * This class represents the exception which is thrown when a correct command is given with","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":" * incomplete/invalid arguments.","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"public class AlyssaArgumentException extends AlyssaException {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" public AlyssaArgumentException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Elijah5399":11}},{"path":"src/main/java/alyssa/Exceptions/AlyssaException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa.Exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" * A generic exception. All custom exceptions extend from this.","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"public class AlyssaException extends RuntimeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":" public AlyssaException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Elijah5399":10}},{"path":"src/main/java/alyssa/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Elijah5399":12}},{"path":"src/main/java/alyssa/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" private Alyssa alyssa \u003d new Alyssa();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setAlyssa(alyssa);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Elijah5399":31}},{"path":"src/main/java/alyssa/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" private Alyssa alyssa;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/hiro2.jpeg\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" private Image alyssaImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/zerotwo.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" dialogContainer.getChildren().add(DialogBox.getAlyssaDialog(ui.getGreeting(), alyssaImage));","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" public void setAlyssa(Alyssa aly) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":" alyssa \u003d aly;","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":" boolean programStopped \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Elijah5399"},"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":44,"author":{"gitId":"Elijah5399"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Elijah5399"},"content":" public void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Elijah5399"},"content":" if (programStopped) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Elijah5399"},"content":" javafx.application.Platform.exit();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Elijah5399"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Elijah5399"},"content":" String response \u003d alyssa.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Elijah5399"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Elijah5399"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Elijah5399"},"content":" DialogBox.getAlyssaDialog(response, alyssaImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Elijah5399"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Elijah5399"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Elijah5399"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Elijah5399"},"content":" programStopped \u003d true;","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Elijah5399":62}},{"path":"src/main/java/alyssa/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" * The Parser class processes commands.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" * Splits a command by whitespaces, to a maximum of 2 strings.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" * @param command The raw command provided on user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" * @return An array of strings containing the split command, of length at most 2.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" protected String[] parseCommand(String command) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" return command.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" * Splits a stored task by ~, to a maximum of 5 strings.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" * @param storedTask The task to be parsed.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" * @return The parsed task, in the form of a String array of length at most 5.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" protected String[] parseStoredTask(String storedTask) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" return storedTask.split(\" ~ \", 5);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Elijah5399":23}},{"path":"src/main/java/alyssa/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":"import alyssa.Exceptions.AlyssaArgumentException;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":"import alyssa.Exceptions.AlyssaException;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" * This class deals with loading tasks from ./data/alyssa.txt and saving tasks in one file.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" /** The relative path to storage file. Usually ./data/alyssa.txt. */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" /** The relative path of the folder which the storage file is in. Usually ./data. */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" private String dirPath;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" /** The storage file. */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" private File saveFile;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" private Parser parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" * Constructor method for the alyssa.Storage class.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" * @param filePath The relative path of alyssa.txt.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" public Storage(String filePath, String dirPath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" this.dirPath \u003d dirPath;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" * Checks for the presence of ./data and ./data/alyssa.txt, and adds them if absent.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":" private void checkSaveFile() {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":" File dataDir \u003d new File(dirPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":" if (!dataDir.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":" //System.out.println(\"data directory doesn\u0027t exist\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Elijah5399"},"content":" dataDir.mkdir();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Elijah5399"},"content":" saveFile \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Elijah5399"},"content":" if (!saveFile.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Elijah5399"},"content":" //System.out.println(\"savefile doesn\u0027t exist\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Elijah5399"},"content":" saveFile.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Elijah5399"},"content":" saveFile.setReadable(true);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Elijah5399"},"content":" saveFile.setWritable(true);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Elijah5399"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Something went wrong when creating a new alyssa.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Elijah5399"},"content":" * Imports tasks from ./data/alyssa.txt if there are any.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Elijah5399"},"content":" * @return a list of Tasks, used to instantiate the TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Elijah5399"},"content":" protected List\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Elijah5399"},"content":" List\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Elijah5399"},"content":" checkSaveFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Elijah5399"},"content":" Scanner fileScanner \u003d new Scanner(saveFile);","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Elijah5399"},"content":" //each line read by fileScanner is a task!","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Elijah5399"},"content":" while (fileScanner.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Elijah5399"},"content":" String nextTask \u003d fileScanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Elijah5399"},"content":" String[] parsedTask \u003d parser.parseStoredTask(nextTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Elijah5399"},"content":" String typeOfTask \u003d parsedTask[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Elijah5399"},"content":" String taskSymbol \u003d parsedTask[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Elijah5399"},"content":" String desc \u003d parsedTask[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Elijah5399"},"content":" switch (typeOfTask) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Elijah5399"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Elijah5399"},"content":" Todo newTodo \u003d new Todo(desc);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Elijah5399"},"content":" if (taskSymbol.equals(\"X\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Elijah5399"},"content":" newTodo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Elijah5399"},"content":" taskList.add(newTodo);","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Elijah5399"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Elijah5399"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Elijah5399"},"content":" LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Elijah5399"},"content":" by \u003d LocalDate.parse(parsedTask[3]);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Elijah5399"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Invalid by. Syntax: yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Elijah5399"},"content":" Deadline newDeadline \u003d new Deadline(desc, by);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Elijah5399"},"content":" if (taskSymbol.equals(\"X\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Elijah5399"},"content":" newDeadline.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Elijah5399"},"content":" taskList.add(newDeadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Elijah5399"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Elijah5399"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Elijah5399"},"content":" Event newEvent \u003d new Event(desc, parsedTask[3], parsedTask[4]);","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Elijah5399"},"content":" if (taskSymbol.equals(\"X\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Elijah5399"},"content":" newEvent.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Elijah5399"},"content":" taskList.add(newEvent);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Elijah5399"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Elijah5399"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaException(\"Corrupted alyssa.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Elijah5399"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Weird... you didn\u0027t have a saved alyssa.txt file even after we added it for you\");","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Elijah5399"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Elijah5399"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Elijah5399"},"content":" System.out.println(\"Corrupted alyssa.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Elijah5399"},"content":" return taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Elijah5399"},"content":" * Saves existing tasks to ./data/alyssa.txt.","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Elijah5399"},"content":" * @throws IOException when file or path cannot be found, or file is a directory, or file cannot be opened.","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Elijah5399"},"content":" protected void saveTasks(TaskList lst) throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Elijah5399"},"content":" List\u003cTask\u003e taskList \u003d lst.getTaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Elijah5399"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Elijah5399"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Elijah5399"},"content":" String entry \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"Elijah5399"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"Elijah5399"},"content":" Todo todo \u003d (Todo) task;","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Elijah5399"},"content":" entry \u003d \"T ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d todo.getStatusIcon() + \" ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d todo.getDescription();","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Elijah5399"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Elijah5399"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"Elijah5399"},"content":" entry \u003d \"D ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d deadline.getStatusIcon() + \" ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d deadline.getDescription() + \" ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d deadline.getByForStorage();","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Elijah5399"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Elijah5399"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"Elijah5399"},"content":" entry \u003d \"E ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d event.getStatusIcon() + \" ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d event.getDescription() + \" ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d event.getFrom() + \" ~ \";","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d event.getTo();","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"Elijah5399"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaException(\"Oops! Something went wrong.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"Elijah5399"},"content":" entry +\u003d System.lineSeparator();","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"Elijah5399"},"content":" fw.write(entry);","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"Elijah5399"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Elijah5399":149}},{"path":"src/main/java/alyssa/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" * Task represents a task created by a user. It can be either","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":" * done or undone.","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" private String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" * Constructor method for alyssa.Task.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" * @param description A brief description of the task.","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" * Returns the status icon corresponding to whether this task is done.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" * @return \"X\" if the task is done, and a whitespace otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" * Marks this task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" * Marks this task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Elijah5399"},"content":" * Returns the description of this task.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Elijah5399"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"Elijah5399"},"content":" return this.description;","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"Elijah5399"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"Elijah5399"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"Elijah5399"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Elijah5399":52}},{"path":"src/main/java/alyssa/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"import alyssa.Exceptions.AlyssaArgumentException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" * This class supports Alyssa by encapsulating the current tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" private static final String line \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" private List\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" * Constructor method for TaskList if an existing List of Tasks is present.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" * @param taskList The existing List of Tasks to be used.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" public TaskList(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" * Constructor method for TaskList. This TaskList is instantiated with no existing tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" protected String listTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" int counter \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" String response \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" response +\u003d counter + \".\" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" counter++;","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" return response;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":" * Marks a provided task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":" * @param rest The number of the task to be marked, given as a String.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Elijah5399"},"content":" * @throws AlyssaArgumentException AlyssaArgumentException is thrown if the task number is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Elijah5399"},"content":" * @throws NumberFormatException NumberFormatException is thrown if the provided String is not an int.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Elijah5399"},"content":" protected String markTask(String rest) throws AlyssaArgumentException, NumberFormatException {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Elijah5399"},"content":" int index \u003d Integer.valueOf(rest); //this could throw a NumberFormatException if rest is not a number","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Elijah5399"},"content":" if (index \u003c 1 || index \u003e taskList.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Invalid task number\");","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Elijah5399"},"content":" Task task \u003d taskList.get(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Elijah5399"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Elijah5399"},"content":" String output \u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Elijah5399"},"content":" output +\u003d task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Elijah5399"},"content":" return output;","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Elijah5399"},"content":" * Marks a provided task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Elijah5399"},"content":" * @param rest The number of the task to be unmarked, given as a String.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Elijah5399"},"content":" * @throws AlyssaArgumentException AlyssaArgumentException is thrown if the task number is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Elijah5399"},"content":" * @throws NumberFormatException NumberFormatException is thrown if the provided String is not an int.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Elijah5399"},"content":" protected String unmarkTask(String rest) throws AlyssaArgumentException, NumberFormatException {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Elijah5399"},"content":" int index \u003d Integer.valueOf(rest); //this could throw a NumberFormatException if rest is not a number","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Elijah5399"},"content":" if (index \u003c 1 || index \u003e taskList.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Invalid task number\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Elijah5399"},"content":" Task task \u003d taskList.get(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Elijah5399"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Elijah5399"},"content":" String output \u003d \"OK, I\u0027ve marked this task as not done yet:\";","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"Elijah5399"},"content":" return output + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Elijah5399"},"content":" * Adds a given todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Elijah5399"},"content":" * @param desc Description of the todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Elijah5399"},"content":" * @throws AlyssaArgumentException AlyssaArgumentException is thrown if the description is empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Elijah5399"},"content":" protected String addTodo(String desc) throws AlyssaArgumentException {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"Elijah5399"},"content":" if (desc.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Please specify a description for the todo.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Elijah5399"},"content":" Task newTodo \u003d new Todo(desc);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Elijah5399"},"content":" taskList.add(newTodo);","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Elijah5399"},"content":" String output \u003d \"Got it. I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"Elijah5399"},"content":" output +\u003d newTodo.toString() + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"Elijah5399"},"content":" output +\u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"Elijah5399"},"content":" return output;","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Elijah5399"},"content":" * Adds a given deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Elijah5399"},"content":" * @param rest Details of the deadline, provided as a String.","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Elijah5399"},"content":" * @throws AlyssaArgumentException AlyssaArgumentException is thrown if the String given is not of the correct format.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Elijah5399"},"content":" protected String addDeadline(String rest) throws AlyssaArgumentException {","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"Elijah5399"},"content":" String[] parsed \u003d rest.split(\" /by \");","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Elijah5399"},"content":" if (parsed.length \u003c 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Incorrect deadline syntax. Syntax: deadline desc /by date\");","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Elijah5399"},"content":" String desc \u003d parsed[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Elijah5399"},"content":" String by \u003d parsed[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Elijah5399"},"content":" Task newDeadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Elijah5399"},"content":" newDeadline \u003d new Deadline(desc, LocalDate.parse(by));","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Elijah5399"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Invalid by. Syntax: yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Elijah5399"},"content":" taskList.add(newDeadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Elijah5399"},"content":" String output \u003d \"Got it. I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"Elijah5399"},"content":" output +\u003d newDeadline.toString() + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"Elijah5399"},"content":" output +\u003d \"Now you have \" + taskList.size() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"Elijah5399"},"content":" return output;","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Elijah5399"},"content":" * Adds an event to the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Elijah5399"},"content":" * @param rest Details of the event, in the form of a String.","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Elijah5399"},"content":" * @throws AlyssaArgumentException AlyssaArgumentException is thrown if the String given is not of the correct format.","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Elijah5399"},"content":" protected String addEvent(String rest) throws AlyssaArgumentException {","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"Elijah5399"},"content":" String[] parsed \u003d rest.split(\" /from | /to \");","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Elijah5399"},"content":" if (parsed.length \u003c 3) {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Incorrect event syntax. Syntax: event desc /from date /to date\");","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Elijah5399"},"content":" String desc \u003d parsed[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Elijah5399"},"content":" String from \u003d parsed[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Elijah5399"},"content":" String to \u003d parsed[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Elijah5399"},"content":" Task newEvent \u003d new Event(desc, from, to);","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Elijah5399"},"content":" taskList.add(newEvent);","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"Elijah5399"},"content":" String output \u003d \"Got it. I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"Elijah5399"},"content":" output +\u003d newEvent.toString() + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"Elijah5399"},"content":" output +\u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"Elijah5399"},"content":" return output;","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Elijah5399"},"content":" * Deletes a task in the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Elijah5399"},"content":" * @param rest Position of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Elijah5399"},"content":" * @throws AlyssaArgumentException AlyssaArgumentException is thrown if the task number is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"Elijah5399"},"content":" * @throws NumberFormatException NumberFormatException is thrown if rest is not an int.","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"Elijah5399"},"content":" protected String deleteTask(String rest) throws AlyssaArgumentException, NumberFormatException {","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"Elijah5399"},"content":" int index \u003d Integer.valueOf(rest); //this could throw a NumberFormatException if rest is not a number","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"Elijah5399"},"content":" if (index \u003c 1 || index \u003e taskList.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"Elijah5399"},"content":" throw new AlyssaArgumentException(\"Invalid task number\");","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"Elijah5399"},"content":" Task toDelete \u003d taskList.get(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"Elijah5399"},"content":" String output \u003d \"Noted. I\u0027ve removed this task:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"Elijah5399"},"content":" output +\u003d toDelete.toString() + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"Elijah5399"},"content":" taskList.remove(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"Elijah5399"},"content":" output +\u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"Elijah5399"},"content":" return output;","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"Elijah5399"},"content":" * Returns the encapsulated task list as a List\u003cTask\u003e.","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"Elijah5399"},"content":" public List\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"Elijah5399"},"content":" return this.taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"Elijah5399"},"content":" protected String printRelevantTasks(String searchKey) {","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"Elijah5399"},"content":" List\u003cString\u003e toPrint \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"Elijah5399"},"content":" for (int i \u003d 0; i \u003c this.taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"Elijah5399"},"content":" Task task \u003d this.taskList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"Elijah5399"},"content":" if (task.getDescription().contains(searchKey)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"Elijah5399"},"content":" toPrint.add((i + 1) + \".\" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"Elijah5399"},"content":" String output \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"Elijah5399"},"content":" for (String relevantTask : toPrint) {","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"Elijah5399"},"content":" output +\u003d relevantTask + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"Elijah5399"},"content":" return output;","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Elijah5399":175}},{"path":"src/main/java/alyssa/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":" * A Todo is a task without a date/time attached to it.","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":" * Constructor method for Todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" * @param description Description of the Todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Elijah5399":17}},{"path":"src/main/java/alyssa/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":" * This class helps Alyssa interact with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":" private static final String LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":" private static final String LOGO \u003d \" ___ __ __ __ ____ ____ ___\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" + \"| | | | \\\\ \\\\ / / | __| | __| | |\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" + \"| | | | \\\\ / \\\\ \\\\ \\\\ \\\\ | |\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" + \"|___| | | | | \\\\ \\\\ \\\\ \\\\ |___|\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" + \"| | | |___ | | _\\\\ \\\\ _\\\\ \\\\ | |\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" + \"| | |_____| |_| |____| |____| | |\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" * Sends a greeting message via System.out.println.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" protected String getGreeting() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" String output \u003d \"Hello! I\u0027m Alyssa!\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" output +\u003d \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" return output;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" * Returns a goodbye message.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" protected String goodbye() {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" return \"Bye. Hope to see you again soon! Subsequent messages entered will cause the program to close.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":" * Returns an error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" protected String invalidTaskResponse() {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" return \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" * Prints any message, surrounded by lines, via System.out.println.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":" protected void printWithLines(String output) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":" System.out.println(output);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Elijah5399":43}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"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-05"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"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":12,"author":{"gitId":"Elijah5399"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Elijah5399":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"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\"alyssa.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"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-05"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"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-05"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"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-05"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Elijah5399":19}},{"path":"src/test/java/alyssa/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" * This class tests the method(s) in the Deadline class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":" * Tests if getBy works correctly. eg 2023-08-30 is stored as LocalDate, and shown as Aug 30 2023.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" public void getBy_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" Deadline deadline \u003d new Deadline(\"Finish CS2103T iP\", LocalDate.parse(\"2023-08-30\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" assertEquals(\"Aug 30 2023\", deadline.getBy());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Elijah5399":22}},{"path":"src/test/java/alyssa/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"package alyssa;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"import alyssa.Exceptions.AlyssaArgumentException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Elijah5399"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Elijah5399"},"content":" * Here we test if the markTask function in TaskList is working as expected.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Elijah5399"},"content":" * We ensure that it throws the correct exception when the deadline has missing","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Elijah5399"},"content":" * /by or incorrectly formatted /by, and that it works correctly with proper","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Elijah5399"},"content":" * deadlines.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Elijah5399"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Elijah5399"},"content":" * Verifies that adding a deadline with no /by field produces the correct Exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Elijah5399"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Elijah5399"},"content":" public void addDeadline_invalidRest_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Elijah5399"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Elijah5399"},"content":" taskList.addDeadline(\"read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Elijah5399"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Elijah5399"},"content":" assertEquals(\"Incorrect deadline syntax. Syntax: deadline desc /by date\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Elijah5399"},"content":" * Verifies that adding a deadline with a wrongly formatted /by field produces the correct Exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Elijah5399"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Elijah5399"},"content":" public void addDeadline_invalidBy_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Elijah5399"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Elijah5399"},"content":" taskList.addDeadline(\"read book /by tmr\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Elijah5399"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Elijah5399"},"content":" } catch (AlyssaArgumentException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Elijah5399"},"content":" assertEquals(\"Invalid by. Syntax: yyyy-mm-dd\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Elijah5399"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Elijah5399"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Elijah5399"},"content":" * Verifies that adding a deadline with the correct syntax works as expected.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Elijah5399"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Elijah5399"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Elijah5399"},"content":" public void addDeadline_validSyntax_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Elijah5399"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Elijah5399"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Elijah5399"},"content":" taskList.addDeadline(\"read book /by 2023-12-01\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Elijah5399"},"content":" assertEquals(1, taskList.getTaskList().size());","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Elijah5399"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Elijah5399"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Elijah5399"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Elijah5399"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Elijah5399":58}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Elijah5399"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"Elijah5399"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"Elijah5399"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"Elijah5399"},"content":"deadline return book /by 2030-06-23","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Elijah5399"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"Elijah5399"},"content":"delete 2","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"Elijah5399"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Elijah5399":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":"Elijah5399"},"content":"java -classpath ..\\bin Alyssa \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-20"},{"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":{"-":20,"Elijah5399":1}},{"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":"Elijah5399"},"content":"if ! javac -cp ../src/main/java/alyssa -Xlint:none -d ../bin ../src/main/java/alyssa/*.java ../src/main/java/alyssa/Exceptions/*.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":"Elijah5399"},"content":"java -classpath ../bin Alyssa \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-21"},{"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":"Elijah5399"},"content":"diff -u ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-21"},{"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":{"-":35,"Elijah5399":3}}] diff --git a/Elijah5399_ip_master/commits.json b/Elijah5399_ip_master/commits.json index c3ef0b2f..ce0c0936 100644 --- a/Elijah5399_ip_master/commits.json +++ b/Elijah5399_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Elijah5399":[{"date":"2023-08-20","commitResults":[{"hash":"d0c1e1bbadd6536eb0e0a576c983792628802fe7","isMergeCommit":false,"messageTitle":"Added new logo and initial messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"49e424844890a9437f106866e2f86d2b6c476296","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":6}}},{"hash":"f7201020fccd08e3d144342281b607b9f7dc7b10","isMergeCommit":false,"messageTitle":"Level-2 completed","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"f20c76edee4b15133c79d6d333e15ad56ed006a4","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":44},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"eaae0e80ea3b8422e499de26c0b7e33f3808335c","isMergeCommit":false,"messageTitle":"Added todos, events and deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":2}}}]},{"date":"2023-08-21","commitResults":[{"hash":"66444af5889afb29551a82aacb541d25132c2ca8","isMergeCommit":false,"messageTitle":"Added automated text UI testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"sh":{"insertions":2,"deletions":2}}},{"hash":"508850a3975c864618ca4e8e2e91fe073afd34bd","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":10}}},{"hash":"de0c59246e842dc0bb2cc70eb40de9371dcf7cce","isMergeCommit":false,"messageTitle":"Completed level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":18,"deletions":2}}}]},{"date":"2023-08-22","commitResults":[{"hash":"599c35f1fb03e6318462a513e6bf3f9f602e4dfc","isMergeCommit":false,"messageTitle":"Added enums and organised main function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"f0d4c61ab2378ba0b973a144db80683afb3bfa2a","isMergeCommit":false,"messageTitle":"Organised code","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":190,"deletions":101}}},{"hash":"7554d93b7340132b48c3a24c438e915727afa37e","isMergeCommit":false,"messageTitle":"Added custom exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":54}}}]},{"date":"2023-08-29","commitResults":[{"hash":"6a50793e156e325bfebf616a554e70e25a761e8d","isMergeCommit":false,"messageTitle":"Add hard disk saving and loading functionality to Alyssa","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":76}}},{"hash":"9744c4c11dad1eed9cae58f1969ebfc6e8ca5515","isMergeCommit":false,"messageTitle":"Fix bugs in saving and loading file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"a112096e7fb54c728aa92d858afd8f491db4668c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"123aabc14b14292444dbba1824a67be5222ed6ba","isMergeCommit":false,"messageTitle":"Implemented Date recognition for deadlines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":7}}},{"hash":"541470bf750772c1686797770f83d6001b8fe4a6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"989d7575919a1e7c1d2d2c18635a95feb6658120","isMergeCommit":false,"messageTitle":"Organise code into various files","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":348,"deletions":279}}},{"hash":"eca3adced56ee162de1ba285e8ebd8b12e975bdc","isMergeCommit":false,"messageTitle":"Make source code part of the alyssa package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"e14459e3f56df6bb3014e06af604f51058d53530","isMergeCommit":false,"messageTitle":"Add /alyssa inside /java","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":17}}}]},{"date":"2023-08-30","commitResults":[{"hash":"1206fd5b113e917f5e4357ee7796f669bf9d1135","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"4123d3d6a2107f52f218cc070f859fff52625cbe","isMergeCommit":false,"messageTitle":"Add tests for methods in TaskList and Deadline","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":0}}},{"hash":"46d10658045073f902da94467c5f3e95b52cffbb","isMergeCommit":false,"messageTitle":"Modify build.gradle to produce jar files correctly","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"fc063e59fa1f915f82fb1f0baf4aee3dd3e82066","isMergeCommit":false,"messageTitle":"Add a few JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":22}}},{"hash":"7bc0b483687d036d372c40a924c528bf23975bfc","isMergeCommit":false,"messageTitle":"Implement level 9 - finding of tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":31}}},{"hash":"3de702b71eb440aab5847863530336f8825a573c","isMergeCommit":true,"messageTitle":"Merge with branch level 9","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Elijah5399":{"java":814,"md":2,"fxml":0,"sh":3,"bat":1,"gradle":2,"txt":7}},"authorContributionVariance":{"Elijah5399":80763.17},"authorDisplayNameMap":{"Elijah5399":"CS2103T-W16-4 CHIA..IJAH"}} +{"authorDailyContributionsMap":{"Elijah5399":[{"date":"2023-08-20","commitResults":[{"hash":"d0c1e1bbadd6536eb0e0a576c983792628802fe7","isMergeCommit":false,"messageTitle":"Added new logo and initial messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"49e424844890a9437f106866e2f86d2b6c476296","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":6}}},{"hash":"f7201020fccd08e3d144342281b607b9f7dc7b10","isMergeCommit":false,"messageTitle":"Level-2 completed","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"f20c76edee4b15133c79d6d333e15ad56ed006a4","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":44},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"eaae0e80ea3b8422e499de26c0b7e33f3808335c","isMergeCommit":false,"messageTitle":"Added todos, events and deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":2}}}]},{"date":"2023-08-21","commitResults":[{"hash":"66444af5889afb29551a82aacb541d25132c2ca8","isMergeCommit":false,"messageTitle":"Added automated text UI testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"sh":{"insertions":2,"deletions":2}}},{"hash":"508850a3975c864618ca4e8e2e91fe073afd34bd","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":10}}},{"hash":"de0c59246e842dc0bb2cc70eb40de9371dcf7cce","isMergeCommit":false,"messageTitle":"Completed level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":18,"deletions":2}}}]},{"date":"2023-08-22","commitResults":[{"hash":"599c35f1fb03e6318462a513e6bf3f9f602e4dfc","isMergeCommit":false,"messageTitle":"Added enums and organised main function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"f0d4c61ab2378ba0b973a144db80683afb3bfa2a","isMergeCommit":false,"messageTitle":"Organised code","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":190,"deletions":101}}},{"hash":"7554d93b7340132b48c3a24c438e915727afa37e","isMergeCommit":false,"messageTitle":"Added custom exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":54}}}]},{"date":"2023-08-29","commitResults":[{"hash":"6a50793e156e325bfebf616a554e70e25a761e8d","isMergeCommit":false,"messageTitle":"Add hard disk saving and loading functionality to Alyssa","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":76}}},{"hash":"9744c4c11dad1eed9cae58f1969ebfc6e8ca5515","isMergeCommit":false,"messageTitle":"Fix bugs in saving and loading file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"a112096e7fb54c728aa92d858afd8f491db4668c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"123aabc14b14292444dbba1824a67be5222ed6ba","isMergeCommit":false,"messageTitle":"Implemented Date recognition for deadlines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":7}}},{"hash":"541470bf750772c1686797770f83d6001b8fe4a6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"989d7575919a1e7c1d2d2c18635a95feb6658120","isMergeCommit":false,"messageTitle":"Organise code into various files","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":348,"deletions":279}}},{"hash":"eca3adced56ee162de1ba285e8ebd8b12e975bdc","isMergeCommit":false,"messageTitle":"Make source code part of the alyssa package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"e14459e3f56df6bb3014e06af604f51058d53530","isMergeCommit":false,"messageTitle":"Add /alyssa inside /java","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":17}}}]},{"date":"2023-08-30","commitResults":[{"hash":"1206fd5b113e917f5e4357ee7796f669bf9d1135","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"4123d3d6a2107f52f218cc070f859fff52625cbe","isMergeCommit":false,"messageTitle":"Add tests for methods in TaskList and Deadline","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":0}}},{"hash":"46d10658045073f902da94467c5f3e95b52cffbb","isMergeCommit":false,"messageTitle":"Modify build.gradle to produce jar files correctly","messageBody":"","tags":["A-Jar","A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"fc063e59fa1f915f82fb1f0baf4aee3dd3e82066","isMergeCommit":false,"messageTitle":"Add a few JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":22}}},{"hash":"7bc0b483687d036d372c40a924c528bf23975bfc","isMergeCommit":false,"messageTitle":"Implement level 9 - finding of tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":31}}},{"hash":"3de702b71eb440aab5847863530336f8825a573c","isMergeCommit":true,"messageTitle":"Merge with branch level 9","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"a7013cbf99085af497e8b536f2791b955f7028da","isMergeCommit":false,"messageTitle":"Change constant variable names","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":12}}},{"hash":"5ca8a7200b1655e8bebb7ece840ca08b6a9cb6e3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Javadoc\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"7437352bcca7b0f205d23900450f2d7cb69a1849","isMergeCommit":false,"messageTitle":"Add GUI support","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":20,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":277,"deletions":132}}}]}]},"authorFileTypeContributionMap":{"Elijah5399":{"java":967,"md":2,"fxml":35,"sh":3,"bat":1,"gradle":21,"txt":7}},"authorContributionVariance":{"Elijah5399":66004.35},"authorDisplayNameMap":{"Elijah5399":"CS2103T-W16-4 CHIA..IJAH"}} diff --git a/Fallman2_ip_master/authorship.json b/Fallman2_ip_master/authorship.json index 7f71af3c..ccdf48f2 100644 --- a/Fallman2_ip_master/authorship.json +++ b/Fallman2_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":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-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":"Fallman2"},"content":" archiveBaseName \u003d \"puke\"","lastModifiedDate":"2023-08-31"},{"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":"Fallman2"},"content":" mainClassName \u003d \"puke.Main\"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Fallman2":2,"-":41}},{"path":"src/main/java/puke/Puke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"public class Puke {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" public Puke() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" tasks \u003d new TaskList(DataHandler.loadDatabase());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" new File(\"ListData.txt\").createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" ui.startup();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" String command \u003d ui.command();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" String input \u003d ui.input();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" ui.line();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" Command next;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" next \u003d Parser.parse(command, input);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" next \u003d new ErrorCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" next.execute(tasks, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" isExit \u003d next.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" new Puke().run();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":"class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" protected String tag;","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" protected boolean done;","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" protected Task(String tag, String description) throws PukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" if (tag.isEmpty() || description.isEmpty()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Fallman2"},"content":" * Marks a task as done","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Fallman2"},"content":" public void mark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"Fallman2"},"content":" this.done \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":67,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Fallman2"},"content":" * Marks a task as undone","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Fallman2"},"content":" public void unmark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"Fallman2"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"Fallman2"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Fallman2"},"content":" return description;","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the task that can be stored and read later when the program is initiated again.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Fallman2"},"content":" public String write() {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Fallman2"},"content":" int checked \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Fallman2"},"content":" if (this.done) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Fallman2"},"content":" checked \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Fallman2"},"content":" return String.format(\"%s/%d/%s\", this.tag, checked , this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation to be displayed in the to do list.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":99,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":100,"author":{"gitId":"Fallman2"},"content":" String status \u003d \"[ ]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":101,"author":{"gitId":"Fallman2"},"content":" if (done) {","lastModifiedDate":"2023-08-22"},{"lineNumber":102,"author":{"gitId":"Fallman2"},"content":" status \u003d \"[X]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":104,"author":{"gitId":"Fallman2"},"content":" return String.format(\"%s%s %s\", this.tag, status, this.description);","lastModifiedDate":"2023-08-22"},{"lineNumber":105,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":106,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":107,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":108,"author":{"gitId":"Fallman2"},"content":"class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":109,"author":{"gitId":"Fallman2"},"content":" private final static String tag \u003d \"[T]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":111,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Fallman2"},"content":" * Creates a Task with no set deadline or time period.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Fallman2"},"content":" * @param desc The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is used.","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Fallman2"},"content":" public ToDo(String desc) throws PukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":118,"author":{"gitId":"Fallman2"},"content":" super(tag, desc);","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":120,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":121,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":122,"author":{"gitId":"Fallman2"},"content":"class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":123,"author":{"gitId":"Fallman2"},"content":" private final static String tag \u003d \"[D]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":124,"author":{"gitId":"Fallman2"},"content":" private final LocalDateTime date;","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":126,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Fallman2"},"content":" * Creates a Task with a set deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"Fallman2"},"content":" * @param all All strings from the remainder of the input after being split","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is used.","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"Fallman2"},"content":" public Deadline(String[] all) throws PukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":133,"author":{"gitId":"Fallman2"},"content":" super(tag, all[0]);","lastModifiedDate":"2023-08-22"},{"lineNumber":134,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Fallman2"},"content":" this.date \u003d LocalDateTime.parse(all[1].split(\"by \")[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Fallman2"},"content":" } catch (Exception DateTimeParseException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-22"},{"lineNumber":138,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":139,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":140,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":141,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"Fallman2"},"content":" * Creates a Deadline Task using input from the ListData.txt file.","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"Fallman2"},"content":" * @param desc The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"Fallman2"},"content":" * @param date The date of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"Fallman2"},"content":" * @return The Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is detected e.g. the file is corrupted.","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"Fallman2"},"content":" public static Deadline construct(String desc, String date) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"Fallman2"},"content":" String[] container \u003d new String[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"Fallman2"},"content":" container[0] \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"Fallman2"},"content":" container[1] \u003d \"by \" + date;","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"Fallman2"},"content":" return new Deadline(container);","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is stored in the ListData.txt file.","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"Fallman2"},"content":" public String write() {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"Fallman2"},"content":" return super.write() + \"/\" + this.date;","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is used for Displaying in the to do list.","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"Fallman2"},"content":" * @return a String representation","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":172,"author":{"gitId":"Fallman2"},"content":" return super.toString() + \" (by: \" + this.date + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":173,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":174,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":175,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":176,"author":{"gitId":"Fallman2"},"content":"class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":177,"author":{"gitId":"Fallman2"},"content":" private static final String tag \u003d \"[E]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":178,"author":{"gitId":"Fallman2"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"Fallman2"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":181,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"Fallman2"},"content":" * Creates a task with a start and end time","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"Fallman2"},"content":" * @param all All Strings from the remainder of the input line after the command string.","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is used.","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"Fallman2"},"content":" public Event(String[] all) throws PukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":188,"author":{"gitId":"Fallman2"},"content":" super(tag, all[0]);","lastModifiedDate":"2023-08-22"},{"lineNumber":189,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"Fallman2"},"content":" this.from \u003d LocalDateTime.parse(all[1].split(\"from \")[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"Fallman2"},"content":" this.to \u003d LocalDateTime.parse(all[2].split(\"to \")[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"Fallman2"},"content":" } catch (Exception DateTimeParseException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"Fallman2"},"content":" System.out.println(all[1].split(\"from \")[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-22"},{"lineNumber":195,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":196,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":197,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":198,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"Fallman2"},"content":" * Creates an Event task using data stored in the ListData.txt file.","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"Fallman2"},"content":" * @param desc Description of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"Fallman2"},"content":" * @param from Start date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"Fallman2"},"content":" * @param to Ending date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"Fallman2"},"content":" * @return The Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is detected e.g. the file is corrupted.","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"Fallman2"},"content":" public static Event construct(String desc, String from, String to) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"Fallman2"},"content":" String[] container \u003d new String[3];","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"Fallman2"},"content":" container[0] \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"Fallman2"},"content":" container[1] \u003d \"from \" + from;","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"Fallman2"},"content":" container[2] \u003d \"to \" + to;","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"Fallman2"},"content":" return new Event(container);","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is stored in the ListData.txt file.","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"Fallman2"},"content":" public String write() {","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"Fallman2"},"content":" return super.write() + \"/\" + this.from + \"/\" + this.to;","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is used for Displaying in the to do list.","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":231,"author":{"gitId":"Fallman2"},"content":" return super.toString() + \" (from: \" + this.from + \" \" +","lastModifiedDate":"2023-08-22"},{"lineNumber":232,"author":{"gitId":"Fallman2"},"content":" \"to: \" + this.to + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":233,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":234,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":235,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":236,"author":{"gitId":"Fallman2"},"content":"class PukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":237,"author":{"gitId":"Fallman2"},"content":" public PukeException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":238,"author":{"gitId":"Fallman2"},"content":" super(\"Unfortunately, the circumstances preceding this has necessitated that I issue and apology for the input that I have received is unrecognised.\");","lastModifiedDate":"2023-08-22"},{"lineNumber":239,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":240,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":241,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"Fallman2"},"content":"class DataHandler {","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"Fallman2"},"content":" * Interprets a line from the ListData.txt file used to store events.","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"Fallman2"},"content":" * @param input a line from the file","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"Fallman2"},"content":" * @return a corresponding task.","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an invalid task is detected.","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"Fallman2"},"content":" public static Task translate(String input) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"Fallman2"},"content":" String[] split \u003d input.split(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"Fallman2"},"content":" Task output;","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"Fallman2"},"content":" if (split[0].equals(\"[T]\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"Fallman2"},"content":" output \u003d new ToDo(split[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"Fallman2"},"content":" } else if (split[0].equals(\"[D]\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"Fallman2"},"content":" output \u003d Deadline.construct(split[2], split[3]);","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"Fallman2"},"content":" } else if (split[0].equals(\"[E]\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"Fallman2"},"content":" output \u003d Event.construct(split[2], split[3], split[4]);","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"Fallman2"},"content":" if (split[1].equals(\"0\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"Fallman2"},"content":" output.unmark();","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"Fallman2"},"content":" } else if (split[1].equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"Fallman2"},"content":" output.mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":272,"author":{"gitId":"Fallman2"},"content":" return output;","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":276,"author":{"gitId":"Fallman2"},"content":" * Updates the ListData.txt file with the latest list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":277,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":278,"author":{"gitId":"Fallman2"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":279,"author":{"gitId":"Fallman2"},"content":" * @throws IOException If an error occurs with the file writer.","lastModifiedDate":"2023-08-31"},{"lineNumber":280,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":281,"author":{"gitId":"Fallman2"},"content":" public static void writeToDatabase(TaskList taskList) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"Fallman2"},"content":" FileWriter fw \u003d new FileWriter(\"ListData.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"Fallman2"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"Fallman2"},"content":" for (Task item:taskList.getList()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"Fallman2"},"content":" output.append(item.write()).append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"Fallman2"},"content":" fw.write(output.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":288,"author":{"gitId":"Fallman2"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":289,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":290,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":291,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":292,"author":{"gitId":"Fallman2"},"content":" * Loads the events stored in the ListData.txt file when the program is run.","lastModifiedDate":"2023-08-31"},{"lineNumber":293,"author":{"gitId":"Fallman2"},"content":" * If an invalid line is detected, it is skipped.","lastModifiedDate":"2023-08-31"},{"lineNumber":294,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":295,"author":{"gitId":"Fallman2"},"content":" * @return The Task List","lastModifiedDate":"2023-08-31"},{"lineNumber":296,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the file is not found.","lastModifiedDate":"2023-08-31"},{"lineNumber":297,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":298,"author":{"gitId":"Fallman2"},"content":" public static ArrayList\u003cTask\u003e loadDatabase() throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":299,"author":{"gitId":"Fallman2"},"content":" Scanner sc;","lastModifiedDate":"2023-08-30"},{"lineNumber":300,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":301,"author":{"gitId":"Fallman2"},"content":" sc \u003d new Scanner(new File(\"ListData.txt\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":302,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":303,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":304,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":305,"author":{"gitId":"Fallman2"},"content":" ArrayList\u003cTask\u003e output \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":306,"author":{"gitId":"Fallman2"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":307,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":308,"author":{"gitId":"Fallman2"},"content":" output.add(DataHandler.translate(sc.nextLine()));","lastModifiedDate":"2023-08-30"},{"lineNumber":309,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":310,"author":{"gitId":"Fallman2"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":311,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":312,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":313,"author":{"gitId":"Fallman2"},"content":" return output;","lastModifiedDate":"2023-08-30"},{"lineNumber":314,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":315,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":316,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":317,"author":{"gitId":"Fallman2"},"content":" * Clears all stored tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":318,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":319,"author":{"gitId":"Fallman2"},"content":" * @throws IOException If an error occurs with the FileWriter.","lastModifiedDate":"2023-08-31"},{"lineNumber":320,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":321,"author":{"gitId":"Fallman2"},"content":" public static void clearAll() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":322,"author":{"gitId":"Fallman2"},"content":" FileWriter fw \u003d new FileWriter(\"ListData.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":323,"author":{"gitId":"Fallman2"},"content":" fw.write(\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":324,"author":{"gitId":"Fallman2"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":325,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":326,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":327,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":328,"author":{"gitId":"Fallman2"},"content":"class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":329,"author":{"gitId":"Fallman2"},"content":" private final ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-31"},{"lineNumber":330,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":331,"author":{"gitId":"Fallman2"},"content":" TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":332,"author":{"gitId":"Fallman2"},"content":" this.list \u003d new ArrayList\u003cTask\u003e(100);","lastModifiedDate":"2023-08-30"},{"lineNumber":333,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":334,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":335,"author":{"gitId":"Fallman2"},"content":" TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":336,"author":{"gitId":"Fallman2"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-30"},{"lineNumber":337,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":338,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":339,"author":{"gitId":"Fallman2"},"content":" String printOut() {","lastModifiedDate":"2023-08-30"},{"lineNumber":340,"author":{"gitId":"Fallman2"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":341,"author":{"gitId":"Fallman2"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":342,"author":{"gitId":"Fallman2"},"content":" for (Task s : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":343,"author":{"gitId":"Fallman2"},"content":" sb.append(String.format(\"%d. %s\\n\", i, s.toString()));","lastModifiedDate":"2023-08-30"},{"lineNumber":344,"author":{"gitId":"Fallman2"},"content":" i++;","lastModifiedDate":"2023-08-30"},{"lineNumber":345,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":346,"author":{"gitId":"Fallman2"},"content":" return sb.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":347,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":348,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":349,"author":{"gitId":"Fallman2"},"content":" Task get(int index) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":350,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":351,"author":{"gitId":"Fallman2"},"content":" return list.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":352,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":353,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":354,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":355,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":356,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":357,"author":{"gitId":"Fallman2"},"content":" ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":358,"author":{"gitId":"Fallman2"},"content":" return this.list;","lastModifiedDate":"2023-08-30"},{"lineNumber":359,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":360,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":361,"author":{"gitId":"Fallman2"},"content":" void add(Task t) {","lastModifiedDate":"2023-08-30"},{"lineNumber":362,"author":{"gitId":"Fallman2"},"content":" this.list.add(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":363,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":364,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":365,"author":{"gitId":"Fallman2"},"content":" Task delete(int index) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":366,"author":{"gitId":"Fallman2"},"content":" Task hold;","lastModifiedDate":"2023-08-30"},{"lineNumber":367,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":368,"author":{"gitId":"Fallman2"},"content":" hold \u003d list.get(index - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":369,"author":{"gitId":"Fallman2"},"content":" list.remove(index - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":370,"author":{"gitId":"Fallman2"},"content":" return hold;","lastModifiedDate":"2023-08-30"},{"lineNumber":371,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":372,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":373,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":374,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":375,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":376,"author":{"gitId":"Fallman2"},"content":" String find(String key) {","lastModifiedDate":"2023-08-31"},{"lineNumber":377,"author":{"gitId":"Fallman2"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":378,"author":{"gitId":"Fallman2"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":379,"author":{"gitId":"Fallman2"},"content":" for (Task s : list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":380,"author":{"gitId":"Fallman2"},"content":" if (s.getDescription().contains(key)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":381,"author":{"gitId":"Fallman2"},"content":" sb.append(String.format(\"%d. %s\\n\", i, s.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":382,"author":{"gitId":"Fallman2"},"content":" i++;","lastModifiedDate":"2023-08-31"},{"lineNumber":383,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":384,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":385,"author":{"gitId":"Fallman2"},"content":" return sb.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":386,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":387,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":388,"author":{"gitId":"Fallman2"},"content":" void mark(int index) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":389,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":390,"author":{"gitId":"Fallman2"},"content":" list.get(index - 1).mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":391,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":392,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":393,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":394,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":395,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":396,"author":{"gitId":"Fallman2"},"content":" void unmark(int index) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":397,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":398,"author":{"gitId":"Fallman2"},"content":" list.get(index - 1).unmark();","lastModifiedDate":"2023-08-30"},{"lineNumber":399,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":400,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":401,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":402,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":403,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":404,"author":{"gitId":"Fallman2"},"content":" int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":405,"author":{"gitId":"Fallman2"},"content":" return list.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":406,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":407,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":408,"author":{"gitId":"Fallman2"},"content":" void clear() {","lastModifiedDate":"2023-08-30"},{"lineNumber":409,"author":{"gitId":"Fallman2"},"content":" this.list.clear();","lastModifiedDate":"2023-08-30"},{"lineNumber":410,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":411,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":412,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":413,"author":{"gitId":"Fallman2"},"content":"abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":414,"author":{"gitId":"Fallman2"},"content":" private final boolean exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":415,"author":{"gitId":"Fallman2"},"content":" protected boolean isValid;","lastModifiedDate":"2023-08-31"},{"lineNumber":416,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":417,"author":{"gitId":"Fallman2"},"content":" Command(boolean exit, boolean valid) {","lastModifiedDate":"2023-08-30"},{"lineNumber":418,"author":{"gitId":"Fallman2"},"content":" this.exit \u003d exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":419,"author":{"gitId":"Fallman2"},"content":" this.isValid \u003d valid;","lastModifiedDate":"2023-08-31"},{"lineNumber":420,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":421,"author":{"gitId":"Fallman2"},"content":" abstract void execute(TaskList tl, Ui ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":422,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":423,"author":{"gitId":"Fallman2"},"content":" boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":424,"author":{"gitId":"Fallman2"},"content":" return this.exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":425,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":426,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":427,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":428,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":429,"author":{"gitId":"Fallman2"},"content":"class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":430,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":431,"author":{"gitId":"Fallman2"},"content":" ExitCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":432,"author":{"gitId":"Fallman2"},"content":" super(rest.isEmpty(), rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":433,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":434,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":435,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":436,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":437,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":438,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":439,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":440,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":441,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":442,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":443,"author":{"gitId":"Fallman2"},"content":" if (!super.isValid) {","lastModifiedDate":"2023-08-31"},{"lineNumber":444,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":445,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":446,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":447,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.exit());","lastModifiedDate":"2023-08-30"},{"lineNumber":448,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":449,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":450,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":451,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":452,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object is an instance of ExitCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":453,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":454,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":455,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":456,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":457,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":458,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":459,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ExitCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":460,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":461,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":462,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":463,"author":{"gitId":"Fallman2"},"content":"class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":464,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":465,"author":{"gitId":"Fallman2"},"content":" ListCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":466,"author":{"gitId":"Fallman2"},"content":" super(false, rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":467,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":468,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":469,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":470,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":471,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":472,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":473,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":474,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":475,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":476,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":477,"author":{"gitId":"Fallman2"},"content":" if (!super.isValid) {","lastModifiedDate":"2023-08-31"},{"lineNumber":478,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":479,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":480,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":481,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.list());","lastModifiedDate":"2023-08-30"},{"lineNumber":482,"author":{"gitId":"Fallman2"},"content":" System.out.println(tl.printOut());","lastModifiedDate":"2023-08-30"},{"lineNumber":483,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":484,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":485,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":486,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":487,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":488,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object is an instance of ListCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":489,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":490,"author":{"gitId":"Fallman2"},"content":" * @param other Another object","lastModifiedDate":"2023-08-31"},{"lineNumber":491,"author":{"gitId":"Fallman2"},"content":" * @return a boolean","lastModifiedDate":"2023-08-31"},{"lineNumber":492,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":493,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":494,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":495,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ListCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":496,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":497,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":498,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":499,"author":{"gitId":"Fallman2"},"content":"class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":500,"author":{"gitId":"Fallman2"},"content":" private final int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":501,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":502,"author":{"gitId":"Fallman2"},"content":" MarkCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":503,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":504,"author":{"gitId":"Fallman2"},"content":" this.index \u003d Integer.parseInt(rest);","lastModifiedDate":"2023-08-30"},{"lineNumber":505,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":506,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":507,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":508,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":509,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format or an index is out of bounds, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":510,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":511,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":512,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":513,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":514,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":515,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":516,"author":{"gitId":"Fallman2"},"content":" tl.mark(this.index);","lastModifiedDate":"2023-08-30"},{"lineNumber":517,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.mark(this.index));","lastModifiedDate":"2023-08-30"},{"lineNumber":518,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":519,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":520,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":521,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":522,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":523,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":524,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":525,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":526,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":527,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString() and is an instance of MarkCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":528,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":529,"author":{"gitId":"Fallman2"},"content":" * @param other Another object","lastModifiedDate":"2023-08-31"},{"lineNumber":530,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":531,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":532,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":533,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":534,"author":{"gitId":"Fallman2"},"content":" return (other instanceof MarkCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":535,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":536,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":537,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":538,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the command","lastModifiedDate":"2023-08-31"},{"lineNumber":539,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":540,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":541,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":542,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":543,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":544,"author":{"gitId":"Fallman2"},"content":" return \"mark \" + this.index;","lastModifiedDate":"2023-08-31"},{"lineNumber":545,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":546,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":547,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":548,"author":{"gitId":"Fallman2"},"content":"class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":549,"author":{"gitId":"Fallman2"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":550,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":551,"author":{"gitId":"Fallman2"},"content":" UnmarkCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":552,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":553,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":554,"author":{"gitId":"Fallman2"},"content":" this.index \u003d Integer.parseInt(rest.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":555,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":556,"author":{"gitId":"Fallman2"},"content":" this.index \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":557,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":558,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":559,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":560,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":561,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":562,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format or an index is out of bounds, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":563,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":564,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":565,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":566,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":567,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":568,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":569,"author":{"gitId":"Fallman2"},"content":" tl.unmark(this.index);","lastModifiedDate":"2023-08-30"},{"lineNumber":570,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.unmark());","lastModifiedDate":"2023-08-31"},{"lineNumber":571,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":572,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":573,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":574,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":575,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":576,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":577,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":578,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":579,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":580,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString() and is an instance of UnmarkCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":581,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":582,"author":{"gitId":"Fallman2"},"content":" * @param other Another object","lastModifiedDate":"2023-08-31"},{"lineNumber":583,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":584,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":585,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":586,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":587,"author":{"gitId":"Fallman2"},"content":" return (other instanceof UnmarkCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":588,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":589,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":590,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":591,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the command","lastModifiedDate":"2023-08-31"},{"lineNumber":592,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":593,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":594,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":595,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":596,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":597,"author":{"gitId":"Fallman2"},"content":" return \"unmark \" + this.index;","lastModifiedDate":"2023-08-31"},{"lineNumber":598,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":599,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":600,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":601,"author":{"gitId":"Fallman2"},"content":"class TodoCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":602,"author":{"gitId":"Fallman2"},"content":" private final String desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":603,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":604,"author":{"gitId":"Fallman2"},"content":" TodoCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":605,"author":{"gitId":"Fallman2"},"content":" super(false, !rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":606,"author":{"gitId":"Fallman2"},"content":" this.desc \u003d rest;","lastModifiedDate":"2023-08-30"},{"lineNumber":607,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":608,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":609,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":610,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":611,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":612,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":613,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":614,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":615,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":616,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":617,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":618,"author":{"gitId":"Fallman2"},"content":" tl.add(new ToDo(this.desc));","lastModifiedDate":"2023-08-30"},{"lineNumber":619,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.toDo(tl));","lastModifiedDate":"2023-08-30"},{"lineNumber":620,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":621,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":622,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":623,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":624,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":625,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":626,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":627,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":628,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":629,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString as this command and is an instance of EventCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":630,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":631,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":632,"author":{"gitId":"Fallman2"},"content":" * @return A boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":633,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":634,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":635,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":636,"author":{"gitId":"Fallman2"},"content":" return (other instanceof TodoCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":637,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":638,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":639,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":640,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of this command.","lastModifiedDate":"2023-08-31"},{"lineNumber":641,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":642,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":643,"author":{"gitId":"Fallman2"},"content":" * @throws RuntimeException If an incorrect format is used","lastModifiedDate":"2023-08-31"},{"lineNumber":644,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":645,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":646,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":647,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":648,"author":{"gitId":"Fallman2"},"content":" return new ToDo(this.desc).toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":649,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":650,"author":{"gitId":"Fallman2"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":651,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":652,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":653,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":654,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":655,"author":{"gitId":"Fallman2"},"content":"class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":656,"author":{"gitId":"Fallman2"},"content":" private final String[] rest;","lastModifiedDate":"2023-08-30"},{"lineNumber":657,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":658,"author":{"gitId":"Fallman2"},"content":" DeadlineCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":659,"author":{"gitId":"Fallman2"},"content":" super(false, !rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":660,"author":{"gitId":"Fallman2"},"content":" this.rest \u003d rest.split(\" /\");","lastModifiedDate":"2023-08-30"},{"lineNumber":661,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":662,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":663,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":664,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":665,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":666,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":667,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":668,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":669,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":670,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":671,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":672,"author":{"gitId":"Fallman2"},"content":" tl.add(new Deadline(this.rest));","lastModifiedDate":"2023-08-30"},{"lineNumber":673,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.deadline(tl));","lastModifiedDate":"2023-08-30"},{"lineNumber":674,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":675,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":676,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":677,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":678,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":679,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":680,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":681,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":682,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":683,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString as this command and is an instance of EventCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":684,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":685,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":686,"author":{"gitId":"Fallman2"},"content":" * @return A boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":687,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":688,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":689,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":690,"author":{"gitId":"Fallman2"},"content":" return (other instanceof DeadlineCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":691,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":692,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":693,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":694,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of this command.","lastModifiedDate":"2023-08-31"},{"lineNumber":695,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":696,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":697,"author":{"gitId":"Fallman2"},"content":" * @throws RuntimeException If an incorrect format is used","lastModifiedDate":"2023-08-31"},{"lineNumber":698,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":699,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":700,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":701,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":702,"author":{"gitId":"Fallman2"},"content":" return new Deadline(this.rest).toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":703,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":704,"author":{"gitId":"Fallman2"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":705,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":706,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":707,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":708,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":709,"author":{"gitId":"Fallman2"},"content":"class EventCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":710,"author":{"gitId":"Fallman2"},"content":" private final String[] rest;","lastModifiedDate":"2023-08-30"},{"lineNumber":711,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":712,"author":{"gitId":"Fallman2"},"content":" EventCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":713,"author":{"gitId":"Fallman2"},"content":" super(false, !rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":714,"author":{"gitId":"Fallman2"},"content":" this.rest \u003d rest.split(\" /\");","lastModifiedDate":"2023-08-30"},{"lineNumber":715,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":716,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":717,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":718,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":719,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":720,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":721,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":722,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":723,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":724,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":725,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":726,"author":{"gitId":"Fallman2"},"content":" tl.add(new Event(this.rest));","lastModifiedDate":"2023-08-30"},{"lineNumber":727,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.event(tl));","lastModifiedDate":"2023-08-30"},{"lineNumber":728,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":729,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":730,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":731,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":732,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":733,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":734,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":735,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":736,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":737,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString as this command and is an instance of EventCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":738,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":739,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":740,"author":{"gitId":"Fallman2"},"content":" * @return A boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":741,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":742,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":743,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":744,"author":{"gitId":"Fallman2"},"content":" return (other instanceof EventCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":745,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":746,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":747,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":748,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of this command.","lastModifiedDate":"2023-08-31"},{"lineNumber":749,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":750,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":751,"author":{"gitId":"Fallman2"},"content":" * @throws RuntimeException If an incorrect format is used","lastModifiedDate":"2023-08-31"},{"lineNumber":752,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":753,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":754,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":755,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":756,"author":{"gitId":"Fallman2"},"content":" return new Event(this.rest).toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":757,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":758,"author":{"gitId":"Fallman2"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":759,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":760,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":761,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":762,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":763,"author":{"gitId":"Fallman2"},"content":"class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":764,"author":{"gitId":"Fallman2"},"content":" private final int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":765,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":766,"author":{"gitId":"Fallman2"},"content":" DeleteCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":767,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":768,"author":{"gitId":"Fallman2"},"content":" this.index \u003d Integer.parseInt(rest);","lastModifiedDate":"2023-08-30"},{"lineNumber":769,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":770,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":771,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":772,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":773,"author":{"gitId":"Fallman2"},"content":" * If the command is invalid due to the index being out of bounds, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":774,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":775,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":776,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":777,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":778,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":779,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":780,"author":{"gitId":"Fallman2"},"content":" Task hold \u003d tl.delete(this.index);","lastModifiedDate":"2023-08-30"},{"lineNumber":781,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.delete(hold, tl));","lastModifiedDate":"2023-08-30"},{"lineNumber":782,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":783,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":784,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":785,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":786,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":787,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":788,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":789,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":790,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":791,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString() as this one.","lastModifiedDate":"2023-08-31"},{"lineNumber":792,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":793,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":794,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":795,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":796,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":797,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":798,"author":{"gitId":"Fallman2"},"content":" return (other instanceof DeleteCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":799,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":800,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":801,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":802,"author":{"gitId":"Fallman2"},"content":" * Returns a string representing this command.","lastModifiedDate":"2023-08-31"},{"lineNumber":803,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":804,"author":{"gitId":"Fallman2"},"content":" * @return a String","lastModifiedDate":"2023-08-31"},{"lineNumber":805,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":806,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":807,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":808,"author":{"gitId":"Fallman2"},"content":" return \"delete \" + this.index;","lastModifiedDate":"2023-08-31"},{"lineNumber":809,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":810,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":811,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":812,"author":{"gitId":"Fallman2"},"content":"class ClearCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":813,"author":{"gitId":"Fallman2"},"content":" ClearCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":814,"author":{"gitId":"Fallman2"},"content":" super(false, rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":815,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":816,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":817,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":818,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":819,"author":{"gitId":"Fallman2"},"content":" * If the command is invalid, an error message is printed instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":820,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":821,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":822,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":823,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":824,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":825,"author":{"gitId":"Fallman2"},"content":" if (!super.isValid) {","lastModifiedDate":"2023-08-31"},{"lineNumber":826,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":827,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":828,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":829,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":830,"author":{"gitId":"Fallman2"},"content":" tl.clear();","lastModifiedDate":"2023-08-30"},{"lineNumber":831,"author":{"gitId":"Fallman2"},"content":" DataHandler.clearAll();","lastModifiedDate":"2023-08-30"},{"lineNumber":832,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.clear());","lastModifiedDate":"2023-08-30"},{"lineNumber":833,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":834,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":835,"author":{"gitId":"Fallman2"},"content":" tl.clear();","lastModifiedDate":"2023-08-30"},{"lineNumber":836,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.clear());","lastModifiedDate":"2023-08-30"},{"lineNumber":837,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":838,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":839,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":840,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":841,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":842,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":843,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object is an instance of ClearCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":844,"author":{"gitId":"Fallman2"},"content":" * Used in testing.","lastModifiedDate":"2023-08-31"},{"lineNumber":845,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":846,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":847,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":848,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":849,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":850,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":851,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ClearCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":852,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":853,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":854,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":855,"author":{"gitId":"Fallman2"},"content":"class ErrorCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":856,"author":{"gitId":"Fallman2"},"content":" ErrorCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":857,"author":{"gitId":"Fallman2"},"content":" super(false, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":858,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":859,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":860,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":861,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":862,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":863,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":864,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":865,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":866,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":867,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":868,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":869,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":870,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":871,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":872,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":873,"author":{"gitId":"Fallman2"},"content":" * Returns the boolean representing whether another Object is an instance of an ErrorCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":874,"author":{"gitId":"Fallman2"},"content":" * Used in testing.","lastModifiedDate":"2023-08-31"},{"lineNumber":875,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":876,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":877,"author":{"gitId":"Fallman2"},"content":" * @return boolean","lastModifiedDate":"2023-08-31"},{"lineNumber":878,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":879,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":880,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":881,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ErrorCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":882,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":883,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":884,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":885,"author":{"gitId":"Fallman2"},"content":"class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":886,"author":{"gitId":"Fallman2"},"content":" private final String key;","lastModifiedDate":"2023-08-31"},{"lineNumber":887,"author":{"gitId":"Fallman2"},"content":" FindCommand(String rest) {","lastModifiedDate":"2023-08-31"},{"lineNumber":888,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":889,"author":{"gitId":"Fallman2"},"content":" this.key \u003d rest;","lastModifiedDate":"2023-08-31"},{"lineNumber":890,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":891,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":892,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":893,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":894,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.find());","lastModifiedDate":"2023-08-31"},{"lineNumber":895,"author":{"gitId":"Fallman2"},"content":" System.out.println(tl.find(this.key));","lastModifiedDate":"2023-08-31"},{"lineNumber":896,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":897,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-31"},{"lineNumber":898,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":899,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":900,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":901,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":902,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":903,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":904,"author":{"gitId":"Fallman2"},"content":"class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":905,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":906,"author":{"gitId":"Fallman2"},"content":" * Parses the command string as input from the UI and returns its corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":907,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":908,"author":{"gitId":"Fallman2"},"content":" * @param command First token of input from the UI","lastModifiedDate":"2023-08-31"},{"lineNumber":909,"author":{"gitId":"Fallman2"},"content":" * @param line Remaining input from the UI on the same line","lastModifiedDate":"2023-08-31"},{"lineNumber":910,"author":{"gitId":"Fallman2"},"content":" * @return Corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":911,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an invalid command or line is parsed","lastModifiedDate":"2023-08-31"},{"lineNumber":912,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":913,"author":{"gitId":"Fallman2"},"content":" public static Command parse(String command, String line) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":914,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":915,"author":{"gitId":"Fallman2"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":916,"author":{"gitId":"Fallman2"},"content":" return new ExitCommand(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":917,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":918,"author":{"gitId":"Fallman2"},"content":" return new ListCommand(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":919,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":920,"author":{"gitId":"Fallman2"},"content":" return new MarkCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":921,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":922,"author":{"gitId":"Fallman2"},"content":" return new UnmarkCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":923,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":924,"author":{"gitId":"Fallman2"},"content":" return new TodoCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":925,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":926,"author":{"gitId":"Fallman2"},"content":" return new DeadlineCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":927,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":928,"author":{"gitId":"Fallman2"},"content":" return new EventCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":929,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":930,"author":{"gitId":"Fallman2"},"content":" return new DeleteCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":931,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"clearall\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":932,"author":{"gitId":"Fallman2"},"content":" return new ClearCommand(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":933,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"find\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":934,"author":{"gitId":"Fallman2"},"content":" return new FindCommand(line.substring(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":935,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":936,"author":{"gitId":"Fallman2"},"content":" return new ErrorCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":937,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":938,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":939,"author":{"gitId":"Fallman2"},"content":" return new ErrorCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":940,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":941,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":942,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":943,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":944,"author":{"gitId":"Fallman2"},"content":"class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":945,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":946,"author":{"gitId":"Fallman2"},"content":" public static String ERROR_MESSAGE \u003d \"Unfortunately, the circumstances preceding this has necessitated that I issue and apology for the input that I have received is unrecognised.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":947,"author":{"gitId":"Fallman2"},"content":" public static String SEPARATOR \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":948,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":949,"author":{"gitId":"Fallman2"},"content":" private final Scanner sc;","lastModifiedDate":"2023-08-31"},{"lineNumber":950,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":951,"author":{"gitId":"Fallman2"},"content":" Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":952,"author":{"gitId":"Fallman2"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":953,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":954,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":955,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":956,"author":{"gitId":"Fallman2"},"content":" * Returns the first token from a line of input.","lastModifiedDate":"2023-08-31"},{"lineNumber":957,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":958,"author":{"gitId":"Fallman2"},"content":" * @return Command string.","lastModifiedDate":"2023-08-31"},{"lineNumber":959,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":960,"author":{"gitId":"Fallman2"},"content":" public String command() {","lastModifiedDate":"2023-08-31"},{"lineNumber":961,"author":{"gitId":"Fallman2"},"content":" return sc.next();","lastModifiedDate":"2023-08-30"},{"lineNumber":962,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":963,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":964,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":965,"author":{"gitId":"Fallman2"},"content":" * Returns the remainder of the line of input after the command string has been removed.","lastModifiedDate":"2023-08-31"},{"lineNumber":966,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":967,"author":{"gitId":"Fallman2"},"content":" * @return Remainder of line.","lastModifiedDate":"2023-08-31"},{"lineNumber":968,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":969,"author":{"gitId":"Fallman2"},"content":" public String input() {","lastModifiedDate":"2023-08-31"},{"lineNumber":970,"author":{"gitId":"Fallman2"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":971,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":972,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":973,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":974,"author":{"gitId":"Fallman2"},"content":" * Prints the separator line.","lastModifiedDate":"2023-08-31"},{"lineNumber":975,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":976,"author":{"gitId":"Fallman2"},"content":" public void line() {","lastModifiedDate":"2023-08-31"},{"lineNumber":977,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":978,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":979,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":980,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":981,"author":{"gitId":"Fallman2"},"content":" * Prints the welcome logo and message.","lastModifiedDate":"2023-08-31"},{"lineNumber":982,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":983,"author":{"gitId":"Fallman2"},"content":" void startup() {","lastModifiedDate":"2023-08-30"},{"lineNumber":984,"author":{"gitId":"Fallman2"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":985,"author":{"gitId":"Fallman2"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":986,"author":{"gitId":"Fallman2"},"content":" + \"| |_| | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":987,"author":{"gitId":"Fallman2"},"content":" + \"| ___/| |_| | | __/\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":988,"author":{"gitId":"Fallman2"},"content":" + \"| | \\\\__,_|_|\\\\_\\\\___|\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":989,"author":{"gitId":"Fallman2"},"content":" + \"|_|\";","lastModifiedDate":"2023-08-30"},{"lineNumber":990,"author":{"gitId":"Fallman2"},"content":" System.out.println(\"Salutations! I hereby would like to inform you that my identity is that of\\n\" + logo +","lastModifiedDate":"2023-08-30"},{"lineNumber":991,"author":{"gitId":"Fallman2"},"content":" \"\\nAn exceedingly verbose conversation simulation program.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":992,"author":{"gitId":"Fallman2"},"content":" System.out.println(SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":993,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":994,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":995,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":996,"author":{"gitId":"Fallman2"},"content":" * Returns the exit message.","lastModifiedDate":"2023-08-31"},{"lineNumber":997,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":998,"author":{"gitId":"Fallman2"},"content":" * @return The exit message.","lastModifiedDate":"2023-08-31"},{"lineNumber":999,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1000,"author":{"gitId":"Fallman2"},"content":" String exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":1001,"author":{"gitId":"Fallman2"},"content":" return \"It appears that the user has decided to close the program as indicated by the command of which this is the function being issued and therefore,\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1002,"author":{"gitId":"Fallman2"},"content":" \"I shall bid thee farewell and wish thee great fortune in your future endeavors.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1003,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1004,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1005,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1006,"author":{"gitId":"Fallman2"},"content":" * Returns the message for listing tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1007,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1008,"author":{"gitId":"Fallman2"},"content":" * @return The message for listing tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1009,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1010,"author":{"gitId":"Fallman2"},"content":" String list() {","lastModifiedDate":"2023-08-30"},{"lineNumber":1011,"author":{"gitId":"Fallman2"},"content":" return \"Here is the collection of items, previously designated to be known as Tasks, that you have inputted over a previous unspecified period of time\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1012,"author":{"gitId":"Fallman2"},"content":" \"that may or may not require urgent attention, but will nevertheless necessitate some level of action within an either\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1013,"author":{"gitId":"Fallman2"},"content":" \"indicated or not indicated time period.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1014,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1015,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1016,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1017,"author":{"gitId":"Fallman2"},"content":" * Returns the message for marking a task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":1018,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1019,"author":{"gitId":"Fallman2"},"content":" * @param index Index of the task that has been marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":1020,"author":{"gitId":"Fallman2"},"content":" * @return The message indicating that the task has been done.","lastModifiedDate":"2023-08-31"},{"lineNumber":1021,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1022,"author":{"gitId":"Fallman2"},"content":" String mark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":1023,"author":{"gitId":"Fallman2"},"content":" return \"I have been made aware of your desire to indicate that the task numbered \" + index +","lastModifiedDate":"2023-08-30"},{"lineNumber":1024,"author":{"gitId":"Fallman2"},"content":" \" has been since been achieved as of the time at which you hve stipulated as so.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1025,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1026,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1027,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1028,"author":{"gitId":"Fallman2"},"content":" * Returns the message for marking a task as undone.","lastModifiedDate":"2023-09-04"},{"lineNumber":1029,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1030,"author":{"gitId":"Fallman2"},"content":" * @return The message indicating that that task has been unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":1031,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1032,"author":{"gitId":"Fallman2"},"content":" String unmark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":1033,"author":{"gitId":"Fallman2"},"content":" return \"Very well. I have acknowledged your request to unmark the task of specified index as having been completed and\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1034,"author":{"gitId":"Fallman2"},"content":" \"will now proceed to set said task of specified index to be considered as having not yet been completed.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1035,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1036,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1037,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1038,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a new to do task has been added to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1039,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1040,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1041,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-08-31"},{"lineNumber":1042,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the task or values used in the list are out of bounds.","lastModifiedDate":"2023-08-31"},{"lineNumber":1043,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1044,"author":{"gitId":"Fallman2"},"content":" String toDo(TaskList tl) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":1045,"author":{"gitId":"Fallman2"},"content":" return \"Understood. I have hereby created a task known to require doing at a future time but with no such time being specified and inserted it into \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1046,"author":{"gitId":"Fallman2"},"content":" \"the overall collection of said tasks that require action.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1047,"author":{"gitId":"Fallman2"},"content":" \"Here is a display of the added deadline task: \" + tl.get(tl.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1048,"author":{"gitId":"Fallman2"},"content":" \"You now, in total, have \" + tl.size() + \" of these tasks recorded within said collection.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1049,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1050,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1051,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1052,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a new Deadline task has been added to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1053,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1054,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1055,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-08-31"},{"lineNumber":1056,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the task or values used in the list are out of bounds.","lastModifiedDate":"2023-08-31"},{"lineNumber":1057,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1058,"author":{"gitId":"Fallman2"},"content":" String deadline(TaskList tl) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":1059,"author":{"gitId":"Fallman2"},"content":" return \"Understood. I have hereby created a task known to require doing at a future time alongside the stipulated time that you have indicated and inserted it into \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1060,"author":{"gitId":"Fallman2"},"content":" \"the overall collection of these tasks that require action.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1061,"author":{"gitId":"Fallman2"},"content":" \"Here is a display of the added deadline task: \" + tl.get(tl.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1062,"author":{"gitId":"Fallman2"},"content":" \"You now, in total, have \" + tl.size() + \" of these tasks recorded within said collection.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1063,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1064,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1065,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1066,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a new Event task has been added to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1067,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1068,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1069,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-08-31"},{"lineNumber":1070,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the task or values used in the list are out of bounds.","lastModifiedDate":"2023-08-31"},{"lineNumber":1071,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1072,"author":{"gitId":"Fallman2"},"content":" String event(TaskList tl) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":1073,"author":{"gitId":"Fallman2"},"content":" return \"Understood. I have hereby created a task known to require participation for a set period of time alongside this stipulated duration that you have indicated and inserted it into \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1074,"author":{"gitId":"Fallman2"},"content":" \"the overall collection of these tasks that require action.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1075,"author":{"gitId":"Fallman2"},"content":" \"Here is a display of the added deadline task: \" + tl.get(tl.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1076,"author":{"gitId":"Fallman2"},"content":" \"You now, in total, have \" + tl.size() + \" of these tasks recorded within said collection.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1077,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1078,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1079,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1080,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a Task has been removed from the list","lastModifiedDate":"2023-08-31"},{"lineNumber":1081,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1082,"author":{"gitId":"Fallman2"},"content":" * @param hold The task that was removed.","lastModifiedDate":"2023-08-31"},{"lineNumber":1083,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1084,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-08-31"},{"lineNumber":1085,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1086,"author":{"gitId":"Fallman2"},"content":" String delete(Task hold, TaskList tl) {","lastModifiedDate":"2023-08-30"},{"lineNumber":1087,"author":{"gitId":"Fallman2"},"content":" return \"I have acknowledged your request to have the task allocated to the specific index at which you have mentioned removed from the collection of all\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1088,"author":{"gitId":"Fallman2"},"content":" \"such tasks, colloquially known as your To Do list.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1089,"author":{"gitId":"Fallman2"},"content":" \"The task in question that has been deleted is: \" + hold + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1090,"author":{"gitId":"Fallman2"},"content":" \"As of this current moment, there are a total of \" + tl.size() + \" occurrences of tasks in your list.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1091,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1092,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1093,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1094,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that all tasks have been cleared from the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1095,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1096,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-08-31"},{"lineNumber":1097,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1098,"author":{"gitId":"Fallman2"},"content":" String clear() {","lastModifiedDate":"2023-08-30"},{"lineNumber":1099,"author":{"gitId":"Fallman2"},"content":" return \"Well I certainly hope you had meant to do that because I am not going too ask for your confirmation. As per the aforementioned instructions, I shall now\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1100,"author":{"gitId":"Fallman2"},"content":" \"purge all of the tasks that you have previously recorded and designated as requiring attention.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1101,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1102,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":1103,"author":{"gitId":"Fallman2"},"content":" String find() {","lastModifiedDate":"2023-08-31"},{"lineNumber":1104,"author":{"gitId":"Fallman2"},"content":" return \"As per the instructions provided, I shall initiate a search into your list of items, of which we have previously declared to be known as tasks due too their relatively \\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":1105,"author":{"gitId":"Fallman2"},"content":" \"urgent need of attention within a specified or unspecified frame of time, for those of which have an alphabetical similarity to the frame of reference that you have provided.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":1106,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":1107,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Fallman2":1105,"-":2}},{"path":"src/test/java/puke/PukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"public class PukeTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":" public void ParserTests() throws PukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ExitCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ExitCommand(\"\"), Parser.parse(\"bye\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ListCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ListCommand(\"\"), Parser.parse(\"list\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing MarkCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" assertEquals(new MarkCommand(\"3\"), Parser.parse(\"mark\", \" 3\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing UnmarkCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" assertEquals(new UnmarkCommand(\"4\"), Parser.parse(\"unmark\", \" 4\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing TodoCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" assertEquals(new TodoCommand(\"borrow book\"), Parser.parse(\"todo\", \" borrow book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing DeadlineCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" assertEquals(new DeadlineCommand(\"return book /by 2019-12-01T10:00\"), Parser.parse(\"deadline\", \" return book /by 2019-12-01T10:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing EventCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" assertEquals(new EventCommand(\"project meeting /from 2023-08-30T14:00 /to 2023-08-30T16:00\"), Parser.parse(\"event\", \" project meeting /from 2023-08-30T14:00 /to 2023-08-30T16:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing DeleteCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" assertEquals(new DeleteCommand(\"5\"), Parser.parse(\"delete\", \" 5\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ClearCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ClearCommand(\"\"), Parser.parse(\"clearall\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ErrorCommand 1","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" //assertEquals(new ErrorCommand(), Parser.parse(\"bye\", \"123\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ErrorCommand 2","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ErrorCommand(), Parser.parse(\"todo\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" public void UiMessageTests() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" //Testing of Ui Exit Message","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" assertEquals(\"It appears that the user has decided to close the program as indicated by the command of which this is the function being issued and therefore,\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" \"I shall bid thee farewell and wish thee great fortune in your future endeavors.\", new Ui().exit());","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Fallman2":41}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"deadline return book /by 2019-12-01T10:00","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"event project meeting /from 2023-08-30T14:00 /to 2023-08-30T16:00","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"unmark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"Inv","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"list 2","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":"mark 24","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":"deadline","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"event","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":"bye","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Fallman2":19}}] +[{"path":"ListData.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"[T]/0/borrow book","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":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":"Fallman2"},"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":"-"},"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":"Fallman2"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"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":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"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":"Fallman2"},"content":" archiveBaseName \u003d \"puke\"","lastModifiedDate":"2023-08-31"},{"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":"Fallman2"},"content":" mainClassName \u003d \"puke.Main\"","lastModifiedDate":"2023-08-31"},{"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"}],"authorContributionMap":{"Fallman2":21,"-":41}},{"path":"src/main/java/puke/DataHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"import puke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"import puke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":"import puke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"import puke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" * A class that handles the storage of the task list into ListData.txt.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":"public class DataHandler {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" * Interprets a line from the ListData.txt file used to store events.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" * @param input a line from the file","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" * @return a corresponding task.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an invalid task is detected.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" public static Task translate(String input) throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" String[] split \u003d input.split(\"/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" Task output;","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" if (split[0].equals(\"[T]\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" output \u003d new ToDo(split[2]);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" } else if (split[0].equals(\"[D]\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" output \u003d Deadline.construct(split[2], split[3]);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" } else if (split[0].equals(\"[E]\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" output \u003d Event.construct(split[2], split[3], split[4]);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" if (split[1].equals(\"0\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" output.unmark();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":" } else if (split[1].equals(\"1\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" output.mark();","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" * Updates the ListData.txt file with the latest list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":" * @throws IOException If an error occurs with the file writer.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":" public static void writeToDatabase(TaskList taskList) throws IOException {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" FileWriter fw \u003d new FileWriter(\"ListData.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":" for (Task item:taskList.getList()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Fallman2"},"content":" output.append(item.write()).append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Fallman2"},"content":" fw.write(output.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Fallman2"},"content":" fw.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Fallman2"},"content":" * Loads the events stored in the ListData.txt file when the program is run.","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Fallman2"},"content":" * If an invalid line is detected, it is skipped.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Fallman2"},"content":" * @return The Task List","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the file is not found.","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Fallman2"},"content":" public static ArrayList\u003cTask\u003e loadDatabase() throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Fallman2"},"content":" Scanner sc;","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Fallman2"},"content":" sc \u003d new Scanner(new File(\"ListData.txt\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Fallman2"},"content":" ArrayList\u003cTask\u003e output \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Fallman2"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Fallman2"},"content":" output.add(DataHandler.translate(sc.nextLine()));","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Fallman2"},"content":" continue;","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Fallman2"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Fallman2"},"content":" * Clears all stored tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Fallman2"},"content":" * @throws IOException If an error occurs with the FileWriter.","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Fallman2"},"content":" public static void clearAll() throws IOException {","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"Fallman2"},"content":" FileWriter fw \u003d new FileWriter(\"ListData.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"Fallman2"},"content":" fw.write(\"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"Fallman2"},"content":" fw.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":102}},{"path":"src/main/java/puke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import puke.command.ClearCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import puke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import puke.command.DeadlineCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"import puke.command.DeleteCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"import puke.command.ErrorCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"import puke.command.EventCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"import puke.command.ExitCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"import puke.command.FindCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":"import puke.command.ListCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"import puke.command.MarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":"import puke.command.TodoCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"import puke.command.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":"class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" * Parses the command string as input from the UI and returns its corresponding command","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" * @param command First token of input from the UI","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" * @param line Remaining input from the UI on the same line","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" * @return Corresponding command","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an invalid command or line is parsed","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" public static Command parse(String command, String line) throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" return new ExitCommand(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" return new ListCommand(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" return new MarkCommand(line.substring(1));","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" return new UnmarkCommand(line.substring(1));","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" return new TodoCommand(line.substring(1));","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" return new DeadlineCommand(line.substring(1));","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" return new EventCommand(line.substring(1));","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" return new DeleteCommand(line.substring(1));","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"clearall\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" return new ClearCommand(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"find\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":" return new FindCommand(line.substring(1));","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" return new ErrorCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" return new ErrorCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":55}},{"path":"src/main/java/puke/Puke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"import puke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"import puke.command.ErrorCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" * A chatbot that uses overly complicated sentences.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":"public class Puke {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" * List of tasks stored by the chatbot","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" * The UI of the chatbot that prints all applicable messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" * Constructor for the chatbot","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" * @throws IOException when an error occurs with the file reader.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" public Puke() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" tasks \u003d new TaskList(DataHandler.loadDatabase());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" new File(\"ListData.txt\").createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" * Runs the program","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" ui.startup();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" String command \u003d ui.command();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" String input \u003d ui.input();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Fallman2"},"content":" ui.line();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":" Command next;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" next \u003d Parser.parse(command, input);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" next \u003d new ErrorCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":" next.execute(tasks, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":" isExit \u003d next.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":" new Puke().run();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":62,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Fallman2":73,"-":1}},{"path":"src/main/java/puke/PukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":" * An exception class that represents any invalid formatting encountered by Puke.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"public class PukeException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":" public PukeException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" super(\"Unfortunately, the circumstances preceding this has necessitated that I issue an apology \"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" + \", for the input that I have received is unrecognised.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":14}},{"path":"src/main/java/puke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import puke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":" * A class that stores Tasks in a list.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"public class TaskList {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" private final ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" TaskList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" this.list \u003d new ArrayList\u003cTask\u003e(100);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" * Lists down the tasks stored in this list in a String format.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" * @return the String representation of the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" public String printOut() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" for (Task s : list) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" sb.append(String.format(\"%d. %s\\n\", i, s.toString()));","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" i++;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" return sb.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" Task get(int index) throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" return list.get(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" return this.list;","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":" public void add(Task t) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":" this.list.add(t);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" * Deletes the task at the specified index from the list and returns it.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":" * @param index of the task to be deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":" * @return the task that was deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException if an invalid index was used.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":" public Task delete(int index) throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" Task hold;","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":" hold \u003d list.get(index - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Fallman2"},"content":" list.remove(index - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Fallman2"},"content":" return hold;","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of each task in the list that matches the key.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Fallman2"},"content":" * @param key the keyword to match the tasks with.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Fallman2"},"content":" * @return the String representation of the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Fallman2"},"content":" public String find(String key) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Fallman2"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Fallman2"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Fallman2"},"content":" for (Task s : list) {","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Fallman2"},"content":" if (s.getDescription().contains(key)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Fallman2"},"content":" sb.append(String.format(\"%d. %s\\n\", i, s.toString()));","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Fallman2"},"content":" i++;","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Fallman2"},"content":" return sb.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Fallman2"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Fallman2"},"content":" * @param index of the task in question.","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException if an invalid index is used.","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Fallman2"},"content":" public void mark(int index) throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Fallman2"},"content":" list.get(index - 1).mark();","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"Fallman2"},"content":" * Marks a task as undone.","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"Fallman2"},"content":" * @param index of the task in question.","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException if an invalid index is used.","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"Fallman2"},"content":" public void unmark(int index) throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"Fallman2"},"content":" list.get(index - 1).unmark();","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"Fallman2"},"content":" int size() {","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"Fallman2"},"content":" return list.size();","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"Fallman2"},"content":" public void clear() {","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"Fallman2"},"content":" this.list.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":118}},{"path":"src/main/java/puke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import puke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":" * A class that handles all messages printed in the UI","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"public class Ui {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" private static final String SEPARATOR \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" private final Scanner sc;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" Ui() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" * Returns the first token from a line of input.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" * @return Command string.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" public String command() {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" return sc.next();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" * Returns the remainder of the line of input after the command string has been removed.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" * @return Remainder of line.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" public String input() {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" * Prints the separator line.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" public void line() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" * Prints the welcome logo and message.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":" void startup() {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" + \"| |_| | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" + \"| ___/| |_| | | __/\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" + \"| | \\\\__,_|_|\\\\_\\\\___|\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":" + \"|_|\";","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":" System.out.println(\"Salutations! I hereby would like to inform you that my identity is that of\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":" + logo","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" + \"\\nAn exceedingly verbose conversation simulation program.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":" System.out.println(SEPARATOR);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Fallman2"},"content":" * Returns the separator line used after each command.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Fallman2"},"content":" * @return the separator line as a string.","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Fallman2"},"content":" public static String separator() {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Fallman2"},"content":" return SEPARATOR;","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Fallman2"},"content":" * Returns the default error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Fallman2"},"content":" * @return the error message as a string.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Fallman2"},"content":" public static String errorMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Fallman2"},"content":" return \"Unfortunately, the circumstances preceding this has necessitated that I issue\"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Fallman2"},"content":" + \" an apology for the input that I have received is unrecognised.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Fallman2"},"content":" * Returns the exit message.","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Fallman2"},"content":" * @return The exit message.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Fallman2"},"content":" public String exit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Fallman2"},"content":" return \"It appears that the user has decided to close the program as indicated by the command of \"","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Fallman2"},"content":" + \"which this is the function being issued and therefore,\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Fallman2"},"content":" + \"I shall bid thee farewell and wish thee great fortune in your future endeavors.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Fallman2"},"content":" * Returns the message for listing tasks in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Fallman2"},"content":" * @return The message for listing tasks in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Fallman2"},"content":" public String list() {","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Fallman2"},"content":" return \"Here is the collection of items, previously designated to be known as Tasks, \"","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Fallman2"},"content":" + \"that you have inputted over a previous unspecified period of time\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Fallman2"},"content":" + \"that may or may not require urgent attention, but will nevertheless necessitate \"","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Fallman2"},"content":" + \"some level of action within an either\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Fallman2"},"content":" + \"indicated or non indicated time period.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"Fallman2"},"content":" * Returns the message for marking a task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"Fallman2"},"content":" * @param index Index of the task that has been marked.","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"Fallman2"},"content":" * @return The message indicating that the task has been done.","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"Fallman2"},"content":" public String mark(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"Fallman2"},"content":" return \"I have been made aware of your desire to indicate that the task numbered \"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"Fallman2"},"content":" + index","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"Fallman2"},"content":" + \" has been since been achieved as of the time at which you hve stipulated as so.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"Fallman2"},"content":" * Returns the message for marking a task as undone.","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"Fallman2"},"content":" * @return The message indicating that that task has been unmarked.","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"Fallman2"},"content":" public String unmark() {","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"Fallman2"},"content":" return \"Very well. I have acknowledged your request to unmark the task of \"","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"Fallman2"},"content":" + \"specified index as having been completed and\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"Fallman2"},"content":" + \"will now proceed to set said task of specified index to be considered as \"","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"Fallman2"},"content":" + \"having not yet been completed.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a new to do task has been added to the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the task or values used in the list are out of bounds.","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"Fallman2"},"content":" public String toDo(TaskList tl) throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"Fallman2"},"content":" return \"Understood. I have hereby created a task known to require doing at a future time \"","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"Fallman2"},"content":" + \"but with no such time being specified and inserted it into \"","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"Fallman2"},"content":" + \"the overall collection of said tasks that require action.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"Fallman2"},"content":" + \"Here is a display of the added deadline task: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"Fallman2"},"content":" + tl.get(tl.size() - 1)","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"Fallman2"},"content":" + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"Fallman2"},"content":" + \"You now, in total, have \"","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"Fallman2"},"content":" + tl.size()","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"Fallman2"},"content":" + \" of these tasks recorded within said collection.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a new Deadline task has been added to the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the task or values used in the list are out of bounds.","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"Fallman2"},"content":" public String deadline(TaskList tl) throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"Fallman2"},"content":" return \"Understood. I have hereby created a task known to require doing at a future time \"","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"Fallman2"},"content":" + \"alongside the stipulated time that you have indicated and inserted it into \"","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"Fallman2"},"content":" + \"the overall collection of these tasks that require action.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"Fallman2"},"content":" + \"Here is a display of the added deadline task: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"Fallman2"},"content":" + tl.get(tl.size() - 1)","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"Fallman2"},"content":" + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"Fallman2"},"content":" + \"You now, in total, have \"","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"Fallman2"},"content":" + tl.size()","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"Fallman2"},"content":" + \" of these tasks recorded within said collection.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a new Event task has been added to the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the task or values used in the list are out of bounds.","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"Fallman2"},"content":" public String event(TaskList tl) throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"Fallman2"},"content":" return \"Understood. I have hereby created a task known to require participation for a set period of time \"","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"Fallman2"},"content":" + \"alongside this stipulated duration that you have indicated and inserted it into \"","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"Fallman2"},"content":" + \"the overall collection of these tasks that require action.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"Fallman2"},"content":" + \"Here is a display of the added deadline task: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"Fallman2"},"content":" + tl.get(tl.size() - 1)","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"Fallman2"},"content":" + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"Fallman2"},"content":" + \"You now, in total, have \"","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"Fallman2"},"content":" + tl.size()","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"Fallman2"},"content":" + \" of these tasks recorded within said collection.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":181,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a Task has been removed from the list","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"Fallman2"},"content":" * @param hold The task that was removed.","lastModifiedDate":"2023-09-04"},{"lineNumber":185,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"Fallman2"},"content":" public String delete(Task hold, TaskList tl) {","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"Fallman2"},"content":" return \"I have acknowledged your request to have the task allocated to the specific index at which \"","lastModifiedDate":"2023-09-04"},{"lineNumber":190,"author":{"gitId":"Fallman2"},"content":" + \"you have mentioned removed from the collection of all\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":191,"author":{"gitId":"Fallman2"},"content":" + \"such tasks, colloquially known as your To Do list.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"Fallman2"},"content":" + \"The task in question that has been deleted is: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"Fallman2"},"content":" + hold","lastModifiedDate":"2023-09-04"},{"lineNumber":194,"author":{"gitId":"Fallman2"},"content":" + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"Fallman2"},"content":" + \"As of this current moment, there are a total of \"","lastModifiedDate":"2023-09-04"},{"lineNumber":196,"author":{"gitId":"Fallman2"},"content":" + tl.size()","lastModifiedDate":"2023-09-04"},{"lineNumber":197,"author":{"gitId":"Fallman2"},"content":" + \" occurrences of tasks in your list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":198,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":200,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":201,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that all tasks have been cleared from the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":202,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":203,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-09-04"},{"lineNumber":204,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"Fallman2"},"content":" public String clear() {","lastModifiedDate":"2023-09-04"},{"lineNumber":206,"author":{"gitId":"Fallman2"},"content":" return \"Well I certainly hope you had meant to do that because I am not going too ask for your confirmation. \"","lastModifiedDate":"2023-09-04"},{"lineNumber":207,"author":{"gitId":"Fallman2"},"content":" + \"As per the aforementioned instructions, I shall now\"","lastModifiedDate":"2023-09-04"},{"lineNumber":208,"author":{"gitId":"Fallman2"},"content":" + \"purge all of the tasks that you have previously recorded and designated as requiring attention.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":209,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":210,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that the find command has been executed.","lastModifiedDate":"2023-09-04"},{"lineNumber":213,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":215,"author":{"gitId":"Fallman2"},"content":" public String find() {","lastModifiedDate":"2023-09-04"},{"lineNumber":216,"author":{"gitId":"Fallman2"},"content":" return \"As per the instructions provided, I shall initiate a search into your list of items, of which \"","lastModifiedDate":"2023-09-04"},{"lineNumber":217,"author":{"gitId":"Fallman2"},"content":" + \"we have previously declared to be known as tasks due too their relatively \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":218,"author":{"gitId":"Fallman2"},"content":" + \"urgent need of attention within a specified or unspecified frame of time, for those of which have \"","lastModifiedDate":"2023-09-04"},{"lineNumber":219,"author":{"gitId":"Fallman2"},"content":" + \"an alphabetical similarity to the frame of reference that you have provided.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":220,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":221,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":221}},{"path":"src/main/java/puke/command/ClearCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import puke.DataHandler;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import puke.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import puke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":" * A Command class that when executed, clears the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"public class ClearCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" public ClearCommand(String rest) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" super(false, rest.isEmpty());","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" * If the command is invalid, an error message is printed instead.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" public void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" if (!super.isValid) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.errorMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" tl.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" DataHandler.clearAll();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.clear());","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" tl.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.clear());","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object is an instance of ClearCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":" * Used in testing.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ClearCommand);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":51}},{"path":"src/main/java/puke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import puke.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import puke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":" * A Class that represents an action to be taken by the chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":" * All Commands can be executed to print its corresponding message and carry out corresponding actions.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" protected boolean isValid;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" private final boolean exit;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" Command(boolean exit, boolean valid) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" this.exit \u003d exit;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" this.isValid \u003d valid;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" public abstract void execute(TaskList tl, Ui ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" return this.exit;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":23}},{"path":"src/main/java/puke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import puke.DataHandler;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import puke.PukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import puke.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"import puke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"import puke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":" * A Command class that when executed, creates a Deadline Task","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" private final String[] rest;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" * Creates a new DeadlineCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" * @param rest the rest of the input line.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" public DeadlineCommand(String rest) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" super(false, !rest.isEmpty());","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" this.rest \u003d rest.split(\" /\");","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format, prints an error message instead.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" public void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" tl.add(new Deadline(this.rest));","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.deadline(tl));","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.errorMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString as this command and is an instance of","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" * DeadlineCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":" * @return A boolean.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" return (other instanceof DeadlineCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of this command.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":" * @throws RuntimeException If an incorrect format is used","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Fallman2"},"content":" return new Deadline(this.rest).toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Fallman2"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":69}},{"path":"src/main/java/puke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import puke.DataHandler;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import puke.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import puke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"import puke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":" * A Command class that when executed, deletes a task in the task list","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" private final int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" * Creates a new DeleteCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" * @param rest the rest of the input line.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" public DeleteCommand(String rest) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" this.index \u003d Integer.parseInt(rest);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" * If the command is invalid due to the index being out of bounds, prints an error message instead.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" public void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" Task hold \u003d tl.delete(this.index);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.delete(hold, tl));","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.errorMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString() as this one.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" return (other instanceof DeleteCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":" * Returns a string representing this command.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":" * @return a String","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Fallman2"},"content":" return \"delete \" + this.index;","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":63}},{"path":"src/main/java/puke/command/ErrorCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import puke.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import puke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":" * A Command class that when executed, prints the error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"public class ErrorCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":" public ErrorCommand() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" super(false, false);","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" public void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.errorMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" * Returns the boolean representing whether another Object is an instance of an ErrorCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" * Used in testing.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" * @return boolean","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ErrorCommand);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":37}},{"path":"src/main/java/puke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import puke.DataHandler;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import puke.PukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import puke.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"import puke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"import puke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":" * A Command class that when executed, creates a new Event task.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" private final String[] rest;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" * Creates a new EventCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" * @param rest the rest of the input line.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" public EventCommand(String rest) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" super(false, !rest.isEmpty());","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" this.rest \u003d rest.split(\" /\");","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format, prints an error message instead.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" public void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" tl.add(new Event(this.rest));","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.event(tl));","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.errorMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString as this command and is an instance of","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" * EventCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":" * @return A boolean.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" return (other instanceof EventCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of this command.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":" * @throws RuntimeException If an incorrect format is used","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Fallman2"},"content":" return new Event(this.rest).toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Fallman2"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":69}},{"path":"src/main/java/puke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import puke.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import puke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":" * A Command class that when executed, prints the exit message.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" public ExitCommand(String rest) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" super(rest.isEmpty(), rest.isEmpty());","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" public void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" if (!super.isValid) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.errorMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.exit());","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object is an instance of ExitCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ExitCommand);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":41}},{"path":"src/main/java/puke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import puke.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import puke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":" * A Command class that when executed, looks for tasks in the task list that match the keywords provided.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":" private final String key;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" * Creates a new FindCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" * @param rest the rest of the input line.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" public FindCommand(String rest) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" this.key \u003d rest;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" * Executes the command, printing out the corresponding message from the UI while printing each matching","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" * task in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" * @param tl the task list","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" * @param ui the UI","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" public void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.find());","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" System.out.println(tl.find(this.key));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.errorMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":37}},{"path":"src/main/java/puke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import puke.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import puke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":" * A Command class that when executed, prints the string representation of the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" public ListCommand(String rest) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" super(false, rest.isEmpty());","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" public void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" if (!super.isValid) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.errorMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.list());","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" System.out.println(tl.printOut());","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object is an instance of ListCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" * @param other Another object","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" * @return a boolean","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ListCommand);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":43}},{"path":"src/main/java/puke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import puke.DataHandler;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import puke.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import puke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":" * A Command class that when executed, prints the message to mark a task as complete.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" private final int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" * Creates a new MarkCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" * @param rest the rest of the input line.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" public MarkCommand(String rest) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" this.index \u003d Integer.parseInt(rest);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format or an index is out of bounds, prints an error message instead.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" public void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" tl.mark(this.index);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.mark(this.index));","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.errorMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString() and is an instance of MarkCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" * @param other Another object","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" return (other instanceof MarkCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the command","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":" return \"mark \" + this.index;","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":61}},{"path":"src/main/java/puke/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import puke.DataHandler;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import puke.PukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import puke.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"import puke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"import puke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":" * A Command class that when executed, creates a new Todo task","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" private final String desc;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" * Creates a new ToDoCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" * @param rest the rest of the input line.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" public TodoCommand(String rest) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" super(false, !rest.isEmpty());","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" this.desc \u003d rest;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format, prints an error message instead.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" public void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" tl.add(new ToDo(this.desc));","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.toDo(tl));","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.errorMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString as this command and is an instance of","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" * TodoCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":" * @return A boolean.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" return (other instanceof TodoCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of this command.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":" * @throws RuntimeException If an incorrect format is used","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Fallman2"},"content":" return new ToDo(this.desc).toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Fallman2"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":69}},{"path":"src/main/java/puke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import puke.DataHandler;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import puke.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import puke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":" * A Command class that when executed, marks a task as undone.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" private int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" * Creates a new UnmarkCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" * @param rest the rest of the input line.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" public UnmarkCommand(String rest) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" this.index \u003d Integer.parseInt(rest.substring(1));","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" this.index \u003d -1;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format or an index is out of bounds, prints an error message instead.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" public void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" tl.unmark(this.index);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.unmark());","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.errorMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.separator());","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString() and is an instance of UnmarkCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":" * @param other Another object","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":" return (other instanceof UnmarkCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the command","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Fallman2"},"content":" return \"unmark \" + this.index;","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":65}},{"path":"src/main/java/puke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import puke.PukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":" * A Task class that has a deadline attached to it.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" private static final String tag \u003d \"[D]\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" private final LocalDateTime date;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" * Creates a Task with a set deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" * @param all All strings from the remainder of the input after being split","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is used.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" public Deadline(String[] all) throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" super(tag, all[0]);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" this.date \u003d LocalDateTime.parse(all[1].split(\"by \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" } catch (Exception DateTimeParseException) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" * Creates a Deadline Task using input from the ListData.txt file.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" * @param desc The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" * @param date The date of the deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" * @return The Deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is detected e.g. the file is corrupted.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" public static Deadline construct(String desc, String date) throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" String[] container \u003d new String[2];","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" container[0] \u003d desc;","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" container[1] \u003d \"by \" + date;","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" return new Deadline(container);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is stored in the ListData.txt file.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" public String write() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" return super.write() + \"/\" + this.date;","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is used for Displaying in the to do list.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":" * @return a String representation","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":" return super.toString() + \" (by: \" + this.date + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":62}},{"path":"src/main/java/puke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import puke.PukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":" * A Task class that has a start and end time attached to it.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" private static final String tag \u003d \"[E]\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" * Creates a task with a start and end time","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" * @param all All Strings from the remainder of the input line after the command string.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is used.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" public Event(String[] all) throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" super(tag, all[0]);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" this.from \u003d LocalDateTime.parse(all[1].split(\"from \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" this.to \u003d LocalDateTime.parse(all[2].split(\"to \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" } catch (Exception DateTimeParseException) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" System.out.println(all[1].split(\"from \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" * Creates an Event task using data stored in the ListData.txt file.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" * @param desc Description of the event","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" * @param from Start date and time of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" * @param to Ending date and time of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" * @return The Event task.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is detected e.g. the file is corrupted.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" public static Event construct(String desc, String from, String to) throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":" String[] container \u003d new String[3];","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" container[0] \u003d desc;","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" container[1] \u003d \"from \" + from;","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" container[2] \u003d \"to \" + to;","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Fallman2"},"content":" return new Event(container);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is stored in the ListData.txt file.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":" public String write() {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" return super.write() + \"/\" + this.from + \"/\"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":" + this.to;","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is used for Displaying in the to do list.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Fallman2"},"content":" return super.toString()","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Fallman2"},"content":" + \" (from: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Fallman2"},"content":" + this.from","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Fallman2"},"content":" + \" \"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Fallman2"},"content":" + \"to: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Fallman2"},"content":" + this.to","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Fallman2"},"content":" + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":74}},{"path":"src/main/java/puke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import puke.PukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":" * A class that represents an action that has to be tracked and carried out at a specified or unspecified time.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"public class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":" protected String tag;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":" protected boolean done;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" protected String description;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" protected Task(String tag, String description) throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" this.done \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" if (tag.isEmpty() || description.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" * Marks a task as done","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" public void mark() {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" this.done \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" * Marks a task as undone","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" public void unmark() {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" this.done \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" return description;","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the task that can be stored and","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":" * read later when the program is initiated again.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Fallman2"},"content":" public String write() {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":" int checked \u003d 0;","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":" if (this.done) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" checked \u003d 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" return String.format(\"%s/%d/%s\", this.tag, checked , this.description);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation to be displayed in the to do list.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Fallman2"},"content":" String status \u003d \"[ ]\";","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Fallman2"},"content":" if (done) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Fallman2"},"content":" status \u003d \"[X]\";","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Fallman2"},"content":" return String.format(\"%s%s %s\", this.tag, status, this.description);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":67}},{"path":"src/main/java/puke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import puke.PukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":" * A Task class that does not have a specific time attached to it.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":" private static final String tag \u003d \"[T]\";","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" * Creates a Task with no set deadline or time period.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" * @param desc The description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is used.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" public ToDo(String desc) throws PukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" super(tag, desc);","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Fallman2":20}},{"path":"src/test/java/puke/PukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import puke.command.*;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"public class PukeTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" public void ParserTests() throws PukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ExitCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ExitCommand(\"\"), Parser.parse(\"bye\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ListCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ListCommand(\"\"), Parser.parse(\"list\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing MarkCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" assertEquals(new MarkCommand(\"3\"), Parser.parse(\"mark\", \" 3\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing UnmarkCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" assertEquals(new UnmarkCommand(\"4\"), Parser.parse(\"unmark\", \" 4\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing TodoCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" assertEquals(new TodoCommand(\"borrow book\"), Parser.parse(\"todo\", \" borrow book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing DeadlineCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" assertEquals(new DeadlineCommand(\"return book /by 2019-12-01T10:00\"), Parser.parse(\"deadline\", \" return book /by 2019-12-01T10:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing EventCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" assertEquals(new EventCommand(\"project meeting /from 2023-08-30T14:00 /to 2023-08-30T16:00\"), Parser.parse(\"event\", \" project meeting /from 2023-08-30T14:00 /to 2023-08-30T16:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing DeleteCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" assertEquals(new DeleteCommand(\"5\"), Parser.parse(\"delete\", \" 5\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ClearCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ClearCommand(\"\"), Parser.parse(\"clearall\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ErrorCommand 1","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" //assertEquals(new ErrorCommand(), Parser.parse(\"bye\", \"123\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ErrorCommand 2","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ErrorCommand(), Parser.parse(\"todo\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" public void UiMessageTests() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" //Testing of Ui Exit Message","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" assertEquals(\"It appears that the user has decided to close the program as indicated by the command of which this is the function being issued and therefore,\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" \"I shall bid thee farewell and wish thee great fortune in your future endeavors.\", new Ui().exit());","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Fallman2":42}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"deadline return book /by 2019-12-01T10:00","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"event project meeting /from 2023-08-30T14:00 /to 2023-08-30T16:00","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"unmark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"Inv","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"list 2","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":"mark 24","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":"deadline","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"event","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":"bye","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Fallman2":19}}] diff --git a/Fallman2_ip_master/commits.json b/Fallman2_ip_master/commits.json index 85744309..0d97776e 100644 --- a/Fallman2_ip_master/commits.json +++ b/Fallman2_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Fallman2":[{"date":"2023-08-22","commitResults":[{"hash":"79f0ee3f9a8ef1fc41493eab0f112813ca17ee95","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":4}}},{"hash":"dd75b847fa79c8ba7bf77f5460e99a1069799977","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":4}}},{"hash":"1053f207bc65c976dd543199abb2c3c6312dccfb","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"8f0d076a6df516a82b888a07c2df4bca4e2f755d","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":9}}},{"hash":"2dc56b6801339dc6800ebebb9763788faa34e80f","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":9}}},{"hash":"c77f426db59695a6d42aab7cb32000b84f745c7a","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}},{"hash":"90903133e7f8dec88d17b59ab17fa9da56eac791","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":61,"deletions":10}}},{"hash":"b1bf5c50fd6e0d40afc3fbcb257bc74d7b0d128e","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":30,"deletions":0}}},{"hash":"7467b3a18f5cd474512ce4529b35bb6de24816a5","isMergeCommit":false,"messageTitle":"Touching Up","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}}]},{"date":"2023-08-30","commitResults":[{"hash":"d67d63eb872f4f91a395897dc9945bc47993048e","isMergeCommit":false,"messageTitle":"Update file name and edited isEmpty() condition check","messageBody":"File name was previously Duke, unchanged from the original despite the change in the name since the first commit. There was also a condition check that could have been shortened.\n\nFile name has been appropriately changed and the condition has been updated.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"aed13482d4600db0f899d11ee2cce50c7fd2b32f","isMergeCommit":false,"messageTitle":"Create new class to handle data","messageBody":"The chatbot previously did not have a way to handle storing data after closing.\n\nTo prepare for the implementationn of data storage, a text file has been created alongside a directory and a new class, DataHandler is created to translate this file into\nrespective Tasks.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":62,"deletions":3}}},{"hash":"7cf81b2ae259faabf0188b91bfee76202f9c212d","isMergeCommit":false,"messageTitle":"Complete saving function","messageBody":"The saving function was previously only implemented partiallly. There were also some display bugs where the separator line was not printed where it should have been.\n\nCompleted the saving function and fixed the bugs.\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":54,"deletions":12}}},{"hash":"4d1f47888f2f581d0319bb9ab5d066d14941a8a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"a6d14b602bef93b0abb2f279397a33f683377974","isMergeCommit":false,"messageTitle":"Implement LocalDateTime Support","messageBody":"Events and deadlines did not properly use dates and times in their implementation previously, allowing for unmeaningful dates and times.\n\nLocalDateTime has been implemented and some small String irregularities have been fixed\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":5},"java":{"insertions":33,"deletions":13}}},{"hash":"2e8e420c4c24d4135590d6305d623069bb66c7e5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"c4fea4c3d4d882c9b5cca496f6cbf834ce4558bc","isMergeCommit":false,"messageTitle":"Add new classes for extra OOP","messageBody":"Previous implementation had too many steps crammed into the main method, leading to messy code.\n\nAdded Command classes and subclasses to categorize the commands.\n","fileTypesAndContributionMap":{"java":{"insertions":302,"deletions":0}}},{"hash":"70de344a70f178495b5b1c5fe958eb5ed40ccefb","isMergeCommit":false,"messageTitle":"Add Ui class and fix errors in command classes","messageBody":"Ui displays are still executed in main class and could be furthur separated with oop\n\nCreated the UI class to store all UI messages.\n","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":44}}},{"hash":"66d74815124b8dc656259ad914182a6ccf81cec9","isMergeCommit":false,"messageTitle":"Update main method in Puke class","messageBody":"After all the classes were changed in the previous commit, the main class no longer ran properly.\n\nChanged the main class too run properly with the new coode\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":99,"deletions":192}}},{"hash":"c8a0ccc922d8e477e72a1e7ec13cd0dcc49f3f20","isMergeCommit":false,"messageTitle":"Add files to a package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"bba8d6f36f732e8bdc650fb9fbac4bc523ec2b84","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"2c985ccd681799d1cebc6777fbb76f7ecababaff","isMergeCommit":false,"messageTitle":"Add sample JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":1}}},{"hash":"cbbf20bc4ab18af3714c509ef9f4e6cf5526592c","isMergeCommit":false,"messageTitle":"Edit build.gradle to properly save a jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"05e33b6a4391bef0b942663eace2ae0f32075011","isMergeCommit":false,"messageTitle":"Update Puke.java to fit coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":39}}},{"hash":"5e309e1dba4de29efc9e0b72aea6c790aa617609","isMergeCommit":false,"messageTitle":"Add new find feature","messageBody":"There was no way to look for specific tasks previously\n\nAdded a way to filter tasks\n","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}},{"hash":"5c6651752e72c4c2621e2c0f513ecac5327c4ef6","isMergeCommit":false,"messageTitle":"Add comments for proper Javadoc documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":347,"deletions":5}}},{"hash":"dd82d71e4b857d8e0c677af6bb794154322b86e3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"c4e0f3ba4f0c01db3551ad738fae0818ce93afd0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"ef7439923a1c4c1b2b61b69042102ce6d08ab870","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"#\tsrc/main/java/puke/Puke.java\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"b9fd5258d594af38889b83bbd4920d6b4cd7e57d","isMergeCommit":false,"messageTitle":"Correct grammar errors in Javadoc comments","messageBody":"Certain grammatically incorrect words were being used previously in the Javadoc comments\n\nChanged these words to be grammatically correct\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"Fallman2":{"java":1146,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":2,"txt":19}},"authorContributionVariance":{"Fallman2":66463.36},"authorDisplayNameMap":{"Fallman2":"CS2103-F13-4 ANDR..IANG"}} +{"authorDailyContributionsMap":{"Fallman2":[{"date":"2023-08-22","commitResults":[{"hash":"79f0ee3f9a8ef1fc41493eab0f112813ca17ee95","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":4}}},{"hash":"dd75b847fa79c8ba7bf77f5460e99a1069799977","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":4}}},{"hash":"1053f207bc65c976dd543199abb2c3c6312dccfb","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"8f0d076a6df516a82b888a07c2df4bca4e2f755d","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":9}}},{"hash":"2dc56b6801339dc6800ebebb9763788faa34e80f","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":9}}},{"hash":"c77f426db59695a6d42aab7cb32000b84f745c7a","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}},{"hash":"90903133e7f8dec88d17b59ab17fa9da56eac791","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":61,"deletions":10}}},{"hash":"b1bf5c50fd6e0d40afc3fbcb257bc74d7b0d128e","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":30,"deletions":0}}},{"hash":"7467b3a18f5cd474512ce4529b35bb6de24816a5","isMergeCommit":false,"messageTitle":"Touching Up","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}}]},{"date":"2023-08-30","commitResults":[{"hash":"d67d63eb872f4f91a395897dc9945bc47993048e","isMergeCommit":false,"messageTitle":"Update file name and edited isEmpty() condition check","messageBody":"File name was previously Duke, unchanged from the original despite the change in the name since the first commit. There was also a condition check that could have been shortened.\n\nFile name has been appropriately changed and the condition has been updated.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"aed13482d4600db0f899d11ee2cce50c7fd2b32f","isMergeCommit":false,"messageTitle":"Create new class to handle data","messageBody":"The chatbot previously did not have a way to handle storing data after closing.\n\nTo prepare for the implementationn of data storage, a text file has been created alongside a directory and a new class, DataHandler is created to translate this file into\nrespective Tasks.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":62,"deletions":3}}},{"hash":"7cf81b2ae259faabf0188b91bfee76202f9c212d","isMergeCommit":false,"messageTitle":"Complete saving function","messageBody":"The saving function was previously only implemented partiallly. There were also some display bugs where the separator line was not printed where it should have been.\n\nCompleted the saving function and fixed the bugs.\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":54,"deletions":12}}},{"hash":"4d1f47888f2f581d0319bb9ab5d066d14941a8a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"a6d14b602bef93b0abb2f279397a33f683377974","isMergeCommit":false,"messageTitle":"Implement LocalDateTime Support","messageBody":"Events and deadlines did not properly use dates and times in their implementation previously, allowing for unmeaningful dates and times.\n\nLocalDateTime has been implemented and some small String irregularities have been fixed\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":5},"java":{"insertions":33,"deletions":13}}},{"hash":"2e8e420c4c24d4135590d6305d623069bb66c7e5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"c4fea4c3d4d882c9b5cca496f6cbf834ce4558bc","isMergeCommit":false,"messageTitle":"Add new classes for extra OOP","messageBody":"Previous implementation had too many steps crammed into the main method, leading to messy code.\n\nAdded Command classes and subclasses to categorize the commands.\n","fileTypesAndContributionMap":{"java":{"insertions":302,"deletions":0}}},{"hash":"70de344a70f178495b5b1c5fe958eb5ed40ccefb","isMergeCommit":false,"messageTitle":"Add Ui class and fix errors in command classes","messageBody":"Ui displays are still executed in main class and could be furthur separated with oop\n\nCreated the UI class to store all UI messages.\n","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":44}}},{"hash":"66d74815124b8dc656259ad914182a6ccf81cec9","isMergeCommit":false,"messageTitle":"Update main method in Puke class","messageBody":"After all the classes were changed in the previous commit, the main class no longer ran properly.\n\nChanged the main class too run properly with the new coode\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":99,"deletions":192}}},{"hash":"c8a0ccc922d8e477e72a1e7ec13cd0dcc49f3f20","isMergeCommit":false,"messageTitle":"Add files to a package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"bba8d6f36f732e8bdc650fb9fbac4bc523ec2b84","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"2c985ccd681799d1cebc6777fbb76f7ecababaff","isMergeCommit":false,"messageTitle":"Add sample JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":1}}},{"hash":"cbbf20bc4ab18af3714c509ef9f4e6cf5526592c","isMergeCommit":false,"messageTitle":"Edit build.gradle to properly save a jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"05e33b6a4391bef0b942663eace2ae0f32075011","isMergeCommit":false,"messageTitle":"Update Puke.java to fit coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":39}}},{"hash":"5e309e1dba4de29efc9e0b72aea6c790aa617609","isMergeCommit":false,"messageTitle":"Add new find feature","messageBody":"There was no way to look for specific tasks previously\n\nAdded a way to filter tasks\n","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}},{"hash":"5c6651752e72c4c2621e2c0f513ecac5327c4ef6","isMergeCommit":false,"messageTitle":"Add comments for proper Javadoc documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":347,"deletions":5}}},{"hash":"dd82d71e4b857d8e0c677af6bb794154322b86e3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"c4e0f3ba4f0c01db3551ad738fae0818ce93afd0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"ef7439923a1c4c1b2b61b69042102ce6d08ab870","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"#\tsrc/main/java/puke/Puke.java\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"b9fd5258d594af38889b83bbd4920d6b4cd7e57d","isMergeCommit":false,"messageTitle":"Correct grammar errors in Javadoc comments","messageBody":"Certain grammatically incorrect words were being used previously in the Javadoc comments\n\nChanged these words to be grammatically correct\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"d6802229484f9caa0caf6ff24a21bed53b79a07f","isMergeCommit":false,"messageTitle":"Implement Checkstyle","messageBody":"Previously, it was difficult to check through the full length of code for code standard violations\n\nCheckstyle is implemented to automatically detect these violations\n","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":154,"deletions":83}}},{"hash":"20976251ea42ee4459431bcf73cec4cedbfa8ed9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"657d19c689c53b662a21a04afd9313b6872afaf4","isMergeCommit":false,"messageTitle":"Create and sort each class into its proper package","messageBody":"Previously, all classes were in the same file and thus in the same package, leading to messier coding.\n\nCreated new folders and packages and sorted each class into its appropriate package.\n","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"txt":{"insertions":1,"deletions":0},"java":{"insertions":1367,"deletions":1109}}}]}]},"authorFileTypeContributionMap":{"Fallman2":{"java":1476,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":21,"txt":20}},"authorContributionVariance":{"Fallman2":427548.38},"authorDisplayNameMap":{"Fallman2":"CS2103-F13-4 ANDR..IANG"}} diff --git a/Gavino3o_ip_master/authorship.json b/Gavino3o_ip_master/authorship.json index 5ff5e2cb..de8ff77e 100644 --- a/Gavino3o_ip_master/authorship.json +++ b/Gavino3o_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"# bob 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":"Gavino3o"},"content":"3. After that, locate the `src/main/java/bob.java` file, right-click it, and choose `Run bob.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":{"Gavino3o":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":"Gavino3o"},"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":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Gavino3o":6,"-":42}},{"path":"src/main/java/bob/Bob.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" * A ChatBot that helps the user note down todos, deadlines and events.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" * It can be interacted with via the Command Line Interface","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"public class Bob {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" private StorageFile storageFile;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" private TextUi textUi;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the Bob Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" * @param fileDirectoryPath Relative path to directory containing save file","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" * @param fileName Name of save file","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" public Bob(String fileDirectoryPath, String fileName) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" textUi \u003d new TextUi();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" storageFile \u003d new StorageFile(fileDirectoryPath, fileName);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" taskList \u003d storageFile.loadTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" textUi.printErrorMessage(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" * Main entry point of the ChatBot. Terminates when","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" * an exit command is called.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" textUi.printWelcomeMessage();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" String input \u003d textUi.readTextInput();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" c.execute(taskList, storageFile, textUi);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":" textUi.printErrorMessage(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" } finally {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":" textUi.printDivider();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" new Bob(\"data/\", \"Bob.txt\").run();","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Gavino3o":58,"-":2}},{"path":"src/main/java/bob/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.enums.CommandType;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidCommandException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" * The AddCommand Class encapsulates logic that can be executed","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" * to add a specific task to current task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" private CommandType command;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" private String description;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" private String startDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" private String endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the AddCommand class.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" * @param command Type of AddCommand","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" * @param startDate Start date of task, potentially null","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" * @param endDate End date of task, potentially null","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" * @throws BobInvalidCommandException If CommandType","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" * is not a valid add task command","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" public AddCommand(CommandType command, String description,","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" String startDate, String endDate) throws BobInvalidCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" if (command !\u003d CommandType.TODO \u0026\u0026 command !\u003d CommandType.DEADLINE \u0026\u0026 command !\u003d CommandType.EVENT) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidCommandException(\"You can only add tasks of type: Todo, Deadline and Event\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" public void execute(TaskList taskList, StorageFile storageFile, TextUi ui) throws BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":" switch (command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" case TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":" task \u003d new Todo((this.description));","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" task \u003d new Deadline(this.description, this.endDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" case EVENT:","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" task \u003d new Event(this.description, this.startDate, this.endDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" assert task !\u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" ui.printAddMessage(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":" storageFile.saveTasks(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":72}},{"path":"src/main/java/bob/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" * A command encapsulates logic that can be executed to interact with the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * It can be stored an executed at a later instance or be reused.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" * Executes the current command and can modify the current state of the task list or","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" * print out messages.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" * @param taskList Current list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" * @param storageFile Storage file reader and writer","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" * @param ui User Interface reader and writer","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" * @throws BobException if the command is constructed with invalid arguments","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" public abstract void execute(TaskList taskList, StorageFile storageFile, TextUi ui) throws BobException;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" * Represents whether the current command should terminate the current application.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" * @return a boolean signifying whether to terminate the program","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":30}},{"path":"src/main/java/bob/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * The DeleteCommand class encapsulates logic that can be executed","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" * to delete tasks from the current task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" private int taskNumber;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the DeleteCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" * @param taskNumber Index of task to be deleted from current list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" public void execute(TaskList taskList, StorageFile storageFile, TextUi ui) throws BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" Task deletedTask \u003d taskList.deleteTask(taskNumber);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" ui.printDeleteMessage(deletedTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" storageFile.saveTasks(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":36}},{"path":"src/main/java/bob/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" * The ExitCommand encapsulates logic to be executed when","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * the application should be terminated.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" public void execute(TaskList taskList, StorageFile storageFile, TextUi ui) throws BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" storageFile.saveTasks(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" ui.printGoodbyeMessage();","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":23}},{"path":"src/main/java/bob/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" * The FindCommand Class encapsulates logic that can be executed","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * to find tasks with descriptions corresponding to a given keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" private String keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" public void execute(TaskList taskList, StorageFile storageFile, TextUi ui) throws BobException {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" TaskList filteredTaskList \u003d taskList.keywordFilter(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" ui.printFindMessage(filteredTaskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Gavino3o":30}},{"path":"src/main/java/bob/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" * The ListCommand encapsulates logic to be executed to print out","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * the tasks within the current task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" public void execute(TaskList taskList, StorageFile storageFile, TextUi ui) throws BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" ui.printListMessage(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":23}},{"path":"src/main/java/bob/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * The MarkCommand encapsulates logic to be executed to modify the","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" * completion status of a specific task.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" private int taskNumber;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the MarkCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" * @param taskNumber Index of task to mark/unmark","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" * @param isDone Completion status of task","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" public MarkCommand(int taskNumber, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" public void execute(TaskList taskList, StorageFile storageFile, TextUi ui) throws BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" Task task \u003d taskList.getTask(taskNumber - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" if (isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" task.unmarkTask();","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" ui.printMarkMessage(task, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" storageFile.saveTasks(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":44}},{"path":"src/main/java/bob/enums/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.enums;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * Enumerations for types of commands available to be executed.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"public enum CommandType {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":" BYE, LIST, MARK, UNMARK, TODO, DEADLINE, EVENT, DELETE, FIND, INVALID","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":8}},{"path":"src/main/java/bob/exception/BobCorruptFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * Exception thrown when reading from a corrupted file.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"public class BobCorruptFileException extends BobException {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" * Constructor for the BobCorruptFileException.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * @param errorMessage Shown to standard output","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" public BobCorruptFileException(String errorMessage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" super(\"Your file may be corrupted :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Gavino3o":15}},{"path":"src/main/java/bob/exception/BobException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * A general exception that will be thrown when an executable command","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * encounters an error. Error message will be shown to standard output.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class BobException extends Exception {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" public BobException(String errorMessage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Gavino3o":11}},{"path":"src/main/java/bob/exception/BobInvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * Exception to be thrown when user inputs a string command in","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * an invalid format.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class BobInvalidCommandException extends BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" public BobInvalidCommandException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" super(\"Invalid command format chosen\");","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" public BobInvalidCommandException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":15}},{"path":"src/main/java/bob/exception/BobInvalidTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * Exception thrown when a command that requires an integer number","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * as task number is input wrongly.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class BobInvalidTaskNumberException extends BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" public BobInvalidTaskNumberException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" super(\"Index chosen for task is invalid\");","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" public BobInvalidTaskNumberException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":15}},{"path":"src/main/java/bob/exception/BobMissingArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * Exception thrown when a command that requires an argument is","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * input without one.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class BobMissingArgumentException extends BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" public BobMissingArgumentException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" super(\"You are missing an argument!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" public BobMissingArgumentException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":15}},{"path":"src/main/java/bob/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.command.ExitCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.command.FindCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import bob.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"import bob.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"import bob.enums.CommandType;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobCorruptFileException;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidCommandException;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidTaskNumberException;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobMissingArgumentException;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" * Processes user input or save files to executable commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" * Returns an instance of a Command with specific user input to be executed.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" * @param input Text input to be parsed","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" * @return Executable command based on input","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" * @throws BobException If command given has invalid format","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" public static Command parse(String input) throws BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" String[] inputSplit \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" CommandType commandType \u003d strToCommandType(inputSplit[0].toUpperCase());","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" String argument \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" if (inputSplit.length \u003e\u003d 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" argument \u003d inputSplit[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" case BYE:","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" case LIST:","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" case MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" case UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":" return Parser.parseMarkCommand(commandType, argument);","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" case TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":" return Parser.parseTodoCommand(commandType, argument);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" return Parser.parseDeadlineCommand(commandType, argument);","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" case EVENT:","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":" return Parser.parseEventCommand(commandType, argument);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" case DELETE:","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" return Parser.parseDeleteCommand(argument);","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" case FIND:","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" return Parser.parseFindCommand(argument);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" case INVALID:","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidCommandException(\"I\u0027m sorry! I don\u0027t understand the command :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidCommandException(\"I\u0027m sorry! Something went wrong when processing your command :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" private static Command parseMarkCommand(CommandType commandType, String argument)","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" if (argument.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidTaskNumberException(\"Give me a task number to mark/unmark as done!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" return new MarkCommand(Integer.parseInt(argument), commandType \u003d\u003d CommandType.MARK);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidTaskNumberException(\"The mark/unmark command \"","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Gavino3o"},"content":" + \"needs to be followed up by an integer number!\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Gavino3o"},"content":" private static Command parseTodoCommand(CommandType commandType, String argument)","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Gavino3o"},"content":" throws BobMissingArgumentException, BobInvalidCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Gavino3o"},"content":" if (argument.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Gavino3o"},"content":" throw new BobMissingArgumentException(\"The description of your todo \"","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Gavino3o"},"content":" + \"should not be empty! Try:\\ntodo [description]\");","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"Gavino3o"},"content":" return new AddCommand(commandType, argument, null, null);","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"Gavino3o"},"content":" private static Command parseDeadlineCommand(CommandType commandType, String argument)","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Gavino3o"},"content":" throws BobMissingArgumentException, BobInvalidCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Gavino3o"},"content":" if (argument.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"Gavino3o"},"content":" throw new BobMissingArgumentException(\"The description of your deadline should not be empty!\"","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Gavino3o"},"content":" + \" Try:\\ndeadline [description] /by [duedate]\");","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"Gavino3o"},"content":" String[] bySplit \u003d argument.split(\" /by \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"Gavino3o"},"content":" if (bySplit.length !\u003d 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidCommandException(\"Incorrect deadline command format!\"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Gavino3o"},"content":" + \" It should be:\\ndeadline [description] /by [duedate]\");","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"Gavino3o"},"content":" return new AddCommand(commandType, bySplit[0], null, bySplit[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"Gavino3o"},"content":" private static Command parseEventCommand(CommandType commandType, String argument)","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Gavino3o"},"content":" throws BobMissingArgumentException, BobInvalidCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Gavino3o"},"content":" if (argument.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"Gavino3o"},"content":" throw new BobMissingArgumentException(\"The description of your event should not be empty! Try:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Gavino3o"},"content":" + \"event [description] /from [start] /to [end]\");","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"Gavino3o"},"content":" String[] descSplit \u003d argument.split(\" /from \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"Gavino3o"},"content":" if (descSplit.length !\u003d 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidCommandException(\"Incorrect event command format! It should be:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Gavino3o"},"content":" + \"event [description] /from [start] /to [end]\");","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"Gavino3o"},"content":" String[] periodSplit \u003d descSplit[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"Gavino3o"},"content":" if (periodSplit.length !\u003d 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidCommandException(\"Incorrect event command format! It should be:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Gavino3o"},"content":" + \"event [description] /from [start] /to [end]\");","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"Gavino3o"},"content":" return new AddCommand(commandType, descSplit[0], periodSplit[0], periodSplit[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"Gavino3o"},"content":" private static Command parseDeleteCommand(String argument) throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"Gavino3o"},"content":" if (argument.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidTaskNumberException(\"Give me a task number to delete!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"Gavino3o"},"content":" return new DeleteCommand(Integer.parseInt(argument));","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"Gavino3o"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidTaskNumberException(\"The delete command needs to be followed up \"","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"Gavino3o"},"content":" + \"by an integer number!\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Gavino3o"},"content":" private static Command parseFindCommand(String argument) {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Gavino3o"},"content":" return new FindCommand(argument);","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Gavino3o"},"content":" private static CommandType strToCommandType(String s) {","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"Gavino3o"},"content":" return CommandType.valueOf(s);","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"Gavino3o"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"Gavino3o"},"content":" return CommandType.INVALID;","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"Gavino3o"},"content":" * Returns an instance of a Task after processing a String in stored format.","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"Gavino3o"},"content":" * @param inputString Text input to be parsed","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"Gavino3o"},"content":" * @return An instance of Task based on input string","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"Gavino3o"},"content":" * @throws BobException If input string has incorrect format","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"Gavino3o"},"content":" public static Task parseStoredTask(String inputString) throws BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"Gavino3o"},"content":" String[] split \u003d inputString.split(\"\\\\|\");","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"Gavino3o"},"content":" String commandType \u003d split[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"Gavino3o"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"Gavino3o"},"content":" case \"T\":","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"Gavino3o"},"content":" return new Todo(split[2], Integer.parseInt(split[1]) \u003d\u003d 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"Gavino3o"},"content":" case \"D\":","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"Gavino3o"},"content":" return new Deadline(split[2], split[3], Integer.parseInt(split[1]) \u003d\u003d 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"Gavino3o"},"content":" case \"E\":","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"Gavino3o"},"content":" return new Event(split[2], split[3], split[4], Integer.parseInt(split[1]) \u003d\u003d 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":166,"author":{"gitId":"Gavino3o"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":168,"author":{"gitId":"Gavino3o"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":169,"author":{"gitId":"Gavino3o"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":170,"author":{"gitId":"Gavino3o"},"content":" throw new BobCorruptFileException(\"Your save file might be corrupted :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":171,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":173,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":173}},{"path":"src/main/java/bob/storage/StorageFile.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" * Handles reading and writing save files from the system.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":"public class StorageFile {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" private String fileDirectoryPath;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" private String fileName;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the StorageFile class.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" * @param fileDirectoryPath Relative path to directory containing save file","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" * @param fileName Name of save file","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" public StorageFile(String fileDirectoryPath, String fileName) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" this.fileDirectoryPath \u003d fileDirectoryPath;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" this.fileName \u003d fileName;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" * Saves the current state of tasks by writing into a .txt file based on relative","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" * file path determined when current object instantiated.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" * @param taskList List of tasks to be written into save file","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" * @throws BobException If there is error when accessing current state of task list","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" public void saveTasks(TaskList taskList) throws BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" this.checkDirectoryExists();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" FileWriter fileWriter \u003d new FileWriter(this.fileDirectoryPath + this.fileName);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" fileWriter.write(taskList.getTask(i).convertToFileFormat() + System.lineSeparator());","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" throw new BobException(\"Something went wrong when saving your tasks :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" * Reads from save file and changes current memory state of application, effective loading","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" * tasks stored in previous sessions.","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" * @return A TaskList of previously saved tasks","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" * @throws BobException if save file has lines with incorrect format","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" public TaskList loadTasks() throws BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" this.checkDirectoryExists();","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" File taskFile \u003d new File(this.fileDirectoryPath + this.fileName);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" Scanner fileScanner \u003d new Scanner(taskFile);","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" while (fileScanner.hasNextLine()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":" String currentLine \u003d fileScanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" if (currentLine.isBlank()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" continue;","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" Task task \u003d Parser.parseStoredTask(fileScanner.nextLine());","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":" loadedTasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" fileScanner.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" return new TaskList(loadedTasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Gavino3o"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Gavino3o"},"content":" return new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Gavino3o"},"content":" private void checkDirectoryExists() throws BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Gavino3o"},"content":" File dataDirectory \u003d new File(this.fileDirectoryPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Gavino3o"},"content":" if (!dataDirectory.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Gavino3o"},"content":" boolean isMkDirSuccess \u003d dataDirectory.mkdir();","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"Gavino3o"},"content":" if (!isMkDirSuccess) {","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"Gavino3o"},"content":" throw new BobException(\"Something went wrong when loading saving/loading your tasks :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":90}},{"path":"src/main/java/bob/task/DateFormatter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" * Formats dates into different patterns.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"public class DateFormatter {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" public static final String DEFAULT_FORMAT \u003d \"MMM d yyyy\";","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" * Formats input String into required pattern if input String abides by","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" * Java LocalDate format. Otherwise, returns original input String.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" * @param inputString Raw String input","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" * @param format Required pattern for date format conversion","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" * @return Date of required pattern, original String may be returned (based on input)","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" public static String format(String inputString, String format) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" LocalDate date \u003d LocalDate.now();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" date \u003d LocalDate.parse(inputString);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" return date.format(DateTimeFormatter.ofPattern(format));","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" return inputString;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" return date.format(DateTimeFormatter.ofPattern(DateFormatter.DEFAULT_FORMAT));","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":32}},{"path":"src/main/java/bob/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * A Deadline is a task that has a due date. Hence, it stores a date at which the","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * task should be completed by.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" protected String by;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the Deadline Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of Deadline Task","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" * @param by Due date of Deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" this.by \u003d DateFormatter.format(by, \"MMM d yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the Deadline Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" * Instantiates an instance of a deadline and set its completion status","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" * according to boolean value provided.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of Deadline Task","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" * @param by Due date of Deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" * @param isDone Completion status of Deadline Task","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" this.by \u003d DateFormatter.format(by, \"MMM d yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), this.by);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" public String convertToFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" return String.format(\"D|%s|%s\", super.convertToFileFormat(), this.by);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Gavino3o":45}},{"path":"src/main/java/bob/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * An Event is a task that has a time period at which it occurs or should be completed. Hence,","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * it contains a start and end date to represent the time period.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" protected String startDateTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" protected String endDateTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the Event Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of Event task","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" * @param startDateTime Start Time of Event Task","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" * @param endDateTime End Time of Event task","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" public Event(String description, String startDateTime, String endDateTime) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" this.startDateTime \u003d DateFormatter.format(startDateTime, \"MMM d yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" this.endDateTime \u003d DateFormatter.format(endDateTime, \"MMM d yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the Event Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" * Instantiates the event and marks its completion status based on boolean provided.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of Event task","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" * @param startDateTime Start Time of Event Task","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" * @param endDateTime End Time of Event task","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" * @param isDone Completion status of event task","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" public Event(String description, String startDateTime, String endDateTime, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" this.startDateTime \u003d DateFormatter.format(startDateTime, \"MMM d yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" this.endDateTime \u003d DateFormatter.format(endDateTime, \"MMM d yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" return String.format(\"[E]%s (from: %s, to: %s)\", super.toString(), this.startDateTime, this.endDateTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" public String convertToFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" return String.format(\"E|%s|%s|%s\", super.convertToFileFormat(), this.startDateTime, this.endDateTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Gavino3o":48}},{"path":"src/main/java/bob/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * The Task class encapsulates a task in real life. A task contains a description and keeps","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * track of whether the task has been completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the Task Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" * Instantiates an instance of a task that has not been completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the Task Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" * Instantiates an instance of a task based on provided description and","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" * sets the completion status of the class based on provided boolean.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" * @param isDone Completions status of task","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" * Prints an icon to signify if a task is completed.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" * @return X is task is completed, empty space otherwise","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" * Marks this task as completed.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":" * Marks this task as yet to be completed.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" public void unmarkTask() {","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" * Indicates whether the task description contains keyword provided.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" * @param keyword Keyword used to check description","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":" * @return True if task contains keyword, false otherwise","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" public boolean containsKeyword(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":" return this.description.contains(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" public String convertToFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" return String.format(\"%s|%s\", this.isDone ? 1 : 0, this.description);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Gavino3o":78}},{"path":"src/main/java/bob/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidTaskNumberException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" * Represents a list of Tasks that can contain date and be mark/unmark as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" * Acts as a dynamic data structure to be manipulated by user.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" * Constructor of a TaskList.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" * Instantiates an empty array list to store tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" * Constructor of a TaskList.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" * Instantiates an array list of tasks based on given argument.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" * @param tasks ArrayList of tasks to instantiate TaskList","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" * Adds task into current task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" * @param task Task to be added into list","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" * Deletes task in current task list based on index given.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" * Input index is expected to start from 1 instead of 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" * @param num Index of task to be deleted","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" * @return Instance of deleted task","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" * @throws BobInvalidTaskNumberException If index provided is out of bounds.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" public Task deleteTask(int num) throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" return tasks.remove(num - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidTaskNumberException();","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" * Returns number of current tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" * @return number of current tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":" public int size() {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":" * Fetches task from current task list based on provided index.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" * Index is expected to start from 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" * @param num Index of task to be fetched","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" * @return The task at the given index","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":" * @throws BobInvalidTaskNumberException if index provided is out of bounds","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" public Task getTask(int num) throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Gavino3o"},"content":" return this.tasks.get(num);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Gavino3o"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidTaskNumberException(\"You are trying to access a non-existent task :O\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Gavino3o"},"content":" + \"Use the command: \\\"list\\\" to find out what tasks you have.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Gavino3o"},"content":" * Creates a new TaskList by filtering existing TaskList","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Gavino3o"},"content":" * with provided keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Gavino3o"},"content":" * @param keyword Keyword used to filter task descriptions","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Gavino3o"},"content":" * @return A filtered TaskList","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Gavino3o"},"content":" public TaskList keywordFilter(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Gavino3o"},"content":" TaskList filteredTasklist \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Gavino3o"},"content":" if (keyword.isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Gavino3o"},"content":" return this;","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Gavino3o"},"content":" for (Task currentTask : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Gavino3o"},"content":" if (currentTask.containsKeyword(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Gavino3o"},"content":" filteredTasklist.addTask(currentTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Gavino3o"},"content":" return filteredTasklist;","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":102}},{"path":"src/main/java/bob/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * A Todo is a task that can be done in the future, but has no specific deadline or period","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * of which it should be completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * Constructor of Todo Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" * @param description Test description of Todo Task","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" * Constructor of Todo Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" * Instantiates an instance of Todo class with a string description and","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" * a boolean indicating whether the task is done.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of Todo Task","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" * @param isDone Completion status of Todo Task","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" public String convertToFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" return String.format(\"T|%s\", super.convertToFileFormat());","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Gavino3o":39}},{"path":"src/main/java/bob/ui/TextUi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidTaskNumberException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * Represents the text user interface at which the user reads and writes","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" * commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"public class TextUi {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" private static final String DIVIDER \u003d \"\\n____________________________________________________________\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" private static final String LOGO \u003d","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" \".-. .-\u0027) .-. .-\u0027) \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" + \"\\\\ ( OO ) \\\\ ( OO ) \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" + \" ;-----.\\\\ .-\u0027),-----. ;-----.\\\\ \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" + \" | .-. | ( OO\u0027 .-. \u0027| .-. | \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" + \" | \u0027-\u0027 /_)/ | | | || \u0027-\u0027 /_) \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" + \" | .-. `. \\\\_) | |\\\\| || .-. `. \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" + \" | | \\\\ | \\\\ | | | || | \\\\ | \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" + \" | \u0027--\u0027 / `\u0027 \u0027-\u0027 \u0027| \u0027--\u0027 / \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" + \" `------\u0027 `-----\u0027 `------\u0027 \";","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the text UI.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" public TextUi() {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" * Prints a divider acting as a horizontal line break to standard output.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" public void printDivider() {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" System.out.println(DIVIDER);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" * Prints a welcome message to greet the user to standard output.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" public void printWelcomeMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" String welcomeMessage \u003d \"Hi, I\u0027m Bob. How can I help you?\";","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" System.out.println(DIVIDER + LOGO + \"\\n\" + welcomeMessage + DIVIDER);","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":" * Prints a farewell message to user to standard output.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" public void printGoodbyeMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" String goodbyeMessage \u003d \"Goodbye! Bob signing out!\";","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":" System.out.println(goodbyeMessage);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" * Prints out a message to notify user how many tasks are left currently.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" * Prints out lists of task with numbering based on order of creation.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" * @param taskList List of tasks to be counted","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":" public void printListEndMessage(TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" int numOfTasks \u003d taskList.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":" if (numOfTasks \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" System.out.println(\"You currently have no tasks! Good Job!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" if (numOfTasks \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" System.out.printf(\"\\nNow you have %d task in your list!%n\", numOfTasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" System.out.printf(\"\\nNow you have %d tasks in your list!%n\", numOfTasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Gavino3o"},"content":" * Prints out an error message based on error occurred to standard output.","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Gavino3o"},"content":" * @param e Exception caught","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Gavino3o"},"content":" public void printErrorMessage(Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Gavino3o"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Gavino3o"},"content":" * Prints out the list of currently saved tasks to standard output.","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Gavino3o"},"content":" * @param taskList Lists of tasks to be printed","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Gavino3o"},"content":" * @throws BobInvalidTaskNumberException If an error occurs when accessing a task","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Gavino3o"},"content":" public void printListMessage(TaskList taskList) throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Gavino3o"},"content":" printRawList(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Gavino3o"},"content":" printListEndMessage(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Gavino3o"},"content":" * Prints a message to notify the user that a task has been mark/unmark as done to","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Gavino3o"},"content":" * standard output.","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Gavino3o"},"content":" * @param task Task to be mark/unmark","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Gavino3o"},"content":" * @param isDone Completion status of task","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Gavino3o"},"content":" public void printMarkMessage(Task task, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Gavino3o"},"content":" System.out.println();","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Gavino3o"},"content":" if (isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Gavino3o"},"content":" System.out.println(\"Great Job! I\u0027ve helped mark this task as done:\\n\" + task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Gavino3o"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Gavino3o"},"content":" System.out.println(\"No worries! I will help you unmark this task:\\n\" + task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Gavino3o"},"content":" * Prints a message to standard output to notify the user when a task has","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Gavino3o"},"content":" * been successfully deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Gavino3o"},"content":" * @param task Deleted task","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Gavino3o"},"content":" public void printDeleteMessage(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Gavino3o"},"content":" System.out.println(\"Foosh! Let it be gone! I\u0027ve helped delete the task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Gavino3o"},"content":" + task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Gavino3o"},"content":" * Prints a message to standard output notifying the user the required task","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Gavino3o"},"content":" * has been added to current list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Gavino3o"},"content":" * @param task Added task","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Gavino3o"},"content":" public void printAddMessage(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Gavino3o"},"content":" String displayMessage \u003d \"I gotchu. New task added to the list:\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Gavino3o"},"content":" System.out.println(displayMessage + task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Gavino3o"},"content":" * Prints a list of filtered tasks after find command is executed.","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Gavino3o"},"content":" * @param taskList List of filtered tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"Gavino3o"},"content":" * @throws BobInvalidTaskNumberException If an error occurs when trying to access a task","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"Gavino3o"},"content":" public void printFindMessage(TaskList taskList) throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"Gavino3o"},"content":" String displayMessage \u003d \"These are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"Gavino3o"},"content":" System.out.println(displayMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"Gavino3o"},"content":" printRawList(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"Gavino3o"},"content":" private void printRawList(TaskList taskList) throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"Gavino3o"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"Gavino3o"},"content":" System.out.println((i + 1) + \". \" + taskList.getTask(i).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"Gavino3o"},"content":" * Reads the user input in the Command Line Interface as a whole line.","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"Gavino3o"},"content":" * @return A String representing user input","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"Gavino3o"},"content":" public String readTextInput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"Gavino3o"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":162}},{"path":"src/test/java/bob/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.command.ExitCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.command.FindCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import bob.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"import bob.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidCommandException;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidTaskNumberException;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobMissingArgumentException;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" public void parse_bye_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof ExitCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" public void parse_list_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof ListCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" public void parse_mark_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"mark 1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof MarkCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" public void parse_unmark_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"unmark 3\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof MarkCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" public void parse_todo_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"todo learn origami\");","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof AddCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" public void parse_deadline_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"deadline make origami /by 2023-09-10\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof AddCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Gavino3o"},"content":" public void parse_event_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"event summer fiesta /from 2023-09-10 /to /2023-09-12\");","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof AddCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Gavino3o"},"content":" public void parse_find_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"find book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof FindCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Gavino3o"},"content":" public void parse_delete_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"delete 2\");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof DeleteCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Gavino3o"},"content":" public void parse_mark_exceptionThrown1() {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"mark\");","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidTaskNumberException);","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"Give me a task number to mark/unmark as done!\", e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Gavino3o"},"content":" public void parse_mark_exceptionThrown2() {","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"mark egg sandwich\");","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidTaskNumberException);","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"The mark/unmark command needs to be followed up by an integer number!\\n\", e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"Gavino3o"},"content":" public void parse_unmark_exceptionThrown1() {","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"unmark\");","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidTaskNumberException);","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"Give me a task number to mark/unmark as done!\", e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"Gavino3o"},"content":" public void parse_unmark_exceptionThrown2() {","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"unmark test\");","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidTaskNumberException);","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"The mark/unmark command needs to be followed up by an integer number!\\n\", e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"Gavino3o"},"content":" public void parse_todo_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobMissingArgumentException);","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"The description of your todo should not be empty! Try:\\ntodo [description]\", e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"Gavino3o"},"content":" public void parse_deadline_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"deadline /by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidCommandException);","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"Incorrect deadline command format! It should be:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"Gavino3o"},"content":" + \"deadline [description] /by [duedate]\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"Gavino3o"},"content":" public void parse_event_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"event indonesia trip /from Monday\");","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":186,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidCommandException);","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"Incorrect event command format! It should be:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":188,"author":{"gitId":"Gavino3o"},"content":" + \"event [description] /from [start] /to [end]\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":191,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"Gavino3o"},"content":" public void parse_delete_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"delete non-integer\");","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidTaskNumberException);","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"The delete command needs to be followed up by an integer number!\\n\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Gavino3o":202}},{"path":"src/test/java/bob/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidTaskNumberException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" public void getTask_validIndex_success() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" Task t1 \u003d new Todo(\"todo task 1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" Task t2 \u003d new Todo(\"todo task 2\");","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" Task t3 \u003d new Todo(\"todo task 3\");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" taskList.addTask(t1);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" taskList.addTask(t2);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" taskList.addTask(t3);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" assertEquals(t1, taskList.getTask(0));","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" public void getTask_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" Task t1 \u003d new Todo(\"todo task 1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" Task t2 \u003d new Todo(\"todo task 2\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" Task t3 \u003d new Todo(\"todo task 3\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" taskList.addTask(t1);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" taskList.addTask(t2);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" taskList.addTask(t3);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" assertEquals(t1, taskList.getTask(100));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidTaskNumberException);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Gavino3o":47}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"deadline return book /by 2019-10-15","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"unmark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"delete 2","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"delete 1","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"delete 1","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"list","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Gavino3o":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":"Gavino3o"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\bob\\*.java","lastModifiedDate":"2023-09-03"},{"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":"Gavino3o"},"content":"java -classpath ..\\bin Bob \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Gavino3o":2,"-":19}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"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":"Gavino3o"},"content":"java -classpath ../bin Bob \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Gavino3o":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"# bob 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":"Gavino3o"},"content":"3. After that, locate the `src/main/java/bob.java` file, right-click it, and choose `Run bob.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":{"Gavino3o":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":"Gavino3o"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"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":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","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":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" mainClass.set(\"bob.Launcher\")","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" archiveBaseName \u003d \"bob\"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":"javafx {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Gavino3o":14,"-":40}},{"path":"src/main/java/bob/Bob.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextGenerator;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" * A ChatBot that helps the user note down todos, deadlines and events.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" * It can be interacted with via the Command Line Interface","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"public class Bob {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" private static final String defaultDirectoryPath \u003d \"data/\";","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" private static final String defaultFileName \u003d \"Bob.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" private StorageFile storageFile;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" private TextUi textUi;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" private boolean isActive;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the Bob Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" * @param fileDirectoryPath Relative path to directory containing save file","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" * @param fileName Name of save file","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" public Bob(String fileDirectoryPath, String fileName) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" textUi \u003d new TextUi();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" storageFile \u003d new StorageFile(fileDirectoryPath, fileName);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" isActive \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" taskList \u003d storageFile.loadTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" textUi.printErrorMessage(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" * Default constructor for Bob Class that utilises","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" * default directory path and file name.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" public Bob() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" textUi \u003d new TextUi();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" storageFile \u003d new StorageFile(defaultDirectoryPath, defaultFileName);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" isActive \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":" taskList \u003d storageFile.loadTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":" textUi.printErrorMessage(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" * Executes a command to read or modify the task list if user input abides","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" * by a given command format. Returns a crafted String message based on","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" * command executed or error prompted.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":" * @param input User input","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" * @return A message to displayed to user","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" c.execute(taskList, storageFile);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" if (c.isExit()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" isActive \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":" return c.getOutputMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" return TextGenerator.getErrorMessage(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":77,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Gavino3o"},"content":" public boolean isActive() {","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Gavino3o"},"content":" return this.isActive;","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Gavino3o"},"content":" public String getBobWelcomeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Gavino3o"},"content":" return TextGenerator.getWelcomeMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Gavino3o":83,"-":2}},{"path":"src/main/java/bob/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" * Launches the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Gavino3o":12}},{"path":"src/main/java/bob/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.controller.MainWindow;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" * Main Class that setups and initialises the stage and primary scene","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * of the JavaFX GUI of this application.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" private Bob bob \u003d new Bob();","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" MainWindow mainWindow \u003d new MainWindow();","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" mainWindow.setBob(this.bob);","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" mainWindow.setStage(stage);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" mainWindow.initialise();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" stage.setTitle(\"It\u0027s Bob\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" Scene scene \u003d new Scene(mainWindow);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Gavino3o":27}},{"path":"src/main/java/bob/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.enums.CommandType;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidCommandException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextGenerator;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" * The AddCommand Class encapsulates logic that can be executed","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" * to add a specific task to current task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" private CommandType command;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" private String description;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" private String startDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" private String endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" private Task task;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the AddCommand class.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" * @param command Type of AddCommand","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" * @param startDate Start date of task, potentially null","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" * @param endDate End date of task, potentially null","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" * @throws BobInvalidCommandException If CommandType","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" * is not a valid add task command","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" public AddCommand(CommandType command, String description,","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" String startDate, String endDate) throws BobInvalidCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" if (command !\u003d CommandType.TODO \u0026\u0026 command !\u003d CommandType.DEADLINE \u0026\u0026 command !\u003d CommandType.EVENT) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidCommandException(\"You can only add tasks of type: Todo, Deadline and Event\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":" public void execute(TaskList taskList, StorageFile storageFile) throws BobException {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" switch (command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":" case TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" task \u003d new Todo((this.description));","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":" task \u003d new Deadline(this.description, this.endDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" case EVENT:","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" task \u003d new Event(this.description, this.startDate, this.endDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" storageFile.saveTasks(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" public String getOutputMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" return TextGenerator.getAddTaskMessage(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":76}},{"path":"src/main/java/bob/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidTaskNumberException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * A command encapsulates logic that can be executed to interact with the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" * It can be stored an executed at a later instance or be reused.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" * Executes the current command and can modify the current state of the task list or","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" * print out messages.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" * @param taskList Current list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" * @param storageFile Storage file reader and writer","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" * @param ui User Interface reader and writer","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" * @throws BobException if the command is constructed with invalid arguments","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" public abstract void execute(TaskList taskList, StorageFile storageFile) throws BobException;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" * Represents whether the current command should terminate the current application.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" * @return a boolean signifying whether to terminate the program","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" * Returns a message to be displayed to the user after command is executed","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" * successfully. This method should only be called after the execute method","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" * has been called.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" * @return Message to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" public abstract String getOutputMessage() throws BobException;","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":40}},{"path":"src/main/java/bob/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextGenerator;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" * The DeleteCommand class encapsulates logic that can be executed","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" * to delete tasks from the current task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" private int taskNumber;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" private Task task;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the DeleteCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" * @param taskNumber Index of task to be deleted from current list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" public void execute(TaskList taskList, StorageFile storageFile) throws BobException {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" this.task \u003d taskList.getTask(taskNumber - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" taskList.deleteTask(taskNumber);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" storageFile.saveTasks(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" public String getOutputMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" return TextGenerator.getDeleteMessage(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":43}},{"path":"src/main/java/bob/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextGenerator;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * The ExitCommand encapsulates logic to be executed when","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" * the application should be terminated.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" public void execute(TaskList taskList, StorageFile storageFile) throws BobException {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" storageFile.saveTasks(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" public String getOutputMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" return TextGenerator.getFarewellMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":28}},{"path":"src/main/java/bob/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidTaskNumberException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextGenerator;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" * The FindCommand Class encapsulates logic that can be executed","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" * to find tasks with descriptions corresponding to a given keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" private String keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" private TaskList filteredTaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" public void execute(TaskList taskList, StorageFile storageFile) throws BobException {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" filteredTaskList \u003d taskList.keywordFilter(keyword);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" public String getOutputMessage() throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" return TextGenerator.getFindMessage(filteredTaskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Gavino3o":37}},{"path":"src/main/java/bob/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextGenerator;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * The ListCommand encapsulates logic to be executed to print out","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" * the tasks within the current task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" public void execute(TaskList taskList, StorageFile storageFile) throws BobException {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" public String getOutputMessage() throws BobException {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" return TextGenerator.getListMessage(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":29}},{"path":"src/main/java/bob/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.storage.StorageFile;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextGenerator;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import bob.ui.TextUi;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"import org.w3c.dom.Text;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" * The MarkCommand encapsulates logic to be executed to modify the","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" * completion status of a specific task.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" private int taskNumber;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" private Task task;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the MarkCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" * @param taskNumber Index of task to mark/unmark","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" * @param isDone Completion status of task","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" public MarkCommand(int taskNumber, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" public void execute(TaskList taskList, StorageFile storageFile) throws BobException {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" this.task \u003d taskList.getTask(taskNumber - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" if (isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" task.unmarkTask();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" storageFile.saveTasks(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" public String getOutputMessage() throws BobException {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":" return TextGenerator.getMarkMessage(this.task);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":" return TextGenerator.getUnmarkMessage(this.task);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":55}},{"path":"src/main/java/bob/controller/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.controller;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"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":19,"author":{"gitId":"Gavino3o"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" public static DialogBox getBobDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Gavino3o":60}},{"path":"src/main/java/bob/controller/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.controller;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.Bob;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.Main;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" * This control represents a text window consisting of a scroll pane, user input text field,","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" * a button to input text, and a dialog box.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" private final Image userImage \u003d new Image(this.getClass()","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" .getResourceAsStream(\"/images/DefaultUserProfilePic.jpg\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" private final Image bobImage \u003d new Image(this.getClass()","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" .getResourceAsStream(\"/images/Bob.jpg\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" private Bob bob;","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" private Stage stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" * Constructor for the MainWindow Controller","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" public MainWindow() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":" public void setBob(Bob b) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" bob \u003d b;","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":" public void setStage(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" this.stage \u003d stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" * Initialises the interactive components of the chat window.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" public void initialise() {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":" userInput.setOnAction((event) -\u003e handleUserInput());","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" sendButton.setOnMouseClicked((event) -\u003e handleUserInput());","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":" dialogContainer.getChildren().add(DialogBox.getBobDialog(bob.getBobWelcomeMessage(), bobImage));","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Bob\u0027s reply and then appends them to","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Gavino3o"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Gavino3o"},"content":" String response \u003d bob.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Gavino3o"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Gavino3o"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Gavino3o"},"content":" DialogBox.getBobDialog(response, bobImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Gavino3o"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Gavino3o"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Gavino3o"},"content":" if (!bob.isActive()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Gavino3o"},"content":" stage.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Gavino3o":87}},{"path":"src/main/java/bob/enums/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.enums;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * Enumerations for types of commands available to be executed.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"public enum CommandType {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":" BYE, LIST, MARK, UNMARK, TODO, DEADLINE, EVENT, DELETE, FIND, INVALID","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":8}},{"path":"src/main/java/bob/exception/BobCorruptFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * Exception thrown when reading from a corrupted file.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"public class BobCorruptFileException extends BobException {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" * Constructor for the BobCorruptFileException.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * @param errorMessage Shown to standard output","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" public BobCorruptFileException(String errorMessage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" super(\"Your file may be corrupted :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Gavino3o":15}},{"path":"src/main/java/bob/exception/BobException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * A general exception that will be thrown when an executable command","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * encounters an error. Error message will be shown to standard output.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class BobException extends Exception {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" public BobException(String errorMessage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Gavino3o":11}},{"path":"src/main/java/bob/exception/BobInvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * Exception to be thrown when user inputs a string command in","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * an invalid format.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class BobInvalidCommandException extends BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" public BobInvalidCommandException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" super(\"Invalid command format chosen\");","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" public BobInvalidCommandException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":15}},{"path":"src/main/java/bob/exception/BobInvalidTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * Exception thrown when a command that requires an integer number","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * as task number is input wrongly.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class BobInvalidTaskNumberException extends BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" public BobInvalidTaskNumberException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" super(\"Index chosen for task is invalid\");","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" public BobInvalidTaskNumberException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":15}},{"path":"src/main/java/bob/exception/BobMissingArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * Exception thrown when a command that requires an argument is","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * input without one.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class BobMissingArgumentException extends BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" public BobMissingArgumentException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" super(\"You are missing an argument!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" public BobMissingArgumentException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":15}},{"path":"src/main/java/bob/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.command.ExitCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.command.FindCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import bob.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"import bob.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"import bob.enums.CommandType;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobCorruptFileException;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidCommandException;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidTaskNumberException;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobMissingArgumentException;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" * Processes user input or save files to executable commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" * Returns an instance of a Command with specific user input to be executed.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" * @param input Text input to be parsed","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" * @return Executable command based on input","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" * @throws BobException If command given has invalid format","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" public static Command parse(String input) throws BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" String[] inputSplit \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" CommandType commandType \u003d strToCommandType(inputSplit[0].toUpperCase());","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" String argument \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" if (inputSplit.length \u003e\u003d 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" argument \u003d inputSplit[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" case BYE:","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" case LIST:","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" case MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" case UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":" return Parser.parseMarkCommand(commandType, argument);","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" case TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":" return Parser.parseTodoCommand(commandType, argument);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" return Parser.parseDeadlineCommand(commandType, argument);","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" case EVENT:","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":" return Parser.parseEventCommand(commandType, argument);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" case DELETE:","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" return Parser.parseDeleteCommand(argument);","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" case FIND:","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" return Parser.parseFindCommand(argument);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" case INVALID:","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidCommandException(\"I\u0027m sorry! I don\u0027t understand the command :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidCommandException(\"I\u0027m sorry! Something went wrong when processing your command :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" private static Command parseMarkCommand(CommandType commandType, String argument)","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" if (argument.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidTaskNumberException(\"Give me a task number to mark/unmark as done!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" return new MarkCommand(Integer.parseInt(argument), commandType \u003d\u003d CommandType.MARK);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidTaskNumberException(\"The mark/unmark command \"","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Gavino3o"},"content":" + \"needs to be followed up by an integer number!\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Gavino3o"},"content":" private static Command parseTodoCommand(CommandType commandType, String argument)","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Gavino3o"},"content":" throws BobMissingArgumentException, BobInvalidCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Gavino3o"},"content":" if (argument.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Gavino3o"},"content":" throw new BobMissingArgumentException(\"The description of your todo \"","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Gavino3o"},"content":" + \"should not be empty! Try:\\ntodo [description]\");","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"Gavino3o"},"content":" return new AddCommand(commandType, argument, null, null);","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"Gavino3o"},"content":" private static Command parseDeadlineCommand(CommandType commandType, String argument)","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Gavino3o"},"content":" throws BobMissingArgumentException, BobInvalidCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Gavino3o"},"content":" if (argument.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"Gavino3o"},"content":" throw new BobMissingArgumentException(\"The description of your deadline should not be empty!\"","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Gavino3o"},"content":" + \" Try:\\ndeadline [description] /by [duedate]\");","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"Gavino3o"},"content":" String[] bySplit \u003d argument.split(\" /by \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"Gavino3o"},"content":" if (bySplit.length !\u003d 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidCommandException(\"Incorrect deadline command format!\"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Gavino3o"},"content":" + \" It should be:\\ndeadline [description] /by [duedate]\");","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"Gavino3o"},"content":" return new AddCommand(commandType, bySplit[0], null, bySplit[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"Gavino3o"},"content":" private static Command parseEventCommand(CommandType commandType, String argument)","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Gavino3o"},"content":" throws BobMissingArgumentException, BobInvalidCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Gavino3o"},"content":" if (argument.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"Gavino3o"},"content":" throw new BobMissingArgumentException(\"The description of your event should not be empty! Try:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Gavino3o"},"content":" + \"event [description] /from [start] /to [end]\");","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"Gavino3o"},"content":" String[] descSplit \u003d argument.split(\" /from \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"Gavino3o"},"content":" if (descSplit.length !\u003d 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidCommandException(\"Incorrect event command format! It should be:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Gavino3o"},"content":" + \"event [description] /from [start] /to [end]\");","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"Gavino3o"},"content":" String[] periodSplit \u003d descSplit[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"Gavino3o"},"content":" if (periodSplit.length !\u003d 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidCommandException(\"Incorrect event command format! It should be:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Gavino3o"},"content":" + \"event [description] /from [start] /to [end]\");","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"Gavino3o"},"content":" return new AddCommand(commandType, descSplit[0], periodSplit[0], periodSplit[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"Gavino3o"},"content":" private static Command parseDeleteCommand(String argument) throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"Gavino3o"},"content":" if (argument.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidTaskNumberException(\"Give me a task number to delete!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"Gavino3o"},"content":" return new DeleteCommand(Integer.parseInt(argument));","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"Gavino3o"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidTaskNumberException(\"The delete command needs to be followed up \"","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"Gavino3o"},"content":" + \"by an integer number!\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Gavino3o"},"content":" private static Command parseFindCommand(String argument) {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Gavino3o"},"content":" return new FindCommand(argument);","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Gavino3o"},"content":" private static CommandType strToCommandType(String s) {","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"Gavino3o"},"content":" return CommandType.valueOf(s);","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"Gavino3o"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"Gavino3o"},"content":" return CommandType.INVALID;","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"Gavino3o"},"content":" * Returns an instance of a Task after processing a String in stored format.","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"Gavino3o"},"content":" * @param inputString Text input to be parsed","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"Gavino3o"},"content":" * @return An instance of Task based on input string","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"Gavino3o"},"content":" * @throws BobException If input string has incorrect format","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"Gavino3o"},"content":" public static Task parseStoredTask(String inputString) throws BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"Gavino3o"},"content":" String[] split \u003d inputString.split(\"\\\\|\");","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"Gavino3o"},"content":" String commandType \u003d split[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"Gavino3o"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"Gavino3o"},"content":" case \"T\":","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"Gavino3o"},"content":" return new Todo(split[2], Integer.parseInt(split[1]) \u003d\u003d 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"Gavino3o"},"content":" case \"D\":","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"Gavino3o"},"content":" return new Deadline(split[2], split[3], Integer.parseInt(split[1]) \u003d\u003d 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"Gavino3o"},"content":" case \"E\":","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"Gavino3o"},"content":" return new Event(split[2], split[3], split[4], Integer.parseInt(split[1]) \u003d\u003d 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":166,"author":{"gitId":"Gavino3o"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":168,"author":{"gitId":"Gavino3o"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":169,"author":{"gitId":"Gavino3o"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":170,"author":{"gitId":"Gavino3o"},"content":" throw new BobCorruptFileException(\"Your save file might be corrupted :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":171,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":173,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":173}},{"path":"src/main/java/bob/storage/StorageFile.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" * Handles reading and writing save files from the system.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":"public class StorageFile {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" private String fileDirectoryPath;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" private String fileName;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the StorageFile class.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" * @param fileDirectoryPath Relative path to directory containing save file","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" * @param fileName Name of save file","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" public StorageFile(String fileDirectoryPath, String fileName) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" this.fileDirectoryPath \u003d fileDirectoryPath;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" this.fileName \u003d fileName;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" * Saves the current state of tasks by writing into a .txt file based on relative","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" * file path determined when current object instantiated.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" * @param taskList List of tasks to be written into save file","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" * @throws BobException If there is error when accessing current state of task list","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" public void saveTasks(TaskList taskList) throws BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" this.checkDirectoryExists();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" FileWriter fileWriter \u003d new FileWriter(this.fileDirectoryPath + this.fileName);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" fileWriter.write(taskList.getTask(i).convertToFileFormat() + System.lineSeparator());","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" throw new BobException(\"Something went wrong when saving your tasks :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" * Reads from save file and changes current memory state of application, effective loading","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" * tasks stored in previous sessions.","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" * @return A TaskList of previously saved tasks","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" * @throws BobException if save file has lines with incorrect format","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" public TaskList loadTasks() throws BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" this.checkDirectoryExists();","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" File taskFile \u003d new File(this.fileDirectoryPath + this.fileName);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" Scanner fileScanner \u003d new Scanner(taskFile);","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" while (fileScanner.hasNextLine()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":" String currentLine \u003d fileScanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" if (currentLine.isBlank()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" continue;","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" Task task \u003d Parser.parseStoredTask(fileScanner.nextLine());","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":" loadedTasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" fileScanner.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" return new TaskList(loadedTasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Gavino3o"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Gavino3o"},"content":" return new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Gavino3o"},"content":" private void checkDirectoryExists() throws BobException {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Gavino3o"},"content":" File dataDirectory \u003d new File(this.fileDirectoryPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Gavino3o"},"content":" if (!dataDirectory.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Gavino3o"},"content":" boolean isMkDirSuccess \u003d dataDirectory.mkdir();","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"Gavino3o"},"content":" if (!isMkDirSuccess) {","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"Gavino3o"},"content":" throw new BobException(\"Something went wrong when loading saving/loading your tasks :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":90}},{"path":"src/main/java/bob/task/DateFormatter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" * Formats dates into different patterns.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"public class DateFormatter {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" public static final String DEFAULT_FORMAT \u003d \"MMM d yyyy\";","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" * Formats input String into required pattern if input String abides by","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" * Java LocalDate format. Otherwise, returns original input String.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" * @param inputString Raw String input","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" * @param format Required pattern for date format conversion","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" * @return Date of required pattern, original String may be returned (based on input)","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" public static String format(String inputString, String format) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" LocalDate date \u003d LocalDate.now();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" date \u003d LocalDate.parse(inputString);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" return date.format(DateTimeFormatter.ofPattern(format));","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" return inputString;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" return date.format(DateTimeFormatter.ofPattern(DateFormatter.DEFAULT_FORMAT));","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":32}},{"path":"src/main/java/bob/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * A Deadline is a task that has a due date. Hence, it stores a date at which the","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * task should be completed by.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" protected String by;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the Deadline Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of Deadline Task","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" * @param by Due date of Deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" this.by \u003d DateFormatter.format(by, \"MMM d yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the Deadline Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" * Instantiates an instance of a deadline and set its completion status","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" * according to boolean value provided.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of Deadline Task","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" * @param by Due date of Deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" * @param isDone Completion status of Deadline Task","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" this.by \u003d DateFormatter.format(by, \"MMM d yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), this.by);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" public String convertToFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" return String.format(\"D|%s|%s\", super.convertToFileFormat(), this.by);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Gavino3o":45}},{"path":"src/main/java/bob/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * An Event is a task that has a time period at which it occurs or should be completed. Hence,","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * it contains a start and end date to represent the time period.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" protected String startDateTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" protected String endDateTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the Event Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of Event task","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" * @param startDateTime Start Time of Event Task","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" * @param endDateTime End Time of Event task","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" public Event(String description, String startDateTime, String endDateTime) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" this.startDateTime \u003d DateFormatter.format(startDateTime, \"MMM d yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" this.endDateTime \u003d DateFormatter.format(endDateTime, \"MMM d yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the Event Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" * Instantiates the event and marks its completion status based on boolean provided.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of Event task","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" * @param startDateTime Start Time of Event Task","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" * @param endDateTime End Time of Event task","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" * @param isDone Completion status of event task","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" public Event(String description, String startDateTime, String endDateTime, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" this.startDateTime \u003d DateFormatter.format(startDateTime, \"MMM d yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" this.endDateTime \u003d DateFormatter.format(endDateTime, \"MMM d yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" return String.format(\"[E]%s (from: %s, to: %s)\", super.toString(), this.startDateTime, this.endDateTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" public String convertToFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" return String.format(\"E|%s|%s|%s\", super.convertToFileFormat(), this.startDateTime, this.endDateTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Gavino3o":48}},{"path":"src/main/java/bob/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * The Task class encapsulates a task in real life. A task contains a description and keeps","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * track of whether the task has been completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the Task Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" * Instantiates an instance of a task that has not been completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the Task Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" * Instantiates an instance of a task based on provided description and","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" * sets the completion status of the class based on provided boolean.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" * @param isDone Completions status of task","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" * Prints an icon to signify if a task is completed.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" * @return X is task is completed, empty space otherwise","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" * Marks this task as completed.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":" * Marks this task as yet to be completed.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" public void unmarkTask() {","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" * Indicates whether the task description contains keyword provided.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" * @param keyword Keyword used to check description","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":" * @return True if task contains keyword, false otherwise","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" public boolean containsKeyword(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":" return this.description.contains(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" public String convertToFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" return String.format(\"%s|%s\", this.isDone ? 1 : 0, this.description);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Gavino3o":78}},{"path":"src/main/java/bob/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidTaskNumberException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" * Represents a list of Tasks that can contain date and be mark/unmark as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" * Acts as a dynamic data structure to be manipulated by user.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" * Constructor of a TaskList.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" * Instantiates an empty array list to store tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" * Constructor of a TaskList.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" * Instantiates an array list of tasks based on given argument.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" * @param tasks ArrayList of tasks to instantiate TaskList","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" * Adds task into current task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" * @param task Task to be added into list","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" * Deletes task in current task list based on index given.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" * Input index is expected to start from 1 instead of 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" * @param num Index of task to be deleted","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" * @return Instance of deleted task","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" * @throws BobInvalidTaskNumberException If index provided is out of bounds.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" public Task deleteTask(int num) throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" return tasks.remove(num - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidTaskNumberException();","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" * Returns number of current tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" * @return number of current tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":" public int size() {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":" * Fetches task from current task list based on provided index.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" * Index is expected to start from 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" * @param num Index of task to be fetched","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" * @return The task at the given index","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":" * @throws BobInvalidTaskNumberException if index provided is out of bounds","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" public Task getTask(int num) throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Gavino3o"},"content":" return this.tasks.get(num);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Gavino3o"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Gavino3o"},"content":" throw new BobInvalidTaskNumberException(\"You are trying to access a non-existent task :O\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Gavino3o"},"content":" + \"Use the command: \\\"list\\\" to find out what tasks you have.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Gavino3o"},"content":" * Creates a new TaskList by filtering existing TaskList","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Gavino3o"},"content":" * with provided keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Gavino3o"},"content":" * @param keyword Keyword used to filter task descriptions","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Gavino3o"},"content":" * @return A filtered TaskList","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Gavino3o"},"content":" public TaskList keywordFilter(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Gavino3o"},"content":" TaskList filteredTasklist \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Gavino3o"},"content":" if (keyword.isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Gavino3o"},"content":" return this;","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Gavino3o"},"content":" for (Task currentTask : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Gavino3o"},"content":" if (currentTask.containsKeyword(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Gavino3o"},"content":" filteredTasklist.addTask(currentTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Gavino3o"},"content":" return filteredTasklist;","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":102}},{"path":"src/main/java/bob/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":" * A Todo is a task that can be done in the future, but has no specific deadline or period","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":" * of which it should be completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * Constructor of Todo Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" * @param description Test description of Todo Task","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" * Constructor of Todo Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" * Instantiates an instance of Todo class with a string description and","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" * a boolean indicating whether the task is done.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" * @param description Text description of Todo Task","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" * @param isDone Completion status of Todo Task","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" public String convertToFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" return String.format(\"T|%s\", super.convertToFileFormat());","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Gavino3o":39}},{"path":"src/main/java/bob/ui/TextGenerator.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidTaskNumberException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":" * Generates text required for ChatBot GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"public class TextGenerator {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" private static final String LOGO \u003d","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" \".-. .-\u0027) .-. .-\u0027) \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" + \"\\\\ ( OO ) \\\\ ( OO ) \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" + \" ;-----.\\\\ .-\u0027),-----. ;-----.\\\\ \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" + \" | .-. | ( OO\u0027 .-. \u0027| .-. | \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" + \" | \u0027-\u0027 /_)/ | | | || \u0027-\u0027 /_) \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" + \" | .-. `. \\\\_) | |\\\\| || .-. `. \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" + \" | | \\\\ | \\\\ | | | || | \\\\ | \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" + \" | \u0027--\u0027 / `\u0027 \u0027-\u0027 \u0027| \u0027--\u0027 / \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" + \" `------\u0027 `-----\u0027 `------\u0027 \";","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" public static String getWelcomeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" return \"Hi, I\u0027m Bob. How can I help you?\";","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" public static String getFarewellMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" return \"Goodbye! I\u0027ll see you next time\";","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" public static String getNumOfTaskMessage(TaskList taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" int numOfTask \u003d taskList.size();","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" if (numOfTask \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" return \"You currently have no tasks! Good Job!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" } else if (numOfTask \u003d\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" return String.format(\"Now you have %d task in your list!\", numOfTask);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" return String.format(\"Now you have %d tasks in your list!\", numOfTask);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" public static String getErrorMessage(Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" public static String getListMessage(TaskList taskList) throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" return getRawList(taskList) + getNumOfTaskMessage(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" public static String getMarkMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":" return \"Great Job! I\u0027ve helped mark this task as done:\\n\" + task.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" public static String getUnmarkMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" return \"No worries! I will help you unmark this task:\\n\" + task.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" public static String getDeleteMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" return \"Foosh! Let it be gone! I\u0027ve helped delete the task:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" + task.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":" public static String getAddTaskMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" return \"I gotchu. New task added to the list:\\n\" + task.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" public static String getFindMessage(TaskList taskList) throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":" String message \u003d \"These are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" return message + getRawList(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" private static String getRawList(TaskList taskList) throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" result.append((i + 1)).append(\". \");","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" result.append(taskList.getTask(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Gavino3o"},"content":" return result.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Gavino3o":79}},{"path":"src/main/java/bob/ui/TextUi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidTaskNumberException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" * Represents the text user interface at which the user reads and writes","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" * commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"public class TextUi {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" private static final String DIVIDER \u003d \"\\n____________________________________________________________\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" private static final String LOGO \u003d","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" \".-. .-\u0027) .-. .-\u0027) \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" + \"\\\\ ( OO ) \\\\ ( OO ) \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" + \" ;-----.\\\\ .-\u0027),-----. ;-----.\\\\ \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" + \" | .-. | ( OO\u0027 .-. \u0027| .-. | \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" + \" | \u0027-\u0027 /_)/ | | | || \u0027-\u0027 /_) \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" + \" | .-. `. \\\\_) | |\\\\| || .-. `. \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" + \" | | \\\\ | \\\\ | | | || | \\\\ | \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" + \" | \u0027--\u0027 / `\u0027 \u0027-\u0027 \u0027| \u0027--\u0027 / \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" + \" `------\u0027 `-----\u0027 `------\u0027 \";","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" * Constructor of the text UI.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":" public TextUi() {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" * Prints a divider acting as a horizontal line break to standard output.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" public void printDivider() {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" System.out.println(DIVIDER);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" * Prints a welcome message to greet the user to standard output.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" public void printWelcomeMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" String welcomeMessage \u003d \"Hi, I\u0027m Bob. How can I help you?\";","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" System.out.println(DIVIDER + LOGO + \"\\n\" + welcomeMessage + DIVIDER);","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":" * Prints a farewell message to user to standard output.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" public void printGoodbyeMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" String goodbyeMessage \u003d \"Goodbye! Bob signing out!\";","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":" System.out.println(goodbyeMessage);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" * Prints out a message to notify user how many tasks are left currently.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" * Prints out lists of task with numbering based on order of creation.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" * @param taskList List of tasks to be counted","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":" public void printListEndMessage(TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" int numOfTasks \u003d taskList.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":" if (numOfTasks \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" System.out.println(\"You currently have no tasks! Good Job!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" if (numOfTasks \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" System.out.printf(\"\\nNow you have %d task in your list!%n\", numOfTasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" System.out.printf(\"\\nNow you have %d tasks in your list!%n\", numOfTasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Gavino3o"},"content":" * Prints out an error message based on error occurred to standard output.","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Gavino3o"},"content":" * @param e Exception caught","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Gavino3o"},"content":" public void printErrorMessage(Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Gavino3o"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Gavino3o"},"content":" * Prints out the list of currently saved tasks to standard output.","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Gavino3o"},"content":" * @param taskList Lists of tasks to be printed","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Gavino3o"},"content":" * @throws BobInvalidTaskNumberException If an error occurs when accessing a task","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Gavino3o"},"content":" public void printListMessage(TaskList taskList) throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Gavino3o"},"content":" printRawList(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Gavino3o"},"content":" printListEndMessage(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Gavino3o"},"content":" * Prints a message to notify the user that a task has been mark/unmark as done to","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Gavino3o"},"content":" * standard output.","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Gavino3o"},"content":" * @param task Task to be mark/unmark","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Gavino3o"},"content":" * @param isDone Completion status of task","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Gavino3o"},"content":" public void printMarkMessage(Task task, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Gavino3o"},"content":" System.out.println();","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Gavino3o"},"content":" if (isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Gavino3o"},"content":" System.out.println(\"Great Job! I\u0027ve helped mark this task as done:\\n\" + task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Gavino3o"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Gavino3o"},"content":" System.out.println(\"No worries! I will help you unmark this task:\\n\" + task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Gavino3o"},"content":" * Prints a message to standard output to notify the user when a task has","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Gavino3o"},"content":" * been successfully deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Gavino3o"},"content":" * @param task Deleted task","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Gavino3o"},"content":" public void printDeleteMessage(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Gavino3o"},"content":" System.out.println(\"Foosh! Let it be gone! I\u0027ve helped delete the task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Gavino3o"},"content":" + task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Gavino3o"},"content":" * Prints a message to standard output notifying the user the required task","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Gavino3o"},"content":" * has been added to current list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Gavino3o"},"content":" * @param task Added task","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Gavino3o"},"content":" public void printAddMessage(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Gavino3o"},"content":" String displayMessage \u003d \"I gotchu. New task added to the list:\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Gavino3o"},"content":" System.out.println(displayMessage + task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Gavino3o"},"content":" * Prints a list of filtered tasks after find command is executed.","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Gavino3o"},"content":" * @param taskList List of filtered tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"Gavino3o"},"content":" * @throws BobInvalidTaskNumberException If an error occurs when trying to access a task","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"Gavino3o"},"content":" public void printFindMessage(TaskList taskList) throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"Gavino3o"},"content":" String displayMessage \u003d \"These are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"Gavino3o"},"content":" System.out.println(displayMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"Gavino3o"},"content":" printRawList(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"Gavino3o"},"content":" private void printRawList(TaskList taskList) throws BobInvalidTaskNumberException {","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"Gavino3o"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"Gavino3o"},"content":" System.out.println((i + 1) + \". \" + taskList.getTask(i).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"Gavino3o"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"Gavino3o"},"content":" * Reads the user input in the Command Line Interface as a whole line.","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"Gavino3o"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"Gavino3o"},"content":" * @return A String representing user input","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"Gavino3o"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"Gavino3o"},"content":" public String readTextInput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"Gavino3o"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"Gavino3o"},"content":" } //TODO: Remove this?","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Gavino3o":162}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"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-04"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":" \u003cLabel fx:id\u003d\"dialog\" alignment\u003d\"BOTTOM_RIGHT\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" \u003cFont name\u003d\"Century Gothic Bold\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" \u003c/font\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"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":16,"author":{"gitId":"Gavino3o"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Gavino3o":20}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"\u003c?import javafx.scene.effect.Blend?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"\u003cfx:root maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.AnchorPane\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" opacity\u003d\"0.5\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" text\u003d\"Tell Bob something...\" AnchorPane.bottomAnchor\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":" \u003cFont name\u003d\"Century Gothic\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" \u003ceffect\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" \u003cBlend /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" \u003c/effect\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" \u003cFont name\u003d\"Dubai Medium\" size\u003d\"12.666666984558105\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"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":25,"author":{"gitId":"Gavino3o"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" style\u003d\"-fx-background-color: #C5E0BD;\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Gavino3o":30}},{"path":"src/test/java/bob/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"import bob.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import bob.command.ExitCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import bob.command.FindCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import bob.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"import bob.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidCommandException;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidTaskNumberException;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobMissingArgumentException;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" public void parse_bye_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof ExitCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" public void parse_list_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof ListCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" public void parse_mark_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"mark 1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof MarkCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Gavino3o"},"content":" public void parse_unmark_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"unmark 3\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof MarkCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Gavino3o"},"content":" public void parse_todo_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"todo learn origami\");","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof AddCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Gavino3o"},"content":" public void parse_deadline_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"deadline make origami /by 2023-09-10\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof AddCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Gavino3o"},"content":" public void parse_event_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"event summer fiesta /from 2023-09-10 /to /2023-09-12\");","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof AddCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Gavino3o"},"content":" public void parse_find_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"find book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof FindCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Gavino3o"},"content":" public void parse_delete_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"delete 2\");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Gavino3o"},"content":" assertTrue(c instanceof DeleteCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Gavino3o"},"content":" public void parse_mark_exceptionThrown1() {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"mark\");","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidTaskNumberException);","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"Give me a task number to mark/unmark as done!\", e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Gavino3o"},"content":" public void parse_mark_exceptionThrown2() {","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"mark egg sandwich\");","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidTaskNumberException);","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"The mark/unmark command needs to be followed up by an integer number!\\n\", e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"Gavino3o"},"content":" public void parse_unmark_exceptionThrown1() {","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"unmark\");","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidTaskNumberException);","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"Give me a task number to mark/unmark as done!\", e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"Gavino3o"},"content":" public void parse_unmark_exceptionThrown2() {","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"unmark test\");","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidTaskNumberException);","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"The mark/unmark command needs to be followed up by an integer number!\\n\", e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"Gavino3o"},"content":" public void parse_todo_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobMissingArgumentException);","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"The description of your todo should not be empty! Try:\\ntodo [description]\", e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"Gavino3o"},"content":" public void parse_deadline_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"deadline /by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidCommandException);","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"Incorrect deadline command format! It should be:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"Gavino3o"},"content":" + \"deadline [description] /by [duedate]\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"Gavino3o"},"content":" public void parse_event_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"event indonesia trip /from Monday\");","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":186,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidCommandException);","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"Incorrect event command format! It should be:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":188,"author":{"gitId":"Gavino3o"},"content":" + \"event [description] /from [start] /to [end]\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":191,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"Gavino3o"},"content":" public void parse_delete_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"Gavino3o"},"content":" Command c \u003d Parser.parse(\"delete non-integer\");","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidTaskNumberException);","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"Gavino3o"},"content":" assertEquals(\"The delete command needs to be followed up by an integer number!\\n\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Gavino3o":202}},{"path":"src/test/java/bob/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"package bob.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"import bob.exception.BobInvalidTaskNumberException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":" public void getTask_validIndex_success() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Gavino3o"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Gavino3o"},"content":" Task t1 \u003d new Todo(\"todo task 1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Gavino3o"},"content":" Task t2 \u003d new Todo(\"todo task 2\");","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Gavino3o"},"content":" Task t3 \u003d new Todo(\"todo task 3\");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Gavino3o"},"content":" taskList.addTask(t1);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Gavino3o"},"content":" taskList.addTask(t2);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Gavino3o"},"content":" taskList.addTask(t3);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Gavino3o"},"content":" assertEquals(t1, taskList.getTask(0));","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Gavino3o"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Gavino3o"},"content":" public void getTask_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Gavino3o"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Gavino3o"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Gavino3o"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Gavino3o"},"content":" Task t1 \u003d new Todo(\"todo task 1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Gavino3o"},"content":" Task t2 \u003d new Todo(\"todo task 2\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Gavino3o"},"content":" Task t3 \u003d new Todo(\"todo task 3\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Gavino3o"},"content":" taskList.addTask(t1);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Gavino3o"},"content":" taskList.addTask(t2);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Gavino3o"},"content":" taskList.addTask(t3);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Gavino3o"},"content":" assertEquals(t1, taskList.getTask(100));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Gavino3o"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Gavino3o"},"content":" } catch (BobException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Gavino3o"},"content":" assertTrue(e instanceof BobInvalidTaskNumberException);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Gavino3o"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Gavino3o"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Gavino3o":47}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Gavino3o"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Gavino3o"},"content":"deadline return book /by 2019-10-15","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Gavino3o"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Gavino3o"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Gavino3o"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Gavino3o"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Gavino3o"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Gavino3o"},"content":"unmark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Gavino3o"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Gavino3o"},"content":"delete 2","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Gavino3o"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Gavino3o"},"content":"delete 1","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Gavino3o"},"content":"delete 1","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Gavino3o"},"content":"list","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Gavino3o"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Gavino3o":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":"Gavino3o"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\bob\\*.java","lastModifiedDate":"2023-09-03"},{"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":"Gavino3o"},"content":"java -classpath ..\\bin Bob \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Gavino3o":2,"-":19}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"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":"Gavino3o"},"content":"java -classpath ../bin Bob \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Gavino3o":1,"-":37}}] diff --git a/Gavino3o_ip_master/commits.json b/Gavino3o_ip_master/commits.json index eda08eba..5ecbd126 100644 --- a/Gavino3o_ip_master/commits.json +++ b/Gavino3o_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Gavino3o":[{"date":"2023-08-21","commitResults":[{"hash":"db4cbe58de4bd1a12cffc98e729bb3c09468e070","isMergeCommit":false,"messageTitle":"Rename bot and modify greet and exit messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":6}}},{"hash":"35e88321179c20fac8245d17852f0f51fd5f0792","isMergeCommit":false,"messageTitle":"Add echo functionality and refactor print messages","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":12}}},{"hash":"0d39399fcbb7205af70c9c586c6f3e61e81f8709","isMergeCommit":false,"messageTitle":"Add task storing and list task","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}}]},{"date":"2023-08-22","commitResults":[{"hash":"6e391e086577835c73613614f33700e8fbaf445c","isMergeCommit":false,"messageTitle":"Add Mark as Done functionality","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":14}}},{"hash":"256964946e95e3e08c62a4247bcdbe6751689c86","isMergeCommit":false,"messageTitle":"Add Todos, Deadlines and Events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":18}}},{"hash":"cf789343ed88dc1de7d87d1c96ec757c420b4f5d","isMergeCommit":false,"messageTitle":"Implement initial testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":2,"deletions":1}}},{"hash":"4c9e18fb121a3a3a6b7d0e670f7a65114884c396","isMergeCommit":false,"messageTitle":"Add initial error handling for incorrect user inputs","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":9}}},{"hash":"a2a1171bb12a8cffb7a45df026ed7efd7499ff94","isMergeCommit":false,"messageTitle":"Refactor response process to use ArrayList and recursion","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":98}}},{"hash":"d3f8fd1f28c616c91713c97d5b94b54b19020eb6","isMergeCommit":false,"messageTitle":"Add delete task functionality","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}},{"hash":"0b08b764200ee1abd9aa95c54db76393015a1a01","isMergeCommit":false,"messageTitle":"Refactor response processing to use enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":9}}},{"hash":"3b061ee24991a412b6e4ab0c318ed2f0a7c316bb","isMergeCommit":false,"messageTitle":"Update automated test to include delete","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":4,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"c6b8e568b3345e9b7fcb14e8d976421040f05649","isMergeCommit":false,"messageTitle":"Fix incorrect command exception handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":132,"deletions":111}}}]},{"date":"2023-08-27","commitResults":[{"hash":"8eee1eb68d0786d278650a7e0d5e818c3defd32b","isMergeCommit":false,"messageTitle":"Rename files from Duke to Bob","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":28},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"92ed998e5bae035f9a29122ad1e619f638d52995","isMergeCommit":false,"messageTitle":"Create packages and reallocate relevant files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}}]},{"date":"2023-08-28","commitResults":[{"hash":"dc1f431c3c1dfc52db496b8b5202032794ff94ea","isMergeCommit":false,"messageTitle":"Add task saving functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":143,"deletions":36}}},{"hash":"28443fc1b5e80145ee2f475e3e9b90ff029be96e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"eccd73929d2dd8a103a6aa401cd760bdeb3604be","isMergeCommit":false,"messageTitle":"Add Date recognition for Deadlines and Events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":12}}},{"hash":"96b2b69734de9c97da0d50b58d59680caa581ccf","isMergeCommit":false,"messageTitle":"Update input test to expect LocalDate format pattern","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"012d60708ea3f2b571474a4843cd0fc619ef1dca","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"afe37a1e13dc432edcc98e50e11b46fa7c79f6bd","isMergeCommit":false,"messageTitle":"Implement initial TaskList and related Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":3}}},{"hash":"a6e93afa7b0560a1a5cb1fb91eb8cb9cb91caa9f","isMergeCommit":false,"messageTitle":"Implement initial Command Classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":306,"deletions":8}}},{"hash":"3b1f6cd44bc0f4c54b071365945aa580d8ba5c3f","isMergeCommit":false,"messageTitle":"Implement Parser, StorageFile and related Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":25}}},{"hash":"f41a9d46c8256632bbb572b86966b0b0d958147a","isMergeCommit":false,"messageTitle":"Refactor Parser parse method for readability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":40}}}]},{"date":"2023-08-29","commitResults":[{"hash":"6027585078082754a842c7b97df3984b1ba616c0","isMergeCommit":false,"messageTitle":"Implement TextUi to print Command and Error messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":22}}},{"hash":"849cfb894c5583a86c1eb70294ff6494f55c254b","isMergeCommit":false,"messageTitle":"Refactor Bob.java to use newly decoupled classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":263}}},{"hash":"14b99b2553155684c074ddb5907c30cc6921a21f","isMergeCommit":false,"messageTitle":"Bugfix for incorrect BobInvalidTaskNumberException message in TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"a300af20f5a934f642993539ca39a739245a0037","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"2e5a515f234c82e4cc64269659627d8ebc1b8de9","isMergeCommit":false,"messageTitle":"Create and reallocate all packages and classes in new Bob package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":70}}},{"hash":"02c1e4718387cd661f0dc118f2f8b576be1b0a62","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"b1706a43f864a519d2aac0fe6635fbe9e1e4ec91","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/Gavino3o/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"2578c20661ef6ce160af857654fd8c9628340b8c","isMergeCommit":false,"messageTitle":"Add JUnit test for Parser and TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":206,"deletions":1}}},{"hash":"f8791bc4b0850391365264d717f308b517d7b903","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"744a4454fc95e9f3299821e2c05f08c22d16f021","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to the code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":311,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"e4ca0885eb4ec38557f6f8366dc43c774d381d0f","isMergeCommit":false,"messageTitle":"Fix line spacing in BobArgumentException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"cc808c9ccdb375c4f9a9756170e164d12c7d2901","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"f6ba907091cf77ce82634eb1414f9366c4e48f78","isMergeCommit":false,"messageTitle":"Fix switch case indentation according to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":34}}},{"hash":"66d847b45f031f1c7f7efb14497491df6b55718d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"24849911eab22a1068787fe523b5e3468adcf582","isMergeCommit":false,"messageTitle":"Implement Find Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":19}}},{"hash":"588976572abb24ada9c0a2477e99cea15e36fe78","isMergeCommit":false,"messageTitle":"Fix missing param descriptions in JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":55}}},{"hash":"ea6dff8549b395e8ae4ab0483d09a2d9526de8c1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"2037b076f496a55e73c8a3c612531f08e94acc93","isMergeCommit":false,"messageTitle":"Fix ordering and spacing of import statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":5}}},{"hash":"9e55d3fcfc0c7ca0bec786ae313268018baf113d","isMergeCommit":false,"messageTitle":"Add JUnit testing for delete and find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":4}}}]},{"date":"2023-09-03","commitResults":[{"hash":"9e725217a5a65ad84e465dfdd829dbf868c5c557","isMergeCommit":false,"messageTitle":"Add CheckStyle and fix CheckStyle violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":209,"deletions":167},"md":{"insertions":2,"deletions":2}}},{"hash":"c184db4525a2c490da5a99e480f864f28a87b18d","isMergeCommit":false,"messageTitle":"Add blank line skipping when loading Tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"a9a7ae9855d80e1f81d7c4f1c073db0d7551aef4","isMergeCommit":false,"messageTitle":"Fix text-ui-test incorrect file path","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"1a6158b5ee1d4d741fa855bd5553616c9af8f983","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Gavino3o":{"java":1413,"md":2,"fxml":0,"sh":1,"bat":2,"gradle":6,"txt":15}},"authorContributionVariance":{"Gavino3o":100657.29},"authorDisplayNameMap":{"Gavino3o":"CS2103T-W13-1 GAVI.. ZHE"}} +{"authorDailyContributionsMap":{"Gavino3o":[{"date":"2023-08-21","commitResults":[{"hash":"db4cbe58de4bd1a12cffc98e729bb3c09468e070","isMergeCommit":false,"messageTitle":"Rename bot and modify greet and exit messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":6}}},{"hash":"35e88321179c20fac8245d17852f0f51fd5f0792","isMergeCommit":false,"messageTitle":"Add echo functionality and refactor print messages","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":12}}},{"hash":"0d39399fcbb7205af70c9c586c6f3e61e81f8709","isMergeCommit":false,"messageTitle":"Add task storing and list task","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}}]},{"date":"2023-08-22","commitResults":[{"hash":"6e391e086577835c73613614f33700e8fbaf445c","isMergeCommit":false,"messageTitle":"Add Mark as Done functionality","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":14}}},{"hash":"256964946e95e3e08c62a4247bcdbe6751689c86","isMergeCommit":false,"messageTitle":"Add Todos, Deadlines and Events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":18}}},{"hash":"cf789343ed88dc1de7d87d1c96ec757c420b4f5d","isMergeCommit":false,"messageTitle":"Implement initial testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":2,"deletions":1}}},{"hash":"4c9e18fb121a3a3a6b7d0e670f7a65114884c396","isMergeCommit":false,"messageTitle":"Add initial error handling for incorrect user inputs","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":9}}},{"hash":"a2a1171bb12a8cffb7a45df026ed7efd7499ff94","isMergeCommit":false,"messageTitle":"Refactor response process to use ArrayList and recursion","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":98}}},{"hash":"d3f8fd1f28c616c91713c97d5b94b54b19020eb6","isMergeCommit":false,"messageTitle":"Add delete task functionality","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}},{"hash":"0b08b764200ee1abd9aa95c54db76393015a1a01","isMergeCommit":false,"messageTitle":"Refactor response processing to use enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":9}}},{"hash":"3b061ee24991a412b6e4ab0c318ed2f0a7c316bb","isMergeCommit":false,"messageTitle":"Update automated test to include delete","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":4,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"c6b8e568b3345e9b7fcb14e8d976421040f05649","isMergeCommit":false,"messageTitle":"Fix incorrect command exception handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":132,"deletions":111}}}]},{"date":"2023-08-27","commitResults":[{"hash":"8eee1eb68d0786d278650a7e0d5e818c3defd32b","isMergeCommit":false,"messageTitle":"Rename files from Duke to Bob","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":28},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"92ed998e5bae035f9a29122ad1e619f638d52995","isMergeCommit":false,"messageTitle":"Create packages and reallocate relevant files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}}]},{"date":"2023-08-28","commitResults":[{"hash":"dc1f431c3c1dfc52db496b8b5202032794ff94ea","isMergeCommit":false,"messageTitle":"Add task saving functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":143,"deletions":36}}},{"hash":"28443fc1b5e80145ee2f475e3e9b90ff029be96e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"eccd73929d2dd8a103a6aa401cd760bdeb3604be","isMergeCommit":false,"messageTitle":"Add Date recognition for Deadlines and Events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":12}}},{"hash":"96b2b69734de9c97da0d50b58d59680caa581ccf","isMergeCommit":false,"messageTitle":"Update input test to expect LocalDate format pattern","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"012d60708ea3f2b571474a4843cd0fc619ef1dca","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"afe37a1e13dc432edcc98e50e11b46fa7c79f6bd","isMergeCommit":false,"messageTitle":"Implement initial TaskList and related Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":3}}},{"hash":"a6e93afa7b0560a1a5cb1fb91eb8cb9cb91caa9f","isMergeCommit":false,"messageTitle":"Implement initial Command Classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":306,"deletions":8}}},{"hash":"3b1f6cd44bc0f4c54b071365945aa580d8ba5c3f","isMergeCommit":false,"messageTitle":"Implement Parser, StorageFile and related Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":25}}},{"hash":"f41a9d46c8256632bbb572b86966b0b0d958147a","isMergeCommit":false,"messageTitle":"Refactor Parser parse method for readability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":40}}}]},{"date":"2023-08-29","commitResults":[{"hash":"6027585078082754a842c7b97df3984b1ba616c0","isMergeCommit":false,"messageTitle":"Implement TextUi to print Command and Error messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":22}}},{"hash":"849cfb894c5583a86c1eb70294ff6494f55c254b","isMergeCommit":false,"messageTitle":"Refactor Bob.java to use newly decoupled classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":263}}},{"hash":"14b99b2553155684c074ddb5907c30cc6921a21f","isMergeCommit":false,"messageTitle":"Bugfix for incorrect BobInvalidTaskNumberException message in TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"a300af20f5a934f642993539ca39a739245a0037","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"2e5a515f234c82e4cc64269659627d8ebc1b8de9","isMergeCommit":false,"messageTitle":"Create and reallocate all packages and classes in new Bob package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":70}}},{"hash":"02c1e4718387cd661f0dc118f2f8b576be1b0a62","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"b1706a43f864a519d2aac0fe6635fbe9e1e4ec91","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/Gavino3o/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"2578c20661ef6ce160af857654fd8c9628340b8c","isMergeCommit":false,"messageTitle":"Add JUnit test for Parser and TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":206,"deletions":1}}},{"hash":"f8791bc4b0850391365264d717f308b517d7b903","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"744a4454fc95e9f3299821e2c05f08c22d16f021","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to the code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":311,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"e4ca0885eb4ec38557f6f8366dc43c774d381d0f","isMergeCommit":false,"messageTitle":"Fix line spacing in BobArgumentException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"cc808c9ccdb375c4f9a9756170e164d12c7d2901","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"f6ba907091cf77ce82634eb1414f9366c4e48f78","isMergeCommit":false,"messageTitle":"Fix switch case indentation according to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":34}}},{"hash":"66d847b45f031f1c7f7efb14497491df6b55718d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"24849911eab22a1068787fe523b5e3468adcf582","isMergeCommit":false,"messageTitle":"Implement Find Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":19}}},{"hash":"588976572abb24ada9c0a2477e99cea15e36fe78","isMergeCommit":false,"messageTitle":"Fix missing param descriptions in JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":55}}},{"hash":"ea6dff8549b395e8ae4ab0483d09a2d9526de8c1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"2037b076f496a55e73c8a3c612531f08e94acc93","isMergeCommit":false,"messageTitle":"Fix ordering and spacing of import statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":5}}},{"hash":"9e55d3fcfc0c7ca0bec786ae313268018baf113d","isMergeCommit":false,"messageTitle":"Add JUnit testing for delete and find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":4}}}]},{"date":"2023-09-03","commitResults":[{"hash":"9e725217a5a65ad84e465dfdd829dbf868c5c557","isMergeCommit":false,"messageTitle":"Add CheckStyle and fix CheckStyle violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":209,"deletions":167},"md":{"insertions":2,"deletions":2}}},{"hash":"c184db4525a2c490da5a99e480f864f28a87b18d","isMergeCommit":false,"messageTitle":"Add blank line skipping when loading Tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"a9a7ae9855d80e1f81d7c4f1c073db0d7551aef4","isMergeCommit":false,"messageTitle":"Fix text-ui-test incorrect file path","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"1a6158b5ee1d4d741fa855bd5553616c9af8f983","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"15477c8d1c99f14fed12174a89740c795071f4e7","isMergeCommit":false,"messageTitle":"Add TextGenerator and Refactor Bob.java for new GUI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":18}}},{"hash":"61670a4991dff96de0a215084be67e2d66334c25","isMergeCommit":false,"messageTitle":"Update build.gradle to include JavaFX v17.0.7","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":2}}},{"hash":"bbf1f0102cf75ccacdd9305f1ecfe8777ce438e5","isMergeCommit":false,"messageTitle":"Implement initial skeleton of GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":251,"deletions":21}}},{"hash":"7bd71795373ab20d7fdc7b6af0f90fa8e39f9930","isMergeCommit":false,"messageTitle":"Implement basic styling for GUI skeleton","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":24,"deletions":10},"java":{"insertions":1,"deletions":0}}},{"hash":"aaaedd54da3f34c12fc45b5c525614fe1898af88","isMergeCommit":false,"messageTitle":"Add JavaDocs for controllers and Main","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":8}}},{"hash":"5b673eebafbc2c0f7c165079a6b84e46a2b1bd96","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Gavino3o":{"java":1753,"md":2,"fxml":50,"sh":1,"bat":2,"gradle":14,"txt":15}},"authorContributionVariance":{"Gavino3o":99917.96},"authorDisplayNameMap":{"Gavino3o":"CS2103T-W13-1 GAVI.. ZHE"}} diff --git a/GlendaChong_ip_master/authorship.json b/GlendaChong_ip_master/authorship.json index b89b2e43..839d8dd1 100644 --- a/GlendaChong_ip_master/authorship.json +++ b/GlendaChong_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":"GlendaChong"},"content":"// mainClass.set(\"duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" mainClassName \u003d \u0027duke.Duke\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"GlendaChong":2,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"T | 1 | read book","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"D | 1 | project | 12 Dec 2023 | 7.00PM","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"E | 0 | testing| from 12/12 | to 12/12","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"GlendaChong":3}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" * Duke is a personal assistant chatbot that helps","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" * to keep track of various tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" public static final String FILE_PATH \u003d \"data/duke.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Duke object.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" * @param filePath The filepath for loading and saving the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" * Runs the Duke application, handling user interactions.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" // Get the next task input","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" String command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" Command c \u003d Parser.parse(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" scanner.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" * The main method to start the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" * @param args Command-line arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" new Duke(FILE_PATH).run();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"GlendaChong":65,"-":3}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The AddCommand class represents a command to add a new task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Constructs an AddCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param task Task to be added into the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" taskList.add(this.task);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" ui.showAddedTask(this.task, taskList.getNumberOfTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":29}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The Command class is an abstract base class for different types of commands in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" * Executes the command, performing specific actions based on the type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" * @param tasks The TaskList containing tasks to be manipulated.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param ui The Ui instance for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" * @param storage The Storage instance for loading and saving tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If there is an error while executing the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" * @return true if the command is an ExitCommand, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" return (this instanceof ExitCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":31}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The DeleteCommand class represents a command to deleted from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Constructs a DeleteCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber Task number corresponding to the task to be deleted from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" if (taskNumber \u003e taskList.getNumberOfTasks()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Task \" + taskNumber + \" does not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ui.showDeletedTask(taskList.getTask(taskNumber), taskList.getNumberOfTasks() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" taskList.remove(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":32}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" * The ExitCommand class represents a command to quit the Duke application once done.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" ui.showGoodbyeMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":15}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" * The FindCommand class represents a command to find tasks that match a given keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" String keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" * Constructs a FindCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" * @param keyword Keyword to be searched from the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" for (Task task: taskList.getList()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" if (task.toString().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" ui.showMatchingTasksToKeyword(matchingTasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"GlendaChong":37}},{"path":"src/main/java/duke/command/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The InvalidCommand class represents a command that throws an error to users","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" * when they provide an invalid user input as the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" private final DukeException error;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" public InvalidCommand(DukeException error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" this.error \u003d error;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(this.error.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":22}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The ListCommand class represents a command to list out all the tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" * in the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" ui.showAllTasks(taskList.getList());","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":17}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The MarkCommand class represents a command to mark the specified task in the list as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Construcst a MarkCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber The task number corresponding to the task, to be marked done.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public MarkCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" if (taskNumber \u003e taskList.getNumberOfTasks()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Task \" + taskNumber + \" does not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ui.showTaskMarkedAsDone(taskList.getTask(taskNumber));","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":31}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The UnmarkCommand class represents a command to be marked undone in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Construcst an UnmarkCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber The task number corresponding to the task, to be marked undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public UnmarkCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" if (taskNumber \u003e taskList.getNumberOfTasks()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Task \" + taskNumber + \" does not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ui.showTaskMarkedAsUndone(taskList.getTask(taskNumber));","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":31}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The DukeException class represents an exception that can be thrown by the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * Constructs a DukeException with a default error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" public DukeException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" super(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" * Constructs a DukeException with a custom error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" * @param message The custom error message explaining the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":23}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.command.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * The Parser class deals with interpreting the user inputs","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" * and generating corresponding commands if valid.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" * Returns a command based on the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" * If the command is invalid, an exception is thrown.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * @param userInput The input provided by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" * @return A Command object representing the user\u0027s intended action.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If there is an error in the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" public static Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" String[] splitCommand \u003d userInput.trim().split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" switch (splitCommand[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" case \"list\":","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" case \"bye\":","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" // Add event task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\"event .*/from .* /to .*\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! The format of an event task is \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" \"\\\"event TASK_DESCRIPTION /from START /to END\\\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":"// String[] taskParts \u003d splitCommand[1].split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" String description \u003d splitCommand[1].split(\"/from\")[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" String[] dateAndTime \u003d splitCommand[1].split(\"/from\")[1].split(\"/to\");","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" return new AddCommand(new Event(description, dateAndTime[0], dateAndTime[1]));","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" // Add deadline task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" return parseDeadlineCommand(splitCommand[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" // Add to-do task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\"todo .*\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" return new AddCommand(new ToDo(splitCommand[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\".* \\\\d+\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" String errorMessage \u003d String.format(","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" \"OOPS!!! The format of this command is \\\"%s TASK_NUMBER\\\". \"","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" + \"Task number must exist in the task list.\", splitCommand[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" int taskNumber \u003d Integer.parseInt(splitCommand[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" switch (splitCommand[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" return new MarkCommand(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" return new UnmarkCommand(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" return new DeleteCommand(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\"find .*\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! The description of a find command cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":" return new FindCommand(splitCommand[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" * Returns a command for deadline tasks for valid user inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" * Else, exception is thrown.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" * @param stringCommand The deadline command provided by the user, excluding the task type.","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":" * @return A Command object with a deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" * @throws DateTimeParseException If the date or time inputs are invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If the deadline command has an invalid input format.","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" public static Command parseDeadlineCommand(String stringCommand)","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":" throws DateTimeParseException, DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" // Add deadline task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":" String errorMessage \u003d \"OOPS!!! The format of a deadline task is \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" \"\\\"deadline TASK_DESCRIPTION /by DD/MM/YYYY 24H_TIME\\\"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":" if (!stringCommand.matches(\".*/by \\\\d{1,2}/\\\\d{1,2}/\\\\d{4} \\\\d{4}\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" String[] taskParts \u003d stringCommand.split(\" /by \");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" if (taskParts.length !\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" String[] dateAndTime \u003d taskParts[1].split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":" LocalDate date \u003d parseDate(dateAndTime[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":" LocalTime time \u003d parseTime(dateAndTime[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" return new AddCommand(new Deadline(taskParts[0], date, time));","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Invalid date or time format in deadline task.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":" * Parses a date string and returns a LocalDate object.","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":" * @param date The date of the deadline for the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" * @return A LocalDate object of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":" public static LocalDate parseDate(String date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"GlendaChong"},"content":" return LocalDate.parse(date, DateTimeFormatter.ofPattern(\"d/MM/yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"GlendaChong"},"content":" * Parses a time string and returns a LocalTime object.","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"GlendaChong"},"content":" * @param time The time of the deadline for the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"GlendaChong"},"content":" * @return A LocalTime object of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"GlendaChong"},"content":" public static LocalTime parseTime(String time) {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"GlendaChong"},"content":" return LocalTime.parse(time, DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":137}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" * The Storage class deals with savings tasks in the file and","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * loading tasks from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Storage object.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" * @param filePath The filepath of the file containing the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" * Saves the tasks into the file in hard drive.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" * @param tasks The current list of tasks to be saved into the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" * @param ui The user interface of the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" public void save(ArrayList\u003cTask\u003e tasks, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" // Create folder and file","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" // Write tasks into hard disk","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" FileWriter fileWriter \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" fileWriter.write(task.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" * Loads the tasks from the file","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" * @return The ArrayList of the tasks saved into the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If the task type in the file is invalid, or file is not found.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":" String fullTaskCommand \u003d scanner.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" String[] taskParts \u003d fullTaskCommand.split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" String taskType \u003d taskParts[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" int taskStatus \u003d Integer.parseInt(taskParts[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" Task todo \u003d new ToDo(taskParts[2].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" tasks.add(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":" todo.markStatusFromFile(taskStatus);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" String datePart \u003d taskParts[3].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":" String timePart \u003d taskParts[4].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" LocalDate date \u003d LocalDate.parse(datePart, DateTimeFormatter.ofPattern(\"d MMM yyyy\", Locale.US));","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":" String formattedDate \u003d date.format(DateTimeFormatter.ofPattern(\"dd/MM/yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" LocalTime time \u003d LocalTime.parse(timePart, DateTimeFormatter.ofPattern(\"h.mma\", Locale.US));","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":" String formattedTime \u003d time.format(DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" Task deadline \u003d new Deadline(taskParts[2].trim(), formattedDate, formattedTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" deadline.markStatusFromFile(taskStatus);","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" Task event \u003d new Event(taskParts[2].trim(),","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":" taskParts[3].trim().replace(\"from\", \"\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":" taskParts[4].trim().replace(\"to\", \"\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":" tasks.add(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":" event.markStatusFromFile(taskStatus);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"Invalid task type in file: \" + taskType);","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":" scanner.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException | FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"File not found: \" + filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":124}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" * The Deadline class represents a task with a description,","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" * completion status, and a deadline date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" protected LocalDate date;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" protected LocalTime time;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" * @param date LocalDate representation of the date of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * @param time LocalTime representation of the time of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public Deadline(String description, LocalDate date, LocalTime time) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" this.time \u003d time;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" * Constructs the Deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" * @param date String representation of the date of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" * @param time String representation of the time of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" public Deadline(String description, String date, String time) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" this.date \u003d Parser.parseDate(date);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" this.time \u003d Parser.parseTime(time);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" * Returns a formatted string representation of the deadline date.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" * @return A string representing the deadline date in the format \"d MMM yyyy\".","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" public String reformatDate() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" return this.date.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" * Returns a formatted string representation of the deadline time.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" * @return A string representing the deadline time in the format \"h.mma\".","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" public String reformatTime() {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" return this.time.format(DateTimeFormatter.ofPattern(\"h.mma\", Locale.US));","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" return \"[D]\" + super.toString() + \" (by \" + reformatDate() + \" \" + reformatTime() + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" return \"D\" + super.toFileFormat() + \" | \" + reformatDate() + \" | \" + reformatTime() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":71}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The Event class represents a task with a description,","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" * completion status, and a start and end period.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" * Constructs an Event object.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * @param from Start period of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" * @param to End period of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.from \u003d from.trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" this.to \u003d to.trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" return \"[E]\" + super.toString().trim() + \" (from \" + this.from + \" to \" + this.to + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" return \"E\" + super.toFileFormat() + \"| from \" + this.from + \" | to \" + this.to + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":33}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The Task class represents a task with a description and completion status.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" * @param d Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" public Task(String d) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" description \u003d d;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" * Returns the icon representing the completion status of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * @return \"X\" if the task is done, \" \" if the task is not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" * Marks the task as done by setting its completion status to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" * Marks the task as undone by setting its completion status to false.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" * Marks the task status based on status obtained from file.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" * @param status The status of the task saved in the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" public void markStatusFromFile(int status) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" if (status \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" markAsUndone();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" * Returns a string representation of the task, containing its","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" * completion status and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" * @return String representation of task status and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" * Returns a string representation of the task when saved in a hard disk file.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" * @return String representation of task status and description for hard disk file.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" if (isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" return \" | 0 | \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" return \" | 1 | \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":79}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":" * The TaskList class contains the task list and all the operations","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":" * performed on the tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" * Adds the task to the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" * @param task Task to be added into task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" * Removes the task from the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber Task Number corresponding to the task list to be removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" public void remove(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" * Returns the number of tasks in current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" * @return number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" public int getNumberOfTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" return tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" public Task getTask(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" return tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" return this.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":52}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The ToDo class represents a task with a description.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * Constructs a ToDo object.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" return \"T\" + super.toFileFormat() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":25}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The Ui class handles interactions with the user by displaying messages and receiving input.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" /** The scanner to read user input from the console. */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" Scanner scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Ui object.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" /** A horizontal line used for formatting. */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public static final String HORIZONTAL_LINE \u003d \" ____________________________________________________________\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" /** An indentation string used for formatting. */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" public static final String INDENT \u003d \" \";","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" * Displays a welcome message when the Duke application starts.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" public void showWelcomeMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" + INDENT + \"Hello! I\u0027m Glenda!\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" + INDENT + \"What can I do for you?\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" + HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" * Displays a goodbye message when the Duke application ends.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" + INDENT + \"Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" + HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" * Displays the task added and the current total number of tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" * @param numberOfTasks The number of tasks in the list currently.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" public void showAddedTask(Task task, int numberOfTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Got it. I\u0027ve added this task to the list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" System.out.println(\" \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Now you have \" + numberOfTasks + \" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" * Displays all the tasks in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" * @param tasks The list of tasks to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" public void showAllTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" // Case where there is no tasks to be displayed","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"No tasks added. \");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Here are the task(s) in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + (tasks.indexOf(task) + 1) + \". \" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":" * Displays a message indicating the task was marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":" public void showTaskMarkedAsDone(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Great! I\u0027ve completed this task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":" * Displays a message indicating the task was marked as undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was marked undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" public void showTaskMarkedAsUndone(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Okay, I have not yet completed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":" * Displays a message indicating the tasks that was deleted, and the number of tasks left in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":" * @param numberOfTasks The number of tasks left in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" public void showDeletedTask(Task task, int numberOfTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Okay, I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" System.out.println(\" \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Now you have \" + numberOfTasks + \" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":" * @param errorMessage The error message shown to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"GlendaChong"},"content":" public void showErrorMessage(String errorMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"GlendaChong"},"content":" + INDENT + errorMessage + \"\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"GlendaChong"},"content":" + HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"GlendaChong"},"content":" * Displays the list of tasks matching the keyword search.","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"GlendaChong"},"content":" * @param tasks Tasks associated to the keyword search.","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"GlendaChong"},"content":" public void showMatchingTasksToKeyword(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"GlendaChong"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"GlendaChong"},"content":" // Case where there is no matching tasks to be displayed","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"No matching tasks in the list. \");","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Here are the matching task(s) in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"GlendaChong"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + (tasks.indexOf(task) + 1) + \". \" + task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":153}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public void parseListCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof ListCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" public void parseByeCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof ExitCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" public void parseEventCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"event Orbital Splashdown /from 01/01/2023 1800 /to 01/01/2023 2000\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" public void parseEventCommand_invalidInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"event Orbital Splashdown /to 01/01/2023 2000\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of an event task is \" +","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" \"\\\"event TASK_DESCRIPTION /from START /to END\\\"\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" Command command1 \u003d Parser.parse(\"deadline Do CS2103T /by 01/01/2023 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" Command command2 \u003d Parser.parse(\"deadline Do CS2103T /by 1/01/2023 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command1 instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command2 instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parseDeadlineCommand(\"deadline Do CS2103T 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of a deadline task is \" +","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" \"\\\"deadline TASK_DESCRIPTION /by DD/MM/YYYY 24H_TIME\\\"\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_invalidDateInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parseDeadlineCommand(\"deadline Do CS2103T /by 25/25/2023 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! Invalid date or time format in deadline task.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_invalidTimeInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parseDeadlineCommand(\"deadline Do CS2103T /by 12/12/2023 2500\");","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! Invalid date or time format in deadline task.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":" public void parseToDoCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"todo read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":" public void parseToDoCommand_invalidInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"GlendaChong"},"content":" public void parseMarkCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"mark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof MarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"GlendaChong"},"content":" public void parseMarkCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof MarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of marking a task done is \\\"mark TASK_NUMBER\\\".\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"GlendaChong"},"content":" \"Task number must exist in the task list.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"GlendaChong"},"content":" public void parseUnmarkCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"unmark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof UnmarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"GlendaChong"},"content":" public void parseUnmarkCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"unmark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof UnmarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of marking a task done is \\\"unmark TASK_NUMBER\\\".\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"GlendaChong"},"content":" \"Task number must exist in the task list.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"GlendaChong"},"content":" public void parseDeleteCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof DeleteCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"GlendaChong"},"content":" public void parseDeleteCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof DeleteCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of marking a task done is \\\"delete TASK_NUMBER\\\".\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"GlendaChong"},"content":" \"Task number must exist in the task list.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"GlendaChong"},"content":" public void testParseDate_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"GlendaChong"},"content":" LocalDate result \u003d Parser.parseDate(\"31/08/2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"GlendaChong"},"content":" assertEquals(LocalDate.of(2023, 8, 31), result);","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"GlendaChong"},"content":" public void testParseDate_invalidMonth_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseDate(\"31/13/2023\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"GlendaChong"},"content":" public void testParseDate_invalidDay_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseDate(\"32/08/2023\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"GlendaChong"},"content":" LocalTime result \u003d Parser.parseTime(\"1345\");","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"GlendaChong"},"content":" assertEquals(LocalTime.of(13, 45), result);","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_validInputWithLeadingZero_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"GlendaChong"},"content":" LocalTime result \u003d Parser.parseTime(\"0900\");","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"GlendaChong"},"content":" assertEquals(LocalTime.of(9, 0), result);","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_invalidHour_ExceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseTime(\"2560\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_invalidMinute_ExceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseTime(\"13160\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":229}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" public void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" Deadline deadline \u003d new Deadline(\"CS2103T\", LocalDate.of(2023, 8, 31), LocalTime.of(13, 45));","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"[D][ ] CS2103T (by 31 Aug 2023 | 1.45PM)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" public void testFileDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" Deadline deadline \u003d new Deadline(\"CS2103T\", LocalDate.of(2023, 8, 31), LocalTime.of(13, 45));","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"D | 1 | CS2103T | 31 Aug 2023 | 1.45PM\" + \"\\n\", deadline.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"D | 0 | CS2103T | 31 Aug 2023 | 1.45PM\" + \"\\n\", deadline.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":26}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" public void testAddTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" Task task1 \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task1, taskList.getTask(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" Task task2 \u003d new Deadline(\"CS2103T\", LocalDate.now(), LocalTime.now());","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task2);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task2, taskList.getTask(2));","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" Task task3 \u003d new Event(\"SLF\", \"Aug 20\", \"Aug 22\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task3);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task3, taskList.getTask(3));","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" public void testRemoveTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" Task task1 \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" Task task2 \u003d new ToDo(\"Clean the room\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task2);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" taskList.remove(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" assertEquals(1, taskList.getNumberOfTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task2, taskList.getTask(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" public void testGetTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" TaskList tasklist \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" Task task1 \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" Task task2 \u003d new ToDo(\"Clean the room\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" tasklist.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" tasklist.add(task2);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" assertEquals(2, tasklist.getNumberOfTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":50}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" public void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"[T][ ] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"[T][X] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" public void testFileDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" ToDo todo \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"T | 1 | Read a book\" + \"\\n\", todo.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"T | 0 | Read a book\" + \"\\n\", todo.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":24}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"deadline return book /by 29/08/2023 1200","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"mark 4","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"unmark 1","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"delete 1","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":11}},{"path":"text-ui-test/output.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":" Hello! I\u0027m Glenda!","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":" What can I do for you?","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":" Got it. I\u0027ve added this task to the list:","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" [T][ ] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" Now you have 1 task(s) in the list.","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" OOPS!!! The format of a deadline task is \"deadline TASK_DESCRIPTION /by DD/MM/YYYY 24H_TIME\"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" Got it. I\u0027ve added this task to the list:","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" [D][ ] return book (by 29 Aug 2023 12.00PM)","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" Now you have 2 task(s) in the list.","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" Here are the task(s) in your list:","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" 1. [T][ ] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" 2. [D][ ] return book (by 29 Aug 2023 12.00PM)","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" Great! I\u0027ve completed this task!","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" [T][X] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" Here are the task(s) in your list:","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" 1. [T][X] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" 2. [D][ ] return book (by 29 Aug 2023 12.00PM)","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" Got it. I\u0027ve added this task to the list:","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" [E][ ] project meeting (from Mon 2pm to 4pm)","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" Now you have 3 task(s) in the list.","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" OOPS!!! Task 4 does not exist.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" Okay, I have not yet completed this task:","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" [T][ ] borrow book","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" Okay, I\u0027ve removed this task:","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" [T][ ] borrow book","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" Now you have 2 task(s) in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" Bye. Hope to see you again soon!","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":63}}] +[{"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":"GlendaChong"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":"// mainClass.set(\"duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" mainClassName \u003d \u0027duke.Duke\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"GlendaChong":8,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"T | 1 | read book","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"D | 1 | project | 12 Dec 2023 | 7.00PM","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"E | 0 | testing| from 12/12 | to 12/12","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"GlendaChong":3}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" * Duke is a personal assistant chatbot that helps","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" * to keep track of various tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" public static final String FILE_PATH \u003d \"data/duke.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Duke object.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" * @param filePath The filepath for loading and saving the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" * Runs the Duke application, handling user interactions.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" // Get the next task input","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" String command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" Command c \u003d Parser.parse(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" scanner.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" * The main method to start the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" * @param args Command-line arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" new Duke(FILE_PATH).run();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"GlendaChong":65,"-":3}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The AddCommand class represents a command to add a new task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Constructs an AddCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param task Task to be added into the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" taskList.add(this.task);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" ui.showAddedTask(this.task, taskList.getNumberOfTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":29}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The Command class is an abstract base class for different types of commands in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" * Executes the command, performing specific actions based on the type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" * @param tasks The TaskList containing tasks to be manipulated.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param ui The Ui instance for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" * @param storage The Storage instance for loading and saving tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If there is an error while executing the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" * @return true if the command is an ExitCommand, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" return (this instanceof ExitCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":31}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The DeleteCommand class represents a command to deleted from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Constructs a DeleteCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber Task number corresponding to the task to be deleted from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" if (taskNumber \u003e taskList.getNumberOfTasks()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Task \" + taskNumber + \" does not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ui.showDeletedTask(taskList.getTask(taskNumber), taskList.getNumberOfTasks() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" taskList.remove(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":32}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" * The ExitCommand class represents a command to quit the Duke application once done.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" ui.showGoodbyeMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":15}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" * The FindCommand class represents a command to find tasks that match a given keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" private String keyword;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" * Constructs a FindCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" * @param keyword Keyword to be searched from the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" for (Task task: taskList.getList()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" if (task.toString().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" ui.showMatchingTasksToKeyword(matchingTasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"GlendaChong":37}},{"path":"src/main/java/duke/command/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The InvalidCommand class represents a command that throws an error to users","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" * when they provide an invalid user input as the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" private final DukeException error;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" public InvalidCommand(DukeException error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" this.error \u003d error;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(this.error.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":22}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The ListCommand class represents a command to list out all the tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" * in the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" ui.showAllTasks(taskList.getList());","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":17}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The MarkCommand class represents a command to mark the specified task in the list as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Construcst a MarkCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber The task number corresponding to the task, to be marked done.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public MarkCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" if (taskNumber \u003e taskList.getNumberOfTasks()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Task \" + taskNumber + \" does not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ui.showTaskMarkedAsDone(taskList.getTask(taskNumber));","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":31}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The UnmarkCommand class represents a command to be marked undone in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Construcst an UnmarkCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber The task number corresponding to the task, to be marked undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public UnmarkCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" if (taskNumber \u003e taskList.getNumberOfTasks()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Task \" + taskNumber + \" does not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ui.showTaskMarkedAsUndone(taskList.getTask(taskNumber));","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":31}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The DukeException class represents an exception that can be thrown by the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * Constructs a DukeException with a default error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" public DukeException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" super(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" * Constructs a DukeException with a custom error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" * @param message The custom error message explaining the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":23}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" * The Parser class deals with interpreting the user inputs","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * and generating corresponding commands if valid.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" * Returns a command based on the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" * If the command is invalid, an exception is thrown.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" * @param userInput The input provided by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" * @return A Command object representing the user\u0027s intended action.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If there is an error in the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" public static Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" String[] splitCommand \u003d userInput.trim().split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" switch (splitCommand[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" case \"list\":","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" case \"bye\":","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" // Add event task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\"event .*/from .* /to .*\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! The format of an event task is \"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" + \"\\\"event TASK_DESCRIPTION /from START /to END\\\"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" String description \u003d splitCommand[1].split(\"/from\")[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" String[] dateAndTime \u003d splitCommand[1].split(\"/from\")[1].split(\"/to\");","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" return new AddCommand(new Event(description, dateAndTime[0], dateAndTime[1]));","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" // Add deadline task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" return parseDeadlineCommand(splitCommand[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" // Add to-do task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\"todo .*\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" return new AddCommand(new ToDo(splitCommand[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\".* \\\\d+\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" String errorMessage \u003d String.format(","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" \"OOPS!!! The format of this command is \\\"%s TASK_NUMBER\\\". \"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" + \"Task number must exist in the task list.\", splitCommand[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" int taskNumber \u003d Integer.parseInt(splitCommand[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" switch (splitCommand[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" return new MarkCommand(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" return new UnmarkCommand(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" return new DeleteCommand(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException();","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\"find .*\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! The description of a find command cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":" return new FindCommand(splitCommand[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":" * Returns a command for deadline tasks for valid user inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" * Else, exception is thrown.","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" * @param stringCommand The deadline command provided by the user, excluding the task type.","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":" * @return A Command object with a deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":" * @throws DateTimeParseException If the date or time inputs are invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If the deadline command has an invalid input format.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":" public static Command parseDeadlineCommand(String stringCommand)","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" throws DateTimeParseException, DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" // Add deadline task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" String errorMessage \u003d \"OOPS!!! The format of a deadline task is \"","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" + \"\\\"deadline TASK_DESCRIPTION /by DD/MM/YYYY 24H_TIME\\\"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" if (!stringCommand.matches(\".*/by \\\\d{1,2}/\\\\d{1,2}/\\\\d{4} \\\\d{4}\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":" String[] taskParts \u003d stringCommand.split(\" /by \");","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" if (taskParts.length !\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" String[] dateAndTime \u003d taskParts[1].split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":" LocalDate date \u003d parseDate(dateAndTime[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":" LocalTime time \u003d parseTime(dateAndTime[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":" return new AddCommand(new Deadline(taskParts[0], date, time));","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Invalid date or time format in deadline task.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"GlendaChong"},"content":" * Parses a date string and returns a LocalDate object.","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"GlendaChong"},"content":" * @param date The date of the deadline for the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"GlendaChong"},"content":" * @return A LocalDate object of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"GlendaChong"},"content":" public static LocalDate parseDate(String date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"GlendaChong"},"content":" return LocalDate.parse(date, DateTimeFormatter.ofPattern(\"d/MM/yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"GlendaChong"},"content":" * Parses a time string and returns a LocalTime object.","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"GlendaChong"},"content":" * @param time The time of the deadline for the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"GlendaChong"},"content":" * @return A LocalTime object of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"GlendaChong"},"content":" public static LocalTime parseTime(String time) {","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"GlendaChong"},"content":" return LocalTime.parse(time, DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":146}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" * The Storage class deals with savings tasks in the file and","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * loading tasks from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" private final String filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Storage object.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" * @param filePath The filepath of the file containing the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" * Saves the tasks into the file in hard drive.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" * @param tasks The current list of tasks to be saved into the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" * @param ui The user interface of the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" public void save(ArrayList\u003cTask\u003e tasks, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" // Create folder and file","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" // Write tasks into hard disk","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" FileWriter fileWriter \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" fileWriter.write(task.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" * Loads the tasks from the file","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" * @return The ArrayList of the tasks saved into the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If the task type in the file is invalid, or file is not found.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":" String fullTaskCommand \u003d scanner.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" String[] taskParts \u003d fullTaskCommand.split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" String taskType \u003d taskParts[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" int taskStatus \u003d Integer.parseInt(taskParts[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" Task todo \u003d new ToDo(taskParts[2].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" tasks.add(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":" todo.markStatusFromFile(taskStatus);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" String datePart \u003d taskParts[3].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":" String timePart \u003d taskParts[4].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" LocalDate date \u003d LocalDate.parse(datePart, DateTimeFormatter.ofPattern(\"d MMM yyyy\", Locale.US));","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":" String formattedDate \u003d date.format(DateTimeFormatter.ofPattern(\"dd/MM/yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" LocalTime time \u003d LocalTime.parse(timePart, DateTimeFormatter.ofPattern(\"h.mma\", Locale.US));","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":" String formattedTime \u003d time.format(DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" Task deadline \u003d new Deadline(taskParts[2].trim(), formattedDate, formattedTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" deadline.markStatusFromFile(taskStatus);","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" Task event \u003d new Event(taskParts[2].trim(),","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":" taskParts[3].trim().replace(\"from\", \"\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":" taskParts[4].trim().replace(\"to\", \"\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":" tasks.add(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":" event.markStatusFromFile(taskStatus);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"Invalid task type in file: \" + taskType);","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":" scanner.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException | FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"File not found: \" + filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":124}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" * The Deadline class represents a task with a description,","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" * completion status, and a deadline date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" protected LocalDate date;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" protected LocalTime time;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" * @param date LocalDate representation of the date of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * @param time LocalTime representation of the time of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public Deadline(String description, LocalDate date, LocalTime time) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" this.time \u003d time;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" * Constructs the Deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" * @param date String representation of the date of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" * @param time String representation of the time of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" public Deadline(String description, String date, String time) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" this.date \u003d Parser.parseDate(date);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" this.time \u003d Parser.parseTime(time);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" * Returns a formatted string representation of the deadline date.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" * @return A string representing the deadline date in the format \"d MMM yyyy\".","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" public String reformatDate() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" return this.date.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" * Returns a formatted string representation of the deadline time.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" * @return A string representing the deadline time in the format \"h.mma\".","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" public String reformatTime() {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" return this.time.format(DateTimeFormatter.ofPattern(\"h.mma\", Locale.US));","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" return \"[D]\" + super.toString() + \" (by \" + reformatDate() + \" \" + reformatTime() + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" return \"D\" + super.toFileFormat() + \" | \" + reformatDate() + \" | \" + reformatTime() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":71}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The Event class represents a task with a description,","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" * completion status, and a start and end period.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" * Constructs an Event object.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * @param from Start period of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" * @param to End period of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.from \u003d from.trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" this.to \u003d to.trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" return \"[E]\" + super.toString().trim() + \" (from \" + this.from + \" to \" + this.to + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" return \"E\" + super.toFileFormat() + \"| from \" + this.from + \" | to \" + this.to + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":33}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The Task class represents a task with a description and completion status.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" * @param d Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" public Task(String d) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" description \u003d d;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" * Returns the icon representing the completion status of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * @return \"X\" if the task is done, \" \" if the task is not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" * Marks the task as done by setting its completion status to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" * Marks the task as undone by setting its completion status to false.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" * Marks the task status based on status obtained from file.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" * @param status The status of the task saved in the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" public void markStatusFromFile(int status) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" if (status \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" markAsUndone();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" * Returns a string representation of the task, containing its","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" * completion status and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" * @return String representation of task status and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" * Returns a string representation of the task when saved in a hard disk file.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" * @return String representation of task status and description for hard disk file.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" if (isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" return \" | 0 | \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" return \" | 1 | \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":79}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":" * The TaskList class contains the task list and all the operations","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":" * performed on the tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" * Adds the task to the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" * @param task Task to be added into task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" * Removes the task from the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber Task Number corresponding to the task list to be removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" public void remove(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" * Returns the number of tasks in current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" * @return number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" public int getNumberOfTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" return tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" public Task getTask(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" return tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" return this.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":52}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The ToDo class represents a task with a description.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * Constructs a ToDo object.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" return \"T\" + super.toFileFormat() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":25}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" * The Ui class handles interactions with the user by displaying messages and receiving input.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" /** An indentation string used for formatting. */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" public static final String INDENT \u003d \" \".repeat(8);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /** A horizontal line used for formatting. */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" public static final String HORIZONTAL_LINE \u003d \" \".repeat(8) + \"_\".repeat(60) + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" * Displays a welcome message when the Duke application starts.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" public void showWelcomeMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" + INDENT + \"Hello! I\u0027m Glenda!\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" + INDENT + \"What can I do for you?\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" + HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" * Displays a goodbye message when the Duke application ends.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" + INDENT + \"Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" + HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" * Displays the task added and the current total number of tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" * @param numberOfTasks The number of tasks in the list currently.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" public void showAddedTask(Task task, int numberOfTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Got it. I\u0027ve added this task to the list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" System.out.println(\" \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Now you have \" + numberOfTasks + \" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" * Displays all the tasks in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" * @param tasks The list of tasks to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" public void showAllTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" // Case where there is no tasks to be displayed","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"No tasks added. \");","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Here are the task(s) in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + (tasks.indexOf(task) + 1) + \". \" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" * Displays a message indicating the task was marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" public void showTaskMarkedAsDone(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Great! I\u0027ve completed this task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" * Displays a message indicating the task was marked as undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was marked undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":" public void showTaskMarkedAsUndone(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Okay, I have not yet completed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":" * Displays a message indicating the tasks that was deleted, and the number of tasks left in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":" * @param numberOfTasks The number of tasks left in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" public void showDeletedTask(Task task, int numberOfTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Okay, I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" System.out.println(\" \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Now you have \" + numberOfTasks + \" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" * @param errorMessage The error message shown to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":" public void showErrorMessage(String errorMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":" + INDENT + errorMessage + \"\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":" + HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" * Displays the list of tasks matching the keyword search.","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":" * @param tasks Tasks associated to the keyword search.","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"GlendaChong"},"content":" public void showMatchingTasksToKeyword(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"GlendaChong"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"GlendaChong"},"content":" // Case where there is no matching tasks to be displayed","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"No matching tasks in the list. \");","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Here are the matching task(s) in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"GlendaChong"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + (tasks.indexOf(task) + 1) + \". \" + task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":142}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public void parseListCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof ListCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" public void parseByeCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof ExitCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" public void parseEventCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"event Orbital Splashdown /from 01/01/2023 1800 /to 01/01/2023 2000\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" public void parseEventCommand_invalidInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"event Orbital Splashdown /to 01/01/2023 2000\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of an event task is \"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" + \"\\\"event TASK_DESCRIPTION /from START /to END\\\"\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" Command command1 \u003d Parser.parse(\"deadline Do CS2103T /by 01/01/2023 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" Command command2 \u003d Parser.parse(\"deadline Do CS2103T /by 1/01/2023 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command1 instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command2 instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parseDeadlineCommand(\"deadline Do CS2103T 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of a deadline task is \"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" + \"\\\"deadline TASK_DESCRIPTION /by DD/MM/YYYY 24H_TIME\\\"\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_invalidDateInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parseDeadlineCommand(\"deadline Do CS2103T /by 25/25/2023 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! Invalid date or time format in deadline task.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_invalidTimeInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parseDeadlineCommand(\"deadline Do CS2103T /by 12/12/2023 2500\");","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! Invalid date or time format in deadline task.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":" public void parseToDoCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"todo read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":" public void parseToDoCommand_invalidInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"GlendaChong"},"content":" public void parseMarkCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"mark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof MarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"GlendaChong"},"content":" public void parseMarkCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof MarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of marking a task done is \\\"mark TASK_NUMBER\\\".\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"GlendaChong"},"content":" + \"Task number must exist in the task list.\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"GlendaChong"},"content":" public void parseUnmarkCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"unmark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof UnmarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"GlendaChong"},"content":" public void parseUnmarkCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"unmark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof UnmarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of marking a task done is \\\"unmark TASK_NUMBER\\\".\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"GlendaChong"},"content":" + \"Task number must exist in the task list.\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"GlendaChong"},"content":" public void parseDeleteCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof DeleteCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"GlendaChong"},"content":" public void parseDeleteCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof DeleteCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of marking a task done is \\\"delete TASK_NUMBER\\\".\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"GlendaChong"},"content":" + \"Task number must exist in the task list.\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"GlendaChong"},"content":" public void testParseDate_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"GlendaChong"},"content":" LocalDate result \u003d Parser.parseDate(\"31/08/2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"GlendaChong"},"content":" assertEquals(LocalDate.of(2023, 8, 31), result);","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"GlendaChong"},"content":" public void testParseDate_invalidMonth_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseDate(\"31/13/2023\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"GlendaChong"},"content":" public void testParseDate_invalidDay_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseDate(\"32/08/2023\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"GlendaChong"},"content":" LocalTime result \u003d Parser.parseTime(\"1345\");","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"GlendaChong"},"content":" assertEquals(LocalTime.of(13, 45), result);","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_validInputWithLeadingZero_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"GlendaChong"},"content":" LocalTime result \u003d Parser.parseTime(\"0900\");","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"GlendaChong"},"content":" assertEquals(LocalTime.of(9, 0), result);","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_invalidHour_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":222,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseTime(\"2560\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_invalidMinute_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":227,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseTime(\"13160\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":229}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" public void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" Deadline deadline \u003d new Deadline(\"CS2103T\", LocalDate.of(2023, 8, 31), LocalTime.of(13, 45));","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"[D][ ] CS2103T (by 31 Aug 2023 | 1.45PM)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public void testFileDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" Deadline deadline \u003d new Deadline(\"CS2103T\", LocalDate.of(2023, 8, 31), LocalTime.of(13, 45));","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"D | 1 | CS2103T | 31 Aug 2023 | 1.45PM\" + \"\\n\", deadline.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"D | 0 | CS2103T | 31 Aug 2023 | 1.45PM\" + \"\\n\", deadline.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":27}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" public void testAddTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" Task task1 \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task1, taskList.getTask(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" Task task2 \u003d new Deadline(\"CS2103T\", LocalDate.now(), LocalTime.now());","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task2);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task2, taskList.getTask(2));","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" Task task3 \u003d new Event(\"SLF\", \"Aug 20\", \"Aug 22\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task3);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task3, taskList.getTask(3));","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" public void testRemoveTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" Task task1 \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" Task task2 \u003d new ToDo(\"Clean the room\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task2);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" taskList.remove(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" assertEquals(1, taskList.getNumberOfTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task2, taskList.getTask(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" public void testGetTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" TaskList tasklist \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" Task task1 \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" Task task2 \u003d new ToDo(\"Clean the room\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" tasklist.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" tasklist.add(task2);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" assertEquals(2, tasklist.getNumberOfTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":51}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" public void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"[T][ ] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"[T][X] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" public void testFileDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" ToDo todo \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"T | 1 | Read a book\" + \"\\n\", todo.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"T | 0 | Read a book\" + \"\\n\", todo.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":25}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"deadline return book /by 29/08/2023 1200","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"mark 4","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"unmark 1","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"delete 1","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":11}},{"path":"text-ui-test/output.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":" Hello! I\u0027m Glenda!","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":" What can I do for you?","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":" Got it. I\u0027ve added this task to the list:","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" [T][ ] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" Now you have 1 task(s) in the list.","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" OOPS!!! The format of a deadline task is \"deadline TASK_DESCRIPTION /by DD/MM/YYYY 24H_TIME\"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" Got it. I\u0027ve added this task to the list:","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" [D][ ] return book (by 29 Aug 2023 12.00PM)","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" Now you have 2 task(s) in the list.","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" Here are the task(s) in your list:","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" 1. [T][ ] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" 2. [D][ ] return book (by 29 Aug 2023 12.00PM)","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" Great! I\u0027ve completed this task!","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" [T][X] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" Here are the task(s) in your list:","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" 1. [T][X] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" 2. [D][ ] return book (by 29 Aug 2023 12.00PM)","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" Got it. I\u0027ve added this task to the list:","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" [E][ ] project meeting (from Mon 2pm to 4pm)","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" Now you have 3 task(s) in the list.","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" OOPS!!! Task 4 does not exist.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" Okay, I have not yet completed this task:","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" [T][ ] borrow book","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" Okay, I\u0027ve removed this task:","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" [T][ ] borrow book","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" Now you have 2 task(s) in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" Bye. Hope to see you again soon!","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":63}}] diff --git a/GlendaChong_ip_master/commits.json b/GlendaChong_ip_master/commits.json index c8770a44..e065f914 100644 --- a/GlendaChong_ip_master/commits.json +++ b/GlendaChong_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"GlendaChong":[{"date":"2023-08-21","commitResults":[{"hash":"c184e0da8f22a86760914e54e40443e97b1dd24b","isMergeCommit":false,"messageTitle":"Rename chatbot, greet user, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"ea66a184d6bc767f24be6ad61f063ed2deedb80e","isMergeCommit":false,"messageTitle":"Echo commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":9}}},{"hash":"a7a22c676000321f8c792b07c1a0288b72c4f7f3","isMergeCommit":false,"messageTitle":"Add and display tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":8}}}]},{"date":"2023-08-22","commitResults":[{"hash":"f5fe0526277534677302406d7ecc608af0da1099","isMergeCommit":false,"messageTitle":"Added mark task as done or undone feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":7}}},{"hash":"8f1f02d59fde38532f3271eddd65710b0889e76a","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":42}}},{"hash":"04cfa911e6ef5095fd19d014a1d0252d66cdec1b","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":56,"deletions":0},"java":{"insertions":15,"deletions":15}}},{"hash":"70125559ea89c78e8c01420fa60e4fda03734699","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":28}}},{"hash":"e3d908d1ce59c91eab32e8ab9120e2246e9ea9df","isMergeCommit":false,"messageTitle":"Edited tasks to use ArrayList\u003c\u003e","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":15}}}]},{"date":"2023-08-23","commitResults":[{"hash":"e6835a8b1601b8cc0fcb7aba6a5a08494758554b","isMergeCommit":false,"messageTitle":"Added delete task function","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":16}}}]},{"date":"2023-08-29","commitResults":[{"hash":"168e8903bf8a19c4efa50553b903b590b75a3891","isMergeCommit":false,"messageTitle":"Add save tasks to hard disk functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":34}}},{"hash":"8ed4f8290b100e6617acbef6be9889e4db056a11","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"85478892525a5ba0312b9ed069e90a48532d279a","isMergeCommit":false,"messageTitle":"Add date and time functionality for deadline tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":32,"deletions":9}}},{"hash":"3cf10fe81ea3776e46f238c0e9d60b5f6e919203","isMergeCommit":false,"messageTitle":"Update automated text-ui testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":23,"deletions":6},"java":{"insertions":2,"deletions":4}}},{"hash":"3ebc255e281e4d9f77a33f1576284e6c4640bcee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"e5288cb7f2a3bc2aa998b70be604412153ad5578","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","tags":["A-OOP","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":443,"deletions":195}}},{"hash":"b71c5586d7ab89bdd5c2963f7ac761c3498d6a59","isMergeCommit":false,"messageTitle":"Organise classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":7}}},{"hash":"f9d740de4eed2471c943ca700086905cca062c9b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"df98977baef7298becb5c97853cc5f2711b05354","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"476c057d5d3a16facabe977732ea55bf7328c391","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":334,"deletions":5}}},{"hash":"04d2df8f562e5259a2d1ee76283e5b35d6fb67ba","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"bbcdc3f37968477e888529f6d4eebe52a79b6bee","isMergeCommit":false,"messageTitle":"Edit build.gradle file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"83a3f6bc4f95ef595bc7391893e245d0c530aa78","isMergeCommit":false,"messageTitle":"Create a JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":1,"deletions":1}}},{"hash":"c56933853654fef5e7d240812011f7a5e6e53d1e","isMergeCommit":false,"messageTitle":"Add Javadocs to all current classes and methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":281,"deletions":6}}},{"hash":"7c4841cbdbb7777244d5390585c6e6858a8f15db","isMergeCommit":false,"messageTitle":"Follow coding standard and refactor code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":101}}},{"hash":"15333ba22f85496f5a3c742f7b80ac8d9712068a","isMergeCommit":false,"messageTitle":"Add find tasks by keyword search functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":69,"deletions":6}}},{"hash":"949bdc6048e90812c1a985ba01b40af98f1bbdeb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"5e6d25243c8c8fcc1739f1925428ee684010a0f3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"b5116454fba718e711b25fdaacc1f137b32977ff","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"a6aad2e7a53d324c161e989fa938e3a6331fc23e","isMergeCommit":false,"messageTitle":"Fix event task displays in saved file and chatbot","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":32,"deletions":8}}}]}]},"authorFileTypeContributionMap":{"GlendaChong":{"java":1336,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":2,"txt":77}},"authorContributionVariance":{"GlendaChong":58534.332},"authorDisplayNameMap":{"GlendaChong":"CS2103T-T17-2 GLEN..TING"}} +{"authorDailyContributionsMap":{"GlendaChong":[{"date":"2023-08-21","commitResults":[{"hash":"c184e0da8f22a86760914e54e40443e97b1dd24b","isMergeCommit":false,"messageTitle":"Rename chatbot, greet user, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"ea66a184d6bc767f24be6ad61f063ed2deedb80e","isMergeCommit":false,"messageTitle":"Echo commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":9}}},{"hash":"a7a22c676000321f8c792b07c1a0288b72c4f7f3","isMergeCommit":false,"messageTitle":"Add and display tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":8}}}]},{"date":"2023-08-22","commitResults":[{"hash":"f5fe0526277534677302406d7ecc608af0da1099","isMergeCommit":false,"messageTitle":"Added mark task as done or undone feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":7}}},{"hash":"8f1f02d59fde38532f3271eddd65710b0889e76a","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":42}}},{"hash":"04cfa911e6ef5095fd19d014a1d0252d66cdec1b","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":56,"deletions":0},"java":{"insertions":15,"deletions":15}}},{"hash":"70125559ea89c78e8c01420fa60e4fda03734699","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":28}}},{"hash":"e3d908d1ce59c91eab32e8ab9120e2246e9ea9df","isMergeCommit":false,"messageTitle":"Edited tasks to use ArrayList\u003c\u003e","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":15}}}]},{"date":"2023-08-23","commitResults":[{"hash":"e6835a8b1601b8cc0fcb7aba6a5a08494758554b","isMergeCommit":false,"messageTitle":"Added delete task function","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":16}}}]},{"date":"2023-08-29","commitResults":[{"hash":"168e8903bf8a19c4efa50553b903b590b75a3891","isMergeCommit":false,"messageTitle":"Add save tasks to hard disk functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":34}}},{"hash":"8ed4f8290b100e6617acbef6be9889e4db056a11","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"85478892525a5ba0312b9ed069e90a48532d279a","isMergeCommit":false,"messageTitle":"Add date and time functionality for deadline tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":32,"deletions":9}}},{"hash":"3cf10fe81ea3776e46f238c0e9d60b5f6e919203","isMergeCommit":false,"messageTitle":"Update automated text-ui testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":23,"deletions":6},"java":{"insertions":2,"deletions":4}}},{"hash":"3ebc255e281e4d9f77a33f1576284e6c4640bcee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"e5288cb7f2a3bc2aa998b70be604412153ad5578","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","tags":["A-OOP","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":443,"deletions":195}}},{"hash":"b71c5586d7ab89bdd5c2963f7ac761c3498d6a59","isMergeCommit":false,"messageTitle":"Organise classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":7}}},{"hash":"f9d740de4eed2471c943ca700086905cca062c9b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"df98977baef7298becb5c97853cc5f2711b05354","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"476c057d5d3a16facabe977732ea55bf7328c391","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":334,"deletions":5}}},{"hash":"04d2df8f562e5259a2d1ee76283e5b35d6fb67ba","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"bbcdc3f37968477e888529f6d4eebe52a79b6bee","isMergeCommit":false,"messageTitle":"Edit build.gradle file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"83a3f6bc4f95ef595bc7391893e245d0c530aa78","isMergeCommit":false,"messageTitle":"Create a JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":1,"deletions":1}}},{"hash":"c56933853654fef5e7d240812011f7a5e6e53d1e","isMergeCommit":false,"messageTitle":"Add Javadocs to all current classes and methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":281,"deletions":6}}},{"hash":"7c4841cbdbb7777244d5390585c6e6858a8f15db","isMergeCommit":false,"messageTitle":"Follow coding standard and refactor code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":101}}},{"hash":"15333ba22f85496f5a3c742f7b80ac8d9712068a","isMergeCommit":false,"messageTitle":"Add find tasks by keyword search functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":69,"deletions":6}}},{"hash":"949bdc6048e90812c1a985ba01b40af98f1bbdeb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"5e6d25243c8c8fcc1739f1925428ee684010a0f3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"b5116454fba718e711b25fdaacc1f137b32977ff","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"a6aad2e7a53d324c161e989fa938e3a6331fc23e","isMergeCommit":false,"messageTitle":"Fix event task displays in saved file and chatbot","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":32,"deletions":8}}}]},{"date":"2023-09-04","commitResults":[{"hash":"6356dfd139248ed05f1aefbf82518dd15d36aa92","isMergeCommit":false,"messageTitle":"Update styling of codes","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1},"java":{"insertions":72,"deletions":71}}},{"hash":"f31fe8cf16fdd03ec7c5f9a7647859e88b0af323","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Checkstyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"GlendaChong":{"java":1337,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":8,"txt":77}},"authorContributionVariance":{"GlendaChong":51451.38},"authorDisplayNameMap":{"GlendaChong":"CS2103T-T17-2 GLEN..TING"}} diff --git a/Goh-Li-Ting_ip_master/authorship.json b/Goh-Li-Ting_ip_master/authorship.json index ae812cb2..4eee3e3d 100644 --- a/Goh-Li-Ting_ip_master/authorship.json +++ b/Goh-Li-Ting_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":"Goh-Li-Ting"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"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":"Goh-Li-Ting"},"content":"mainClassName \u003d \u0027chatbuddy.ChatBuddy\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"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":"Goh-Li-Ting"},"content":" mainClass.set(\"chatbuddy.ChatBuddy\")","lastModifiedDate":"2023-09-01"},{"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":"Goh-Li-Ting"},"content":" archiveFileName \u003d \u0027chatBuddy.jar\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" archiveBaseName \u003d \"chatBuddy\"","lastModifiedDate":"2023-09-01"},{"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":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":40,"Goh-Li-Ting":6}},{"path":"src/main/java/chatbuddy/ChatBuddy.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/** ChatBuddy is a chatbot that helps a user keep track of tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ChatBuddy {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of ChatBuddy with a specified filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param filePath The filepath of the file to save task data in.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public ChatBuddy(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Runs the chatbot. */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" public void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" Command command \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" command.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" isExit \u003d command.isExit();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" } finally {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" new ChatBuddy(\"data/tasks.txt\").run();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Goh-Li-Ting":53}},{"path":"src/main/java/chatbuddy/ChatBuddyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ChatBuddyException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a ChatBuddyException.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the error.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" public ChatBuddyException(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"☹ OOPS!!! \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" return toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":24}},{"path":"src/main/java/chatbuddy/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * The TaskList represents a list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" * Tasks can be added or delete from the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" * Tasks in the list can be mark as done or not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The list of tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Returns an instance of a TaskList that has no tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns an instance of a TaskList with the list of inputted tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param tasks The tasks that the TaskList should contain.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the size of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The size of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" public int getSize() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" return tasks.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" * Checks if the task number is valid.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" * The task number is valid if it is within the range of available task.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" * The task number is invalid if the task number exceeds the number of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number to check for.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" private void checkValidTaskNumber(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" if (taskNum \u003e tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number. There are only \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" * Adds a task to the back of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task to add to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" * Deletes the task with the given task number from the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task object that is deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task deleteTask(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" // check for valid task number","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" checkValidTaskNumber(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" // delete task from list","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskIndex \u003d taskNum - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" * Marks the task with the given task number as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task that was marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task markTaskAsDone(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" // check for valid task number","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":" checkValidTaskNumber(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":" // mark task as done","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskIndex \u003d taskNum - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Goh-Li-Ting"},"content":" * Marks the task with the given task number as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task that was marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task markTaskAsNotDone(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Goh-Li-Ting"},"content":" // check for valid task number","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Goh-Li-Ting"},"content":" checkValidTaskNumber(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Goh-Li-Ting"},"content":" // mark task as done","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskIndex \u003d taskNum - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Goh-Li-Ting"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a list of strings representing the task in the format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A list of strings representing the task in the format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Goh-Li-Ting"},"content":" public ArrayList\u003cString\u003e getTaskStringsToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"Goh-Li-Ting"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskString \u003d task.getInformationForSaving();","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Goh-Li-Ting"},"content":" taskStrings.add(taskString);","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Goh-Li-Ting"},"content":" return taskStrings;","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a list of strings representing the task in the format for printing.","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A list of strings representing the task in the format for printing.","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Goh-Li-Ting"},"content":" public ArrayList\u003cString\u003e getTaskStringsToPrint() {","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Goh-Li-Ting"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Goh-Li-Ting"},"content":" taskStrings.add(task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Goh-Li-Ting"},"content":" return taskStrings;","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Goh-Li-Ting"},"content":" * Finds a list of tasks containing the given keyword in their description.","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A TaskList containing a list of tasks that contains the given keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Goh-Li-Ting"},"content":" public TaskList getMatchingTasks(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Goh-Li-Ting"},"content":" return new TaskList(tasks.stream()","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Goh-Li-Ting"},"content":" .filter(task -\u003e task.containKeyword(keyword))","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Goh-Li-Ting"},"content":" .collect(Collectors.toCollection(ArrayList::new)));","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":155}},{"path":"src/main/java/chatbuddy/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/** Command is an abstract class that represents commands that can be executed. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" * Executes the command.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param ui The ui used to handle interactions with the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param storage The storage used to load and save tasks in a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the execution of the command has an error.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns true if the command is an exit command, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return False by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":29}},{"path":"src/main/java/chatbuddy/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"/** DeadlineCommand represents a command to create a deadline task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"deadline\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private String taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a DeadlineCommand with the given description and deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" public DeadlineCommand(String taskDescription, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" Deadline deadline \u003d new Deadline(taskDescription, by);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showTaskAddition(deadline, tasks.getSize());","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":34}},{"path":"src/main/java/chatbuddy/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** DeleteCommand represents a command to delete a task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" private int taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a delete command with the given task number.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" public DeleteCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.deleteTask(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showTaskDeletion(task, tasks.getSize());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":28}},{"path":"src/main/java/chatbuddy/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"/** EventCommand represents a command to create an event task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"event\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private String taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a EventCommand with the given description, \u0027from\u0027 and \u0027to\u0027 datetimes.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param from The datetime that the event starts from.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param to The datetime that the events ends at.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public EventCommand(String taskDescription, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" Event event \u003d new Event(taskDescription, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showTaskAddition(event, tasks.getSize());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":37}},{"path":"src/main/java/chatbuddy/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/** ExitCommand represents a command to exit the chatbot. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showExit();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns true if the command is an exit command, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":29}},{"path":"src/main/java/chatbuddy/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** FindCommand represents a command to find a list of tasks containing a keyword. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private String keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a FindCommand with the given keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" TaskList matchingTasks \u003d tasks.getMatchingTasks(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d matchingTasks.getTaskStringsToPrint();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showTaskList(taskStrings, \"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Goh-Li-Ting":31}},{"path":"src/main/java/chatbuddy/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** ListCommand represents a command to show the list of tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d tasks.getTaskStringsToPrint();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showTaskList(taskStrings, \"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":19}},{"path":"src/main/java/chatbuddy/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** MarkCommand represents a command to mark a task as done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"mark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private int taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a MarkCommand with the given task number.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public MarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.markTaskAsDone(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showMarkTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":29}},{"path":"src/main/java/chatbuddy/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** TodoCommand represents a command to create a todo task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private String taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a TodoCommand with the given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public TodoCommand(String taskDescription) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" ToDo todo \u003d new ToDo(taskDescription);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showTaskAddition(todo, tasks.getSize());","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":30}},{"path":"src/main/java/chatbuddy/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** UnmarkCommand represents a command to mark a task as not done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"unmark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private int taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of an UnmarkCommand with the given task number.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public UnmarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.markTaskAsNotDone(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showUnmarkTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":29}},{"path":"src/main/java/chatbuddy/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.DeadlineCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.DeleteCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.EventCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.MarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.TodoCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.UnmarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" * Parser represents a class to handle the parsing of user commands.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" * Parser can also parse task data from storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter for deadline inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_INPUT_DEADLINE \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter for event datetime inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_INPUT_EVENT \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" * Parses the user command and returns a Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param commandString The command inputted by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The command to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the command is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" public static Command parse(String commandString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] commandArray \u003d commandString.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" String command \u003d commandArray[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" String args \u003d commandArray.length \u003e 1 ? commandArray[1] : \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" case TodoCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareAddTodo(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" case DeadlineCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareAddDeadline(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" case EventCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareAddEvent(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareDelete(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" case MarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareMark(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" case UnmarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareUnmark(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" case FindCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" return new FindCommand(args);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a TodoCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The TodoCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the description of the task is empty or consists only of whitespace.","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" private static TodoCommand prepareAddTodo(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" if (args.trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":" return new TodoCommand(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a DeadlineCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the description and deadline of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The DeadlineCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the description or deadline of the task is empty or consists only of whitespace.","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Goh-Li-Ting"},"content":" private static DeadlineCommand prepareAddDeadline(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] arr \u003d args.split(\" /by \");","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskDescription \u003d arr[0].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Goh-Li-Ting"},"content":" // check validity of arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Goh-Li-Ting"},"content":" if (taskDescription.equals(\"\") || arr.length \u003d\u003d 1 || arr[1].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input deadlines in the format \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Goh-Li-Ting"},"content":" \"\u0027deadline [task description] /by [deadline in dd/MM/yyyy]\u0027.\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Goh-Li-Ting"},"content":" \"The task description and deadline cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Goh-Li-Ting"},"content":" // parse deadline string to LocalDate object","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate date \u003d parseDate(arr[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Goh-Li-Ting"},"content":" return new DeadlineCommand(taskDescription, date);","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns an EventCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the description,","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Goh-Li-Ting"},"content":" * the \u0027from\u0027 datetime and the \u0027to\u0027 datetime task.","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The EventCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the description, \u0027from\u0027 or \u0027to\u0027 datetime is empty of consists only of whitespaces.","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Goh-Li-Ting"},"content":" private static EventCommand prepareAddEvent(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Goh-Li-Ting"},"content":" // check validity of arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] arr \u003d args.split(\" /from \");","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskDescription \u003d arr[0].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Goh-Li-Ting"},"content":" if (taskDescription.equals(\"\") || arr.length \u003d\u003d 1 || arr[1].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input events in the format \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Goh-Li-Ting"},"content":" \"\u0027event [task description] /from [dd/MM/yyyy HHmm] /to [dd/MM/yyyy HHmm]\u0027.\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"Goh-Li-Ting"},"content":" \"The task description, from datetime and to datetime cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] dateTimeArgs \u003d arr[1].trim().split(\" /to \");","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Goh-Li-Ting"},"content":" if (dateTimeArgs[0].trim().equals(\"\") || dateTimeArgs.length \u003d\u003d 1 || dateTimeArgs[1].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input events in the format \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Goh-Li-Ting"},"content":" \"\u0027event [task description] /from [dd/MM/yyyy HHmm] /to [dd/MM/yyyy HHmm]\u0027.\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Goh-Li-Ting"},"content":" \"The task description, from datetime and to datetime cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Goh-Li-Ting"},"content":" // parse date time arguments to LocalDateTime object","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime from \u003d parseDateTime(dateTimeArgs[0].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime to \u003d parseDateTime(dateTimeArgs[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"Goh-Li-Ting"},"content":" return new EventCommand(taskDescription, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a DeleteCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the task number of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The DeleteCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is not a numerical number.","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Goh-Li-Ting"},"content":" private static DeleteCommand prepareDelete(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskNum \u003d Integer.parseInt(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"Goh-Li-Ting"},"content":" return new DeleteCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number in digits (e.g. 1).\");","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a MarkCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the task number of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The MarkCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is not a numerical number.","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"Goh-Li-Ting"},"content":" private static MarkCommand prepareMark(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskNum \u003d Integer.parseInt(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"Goh-Li-Ting"},"content":" return new MarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number in digits (e.g. 1).\");","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns an UnmarkCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the task number of the task to mark as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The UnmarkCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is not a numerical number.","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"Goh-Li-Ting"},"content":" private static UnmarkCommand prepareUnmark(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskNum \u003d Integer.parseInt(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"Goh-Li-Ting"},"content":" return new UnmarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number in digits (e.g. 1).\");","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a LocalDate object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param dateString The string representing the date in the format dd/MM/yyyy.","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The LocalDate object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the input string is in the wrong format.","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"Goh-Li-Ting"},"content":" private static LocalDate parseDate(String dateString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate date \u003d LocalDate.parse(dateString, FORMATTER_INPUT_DEADLINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"Goh-Li-Ting"},"content":" return date;","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input the deadline date in the format dd/MM/yyyy.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a LocalDateTime object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param dateTimeString The string representing the datetime in the format dd/MM/yyyy HHmm.","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The LocalDateTime object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the input string is in the wrong format.","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":219,"author":{"gitId":"Goh-Li-Ting"},"content":" private static LocalDateTime parseDateTime(String dateTimeString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(dateTimeString, FORMATTER_INPUT_EVENT);","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"Goh-Li-Ting"},"content":" return dateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input the datetime in the format dd/MM/yyyy HHmm.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":229,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a Task object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":230,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":231,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskString The string representing the task in saved format.","lastModifiedDate":"2023-09-02"},{"lineNumber":232,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The Task object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":233,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the input string is in the wrong format.","lastModifiedDate":"2023-09-02"},{"lineNumber":234,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":235,"author":{"gitId":"Goh-Li-Ting"},"content":" public static Task parseToTask(String taskString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] taskData \u003d taskString.split(\" \\\\| \");","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskType \u003d taskData[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"Goh-Li-Ting"},"content":" boolean isCompleted \u003d taskData[1].equals(\"1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskDescription \u003d taskData[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":240,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"Goh-Li-Ting"},"content":" // create task object","lastModifiedDate":"2023-09-01"},{"lineNumber":242,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task;","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"Goh-Li-Ting"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"Goh-Li-Ting"},"content":" task \u003d new ToDo(taskDescription);","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"Goh-Li-Ting"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate by \u003d parseDate(taskData[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"Goh-Li-Ting"},"content":" task \u003d new Deadline(taskDescription, by);","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"Goh-Li-Ting"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":249,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime from \u003d parseDateTime(taskData[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":250,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime to \u003d parseDateTime(taskData[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"Goh-Li-Ting"},"content":" task \u003d new Event(taskDescription, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"Goh-Li-Ting"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Error parsing data from file\");","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":255,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"Goh-Li-Ting"},"content":" // update completion status","lastModifiedDate":"2023-09-01"},{"lineNumber":257,"author":{"gitId":"Goh-Li-Ting"},"content":" if (isCompleted) {","lastModifiedDate":"2023-09-01"},{"lineNumber":258,"author":{"gitId":"Goh-Li-Ting"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":259,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":260,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":261,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":262,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":263,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":263}},{"path":"src/main/java/chatbuddy/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Storage represents a class to handle operations relating to the local storage of task data.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * Data from TaskList can be saved into or loaded from the local storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The filepath of the file containing the task data. */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" private String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a Storage object with the given filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param filePath The filepath of the file containing the task data.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" * Loads the task data from the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If there is an error creating or finding the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" public ArrayList\u003cTask\u003e load() throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" // load file from hard disk","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" File parentDirectory \u003d file.getParentFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" // check for existence of parentDirectory and file","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" if (!parentDirectory.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" parentDirectory.mkdir();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Error creating data file.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" // load data from file","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" Scanner fileScanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" while (fileScanner.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" // populate task array","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d Parser.parseToTask(fileScanner.nextLine());","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Data file not found.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" return taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" * Saves the task data into the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" * Date in the file is overwritten.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param tasks The list of tasks to save.","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If there is an error saving data into the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":" public void save(TaskList tasks) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" FileWriter fileWriter \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d tasks.getTaskStringsToSave();","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" for (String taskString : taskStrings) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" fileWriter.write(taskString + System.lineSeparator());","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Error saving data into file.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":92}},{"path":"src/main/java/chatbuddy/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" * Deadline represents a Deadline object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * A deadline is a task that has a deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for date inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATE_INPUT \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for date outputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATE_OUTPUT \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The deadline of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" protected LocalDate by;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a Deadline object with the given description and deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a boolean representing whether the task is due within a week.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if the deadline is due within a week, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isWithinAWeek() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" return by.isBefore(LocalDate.now().plus(1, ChronoUnit.WEEKS));","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(FORMATTER_DATE_OUTPUT) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns deadline task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is D | [1 if completed, 0 if not completed] | [task description] | [by].","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The deadline task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"D | \" + super.getInformationForSaving() + \" | \" + by.format(FORMATTER_DATE_INPUT);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":57}},{"path":"src/main/java/chatbuddy/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" * Event represents an Event object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * An event is a task that has a \u0027from\u0027 datetime and a \u0027to\u0027 datetime.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for datetime inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATETIME_INPUT \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for datetime outputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATETIME_OUTPUT \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The \u0027from\u0027 datetime of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The \u0027to\u0027 datetime of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * Constructor to create an Event object.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The task description.","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param from The task\u0027s start date/time in the format dd/MM/yyyy HHmm.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param to The task\u0027s end date/time in the format.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a boolean representing whether the event starts within a week.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if the event starts within a week, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isWithinAWeek() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" return from.isBefore(LocalDateTime.now().plus(1, ChronoUnit.WEEKS));","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" \"[E]%1s (from: %2s to: %3s)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" from.format(FORMATTER_DATETIME_OUTPUT),","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" to.format(FORMATTER_DATETIME_OUTPUT)","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns deadline task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is E | [1 if completed, 0 if not completed] | [task description] | [from] | [to].","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The event task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" \"E | %1s | %2s | %3s\",","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" super.getInformationForSaving(),","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" from.format(FORMATTER_DATETIME_INPUT),","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" to.format(FORMATTER_DATETIME_INPUT));","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":70}},{"path":"src/main/java/chatbuddy/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":" * Task represents a Task object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":" * A task has a description and a boolean representing whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The description of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The boolean representing whether the task is done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates a Task object with a given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * The task object is not done by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Marks the task as done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Marks the task as not done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the status icon of the task based on whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The status icon of the task. Returns X if task is done, else returns an empty space.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a boolean representing whether the task is due or an event starts within a week.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if task is due or starts within a week, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isWithinAWeek() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(\"[%1s] %2s\", getStatusIcon(), description);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is [1 if completed, 0 if not completed] | [task description].","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(\"%1s | %2s\", isDone ? \"1\" : \"0\", description);","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" * Checks if the description of the task contains the given keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if the description contains the keyword, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean containKeyword(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" return description.contains(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":77}},{"path":"src/main/java/chatbuddy/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":" * ToDo represents a ToDo object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":" * A todo object is a task and has a description and a boolean representing whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a ToDo object with the given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns todo task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is T | [1 if completed, 0 if not completed] | [task description].","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The todo task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"T | \" + super.getInformationForSaving();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":33}},{"path":"src/main/java/chatbuddy/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * The Ui class handles interactions with the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" * It reads inputs from the users and output messages to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private final String DIVIDER \u003d \" ____________________________________________________________\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Creates an instance of an Ui object. */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" public Ui() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Prints out a divider. */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(this.DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Prints the welcome message. */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" Hello! I\u0027m Chat Buddy!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Prints the exit message. */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Prints the error message. */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" \" + errorMessage);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" * Reads the user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" * Prints a list of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskStrings The list of tasks represented by Strings.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param message The message to print before the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showTaskList(ArrayList\u003cString\u003e taskStrings, String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" \" + message);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" for (int i \u003d 0; i \u003c taskStrings.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskString \u003d taskStrings.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(String.format(\" %1s.%2s\", i + 1, taskString));","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" * Prints a confirmation message about the addition of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param totalNumOfTasks The number of tasks after the task was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showTaskAddition(Task task, int totalNumOfTasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(String.format(\" Now you have %d tasks in the list.\", totalNumOfTasks));","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" * Prints a confirmation message about the deletion of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param totalNumOfTasks The number of tasks after the task was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showTaskDeletion(Task task, int totalNumOfTasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(String.format(\" Now you have %d tasks in the list.\", totalNumOfTasks));","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":" * Prints a confirmation message about a task being marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showMarkTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Goh-Li-Ting"},"content":" * Prints a confirmation message about a task being marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showUnmarkTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":110}},{"path":"src/test/java/chatbuddy/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" public void getTaskStringsToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" // set up task list","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" ToDo taskOne \u003d new ToDo(\"task1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" ToDo taskTwo \u003d new ToDo(\"task2\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(taskOne);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(taskTwo);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" taskTwo.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d tasks.getTaskStringsToSave();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(2, taskStrings.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"T | 0 | task1\", taskStrings.get(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"T | 1 | task2\", taskStrings.get(1));","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":27}},{"path":"src/test/java/chatbuddy/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_listCommandWord_listCommandReturned() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(ListCommand.class, command.getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" Command command \u003d Parser.parse(\"list abcdefg\");","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(ListCommand.class, command.getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_invalidCommandWord_chatBuddyExceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"hi\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"Bye\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_missingTodoDescription_chatBuddyExceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"☹ OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"todo \");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"☹ OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_invalidDeadlineInput_chatBuddyExceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" String errorMessage \u003d \"☹ OOPS!!! Please input deadlines in the format \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" \"\u0027deadline [task description] /by [deadline in dd/MM/yyyy]\u0027.\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" \"The task description and deadline cannot be empty.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" String dateFormatErrorMessage \u003d \"☹ OOPS!!! Please input the deadline date in the format dd/MM/yyyy.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline \");","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(errorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline /by\");","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(errorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline xx /by \");","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(errorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline task /by Sunday\");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(dateFormatErrorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline task /by 01/09/2023 2359\");","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(dateFormatErrorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":107}},{"path":"src/test/java/chatbuddy/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class EventTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" // create event object","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime from \u003d LocalDateTime.parse(\"01/09/2023 1000\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime to \u003d LocalDateTime.parse(\"01/09/2023 1732\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" Event event \u003d new Event(\"event1\", from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" public void getInformationForSaving() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"E | 0 | event1 | 01/09/2023 1000 | 01/09/2023 1732\", event.getInformationForSaving());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":20}},{"path":"src/test/java/chatbuddy/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" Task todo \u003d new ToDo(\"read book\");","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" Task deadline \u003d new Deadline(\"return book\",","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate.parse(\"23/09/2023\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" DateTimeFormatter dateTimeFormatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" Task event \u003d new Event(","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" \"go out\",","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime.parse(\"01/09/2023 1000\", dateTimeFormatter),","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime.parse(\"01/09/2023 1732\", dateTimeFormatter)","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(true, todo.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(true, deadline.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(true, event.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" todo.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" deadline.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" event.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(false, todo.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(false, deadline.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(false, event.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":44}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"todo buy groceries","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"deadline do homework /by 02/09/2023","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"event birthday party /from 03/09/2023 1400 /to 03/09/2023 1700","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"deadline return book /by 10/12/2023","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"todo read book","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"unmark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"find book","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":12}},{"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":"Goh-Li-Ting"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\chatbuddy\\*.java","lastModifiedDate":"2023-09-01"},{"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":"Goh-Li-Ting"},"content":"java -classpath ..\\bin chatbuddy.ChatBuddy \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"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":{"-":19,"Goh-Li-Ting":2}}] +[{"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":"Goh-Li-Ting"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"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":"Goh-Li-Ting"},"content":"mainClassName \u003d \u0027chatbuddy.ChatBuddy\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"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":"Goh-Li-Ting"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" toolVersion \u003d \u002710.12.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" mainClass.set(\"chatbuddy.ChatBuddy\")","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" archiveFileName \u003d \u0027chatBuddy.jar\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" archiveBaseName \u003d \"chatBuddy\"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":40,"Goh-Li-Ting":10}},{"path":"src/main/java/chatbuddy/ChatBuddy.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/** ChatBuddy is a chatbot that helps a user keep track of tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ChatBuddy {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of ChatBuddy with a specified filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param filePath The filepath of the file to save task data in.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public ChatBuddy(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Runs the chatbot. */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" public void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" Command command \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" command.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" isExit \u003d command.isExit();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" } finally {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" new ChatBuddy(\"data/tasks.txt\").run();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Goh-Li-Ting":53}},{"path":"src/main/java/chatbuddy/ChatBuddyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"/** ChatBuddyException represents exceptions in the ChatBuddy application. */","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ChatBuddyException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a ChatBuddyException.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the error.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public ChatBuddyException(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"☹ OOPS!!! \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" return toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":25}},{"path":"src/main/java/chatbuddy/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * The TaskList represents a list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" * Tasks can be added or delete from the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" * Tasks in the list can be mark as done or not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The list of tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Returns an instance of a TaskList that has no tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns an instance of a TaskList with the list of inputted tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param tasks The tasks that the TaskList should contain.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the size of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The size of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" public int getSize() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" return tasks.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" * Checks if the task number is valid.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" * The task number is valid if it is within the range of available task.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" * The task number is invalid if the task number exceeds the number of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number to check for.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" private void checkValidTaskNumber(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" if (taskNum \u003e tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number. There are only \"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" + getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" * Adds a task to the back of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task to add to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" * Deletes the task with the given task number from the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task object that is deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task deleteTask(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" // check for valid task number","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" checkValidTaskNumber(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" // delete task from list","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskIndex \u003d taskNum - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" * Marks the task with the given task number as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task that was marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task markTaskAsDone(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" // check for valid task number","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":" checkValidTaskNumber(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":" // mark task as done","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskIndex \u003d taskNum - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Goh-Li-Ting"},"content":" * Marks the task with the given task number as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task that was marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task markTaskAsNotDone(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Goh-Li-Ting"},"content":" // check for valid task number","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Goh-Li-Ting"},"content":" checkValidTaskNumber(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Goh-Li-Ting"},"content":" // mark task as done","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskIndex \u003d taskNum - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Goh-Li-Ting"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a list of strings representing the task in the format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A list of strings representing the task in the format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Goh-Li-Ting"},"content":" public ArrayList\u003cString\u003e getTaskStringsToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"Goh-Li-Ting"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskString \u003d task.getInformationForSaving();","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Goh-Li-Ting"},"content":" taskStrings.add(taskString);","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Goh-Li-Ting"},"content":" return taskStrings;","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a list of strings representing the task in the format for printing.","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A list of strings representing the task in the format for printing.","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Goh-Li-Ting"},"content":" public ArrayList\u003cString\u003e getTaskStringsToPrint() {","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Goh-Li-Ting"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Goh-Li-Ting"},"content":" taskStrings.add(task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Goh-Li-Ting"},"content":" return taskStrings;","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Goh-Li-Ting"},"content":" * Finds a list of tasks containing the given keyword in their description.","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A TaskList containing a list of tasks that contains the given keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Goh-Li-Ting"},"content":" public TaskList getMatchingTasks(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Goh-Li-Ting"},"content":" return new TaskList(tasks.stream()","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Goh-Li-Ting"},"content":" .filter(task -\u003e task.containKeyword(keyword))","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Goh-Li-Ting"},"content":" .collect(Collectors.toCollection(ArrayList::new)));","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":155}},{"path":"src/main/java/chatbuddy/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/** Command is an abstract class that represents commands that can be executed. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" * Executes the command.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param ui The ui used to handle interactions with the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param storage The storage used to load and save tasks in a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the execution of the command has an error.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns true if the command is an exit command, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return False by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":29}},{"path":"src/main/java/chatbuddy/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"/** DeadlineCommand represents a command to create a deadline task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"deadline\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private String taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a DeadlineCommand with the given description and deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" public DeadlineCommand(String taskDescription, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" Deadline deadline \u003d new Deadline(taskDescription, by);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showTaskAddition(deadline, tasks.getSize());","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":34}},{"path":"src/main/java/chatbuddy/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** DeleteCommand represents a command to delete a task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" private int taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a delete command with the given task number.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" public DeleteCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.deleteTask(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showTaskDeletion(task, tasks.getSize());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":28}},{"path":"src/main/java/chatbuddy/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"/** EventCommand represents a command to create an event task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"event\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private String taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a EventCommand with the given description, \u0027from\u0027 and \u0027to\u0027 datetimes.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param from The datetime that the event starts from.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param to The datetime that the events ends at.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public EventCommand(String taskDescription, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" Event event \u003d new Event(taskDescription, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showTaskAddition(event, tasks.getSize());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":37}},{"path":"src/main/java/chatbuddy/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/** ExitCommand represents a command to exit the chatbot. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showExit();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns true if the command is an exit command, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":29}},{"path":"src/main/java/chatbuddy/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** FindCommand represents a command to find a list of tasks containing a keyword. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private String keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a FindCommand with the given keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" TaskList matchingTasks \u003d tasks.getMatchingTasks(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d matchingTasks.getTaskStringsToPrint();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showTaskList(taskStrings, \"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Goh-Li-Ting":31}},{"path":"src/main/java/chatbuddy/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** ListCommand represents a command to show the list of tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d tasks.getTaskStringsToPrint();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showTaskList(taskStrings, \"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":19}},{"path":"src/main/java/chatbuddy/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** MarkCommand represents a command to mark a task as done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"mark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private int taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a MarkCommand with the given task number.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public MarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.markTaskAsDone(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showMarkTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":29}},{"path":"src/main/java/chatbuddy/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** TodoCommand represents a command to create a todo task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private String taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a TodoCommand with the given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public TodoCommand(String taskDescription) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" ToDo todo \u003d new ToDo(taskDescription);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showTaskAddition(todo, tasks.getSize());","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":30}},{"path":"src/main/java/chatbuddy/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** UnmarkCommand represents a command to mark a task as not done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"unmark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private int taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of an UnmarkCommand with the given task number.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public UnmarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.markTaskAsNotDone(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" ui.showUnmarkTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":29}},{"path":"src/main/java/chatbuddy/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.DeadlineCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.DeleteCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.EventCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.MarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.TodoCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.UnmarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * Parser represents a class to handle the parsing of user commands.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" * Parser can also parse task data from storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter for deadline inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_INPUT_DEADLINE \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter for event datetime inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_INPUT_EVENT \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" * Parses the user command and returns a Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param commandString The command inputted by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The command to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the command is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" public static Command parse(String commandString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] commandArray \u003d commandString.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" String command \u003d commandArray[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" String args \u003d commandArray.length \u003e 1 ? commandArray[1] : \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" case TodoCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareAddTodo(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" case DeadlineCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareAddDeadline(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" case EventCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareAddEvent(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareDelete(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" case MarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareMark(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" case UnmarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareUnmark(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" case FindCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" return new FindCommand(args);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a TodoCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The TodoCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the description of the task is empty or consists only of whitespace.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" private static TodoCommand prepareAddTodo(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" if (args.trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" return new TodoCommand(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a DeadlineCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the description and deadline of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The DeadlineCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the description or deadline of the task is empty or consists only of whitespace.","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Goh-Li-Ting"},"content":" private static DeadlineCommand prepareAddDeadline(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] arr \u003d args.split(\" /by \");","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskDescription \u003d arr[0].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Goh-Li-Ting"},"content":" // check validity of arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Goh-Li-Ting"},"content":" if (taskDescription.equals(\"\") || arr.length \u003d\u003d 1 || arr[1].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input deadlines in the format \"","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"\u0027deadline [task description] /by [deadline in dd/MM/yyyy]\u0027.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"The task description and deadline cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Goh-Li-Ting"},"content":" // parse deadline string to LocalDate object","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate date \u003d parseDate(arr[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Goh-Li-Ting"},"content":" return new DeadlineCommand(taskDescription, date);","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns an EventCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the description,","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Goh-Li-Ting"},"content":" * the \u0027from\u0027 datetime and the \u0027to\u0027 datetime task.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The EventCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the description, \u0027from\u0027 or \u0027to\u0027 datetime is empty of consists only of whitespaces.","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Goh-Li-Ting"},"content":" private static EventCommand prepareAddEvent(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Goh-Li-Ting"},"content":" // check validity of arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] arr \u003d args.split(\" /from \");","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskDescription \u003d arr[0].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Goh-Li-Ting"},"content":" if (taskDescription.equals(\"\") || arr.length \u003d\u003d 1 || arr[1].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input events in the format \"","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"\u0027event [task description] /from [dd/MM/yyyy HHmm] /to [dd/MM/yyyy HHmm]\u0027.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"The task description, from datetime and to datetime cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] dateTimeArgs \u003d arr[1].trim().split(\" /to \");","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"Goh-Li-Ting"},"content":" if (dateTimeArgs[0].trim().equals(\"\") || dateTimeArgs.length \u003d\u003d 1 || dateTimeArgs[1].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input events in the format \"","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"\u0027event [task description] /from [dd/MM/yyyy HHmm] /to [dd/MM/yyyy HHmm]\u0027.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"The task description, from datetime and to datetime cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Goh-Li-Ting"},"content":" // parse date time arguments to LocalDateTime object","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime from \u003d parseDateTime(dateTimeArgs[0].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime to \u003d parseDateTime(dateTimeArgs[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"Goh-Li-Ting"},"content":" return new EventCommand(taskDescription, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a DeleteCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the task number of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The DeleteCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is not a numerical number.","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Goh-Li-Ting"},"content":" private static DeleteCommand prepareDelete(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskNum \u003d Integer.parseInt(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"Goh-Li-Ting"},"content":" return new DeleteCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number in digits (e.g. 1).\");","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a MarkCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the task number of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The MarkCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is not a numerical number.","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"Goh-Li-Ting"},"content":" private static MarkCommand prepareMark(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskNum \u003d Integer.parseInt(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"Goh-Li-Ting"},"content":" return new MarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number in digits (e.g. 1).\");","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns an UnmarkCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the task number of the task to mark as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The UnmarkCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is not a numerical number.","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"Goh-Li-Ting"},"content":" private static UnmarkCommand prepareUnmark(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskNum \u003d Integer.parseInt(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"Goh-Li-Ting"},"content":" return new UnmarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number in digits (e.g. 1).\");","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a LocalDate object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param dateString The string representing the date in the format dd/MM/yyyy.","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The LocalDate object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the input string is in the wrong format.","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"Goh-Li-Ting"},"content":" private static LocalDate parseDate(String dateString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate date \u003d LocalDate.parse(dateString, FORMATTER_INPUT_DEADLINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"Goh-Li-Ting"},"content":" return date;","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input the deadline date in the format dd/MM/yyyy.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a LocalDateTime object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param dateTimeString The string representing the datetime in the format dd/MM/yyyy HHmm.","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The LocalDateTime object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the input string is in the wrong format.","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"Goh-Li-Ting"},"content":" private static LocalDateTime parseDateTime(String dateTimeString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(dateTimeString, FORMATTER_INPUT_EVENT);","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"Goh-Li-Ting"},"content":" return dateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input the datetime in the format dd/MM/yyyy HHmm.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":228,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a Task object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":229,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":230,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskString The string representing the task in saved format.","lastModifiedDate":"2023-09-02"},{"lineNumber":231,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The Task object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":232,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the input string is in the wrong format.","lastModifiedDate":"2023-09-02"},{"lineNumber":233,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":234,"author":{"gitId":"Goh-Li-Ting"},"content":" public static Task parseToTask(String taskString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] taskData \u003d taskString.split(\" \\\\| \");","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskType \u003d taskData[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"Goh-Li-Ting"},"content":" boolean isCompleted \u003d taskData[1].equals(\"1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskDescription \u003d taskData[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":240,"author":{"gitId":"Goh-Li-Ting"},"content":" // create task object","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task;","lastModifiedDate":"2023-09-01"},{"lineNumber":242,"author":{"gitId":"Goh-Li-Ting"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"Goh-Li-Ting"},"content":" task \u003d new ToDo(taskDescription);","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"Goh-Li-Ting"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate by \u003d parseDate(taskData[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"Goh-Li-Ting"},"content":" task \u003d new Deadline(taskDescription, by);","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"Goh-Li-Ting"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime from \u003d parseDateTime(taskData[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":249,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime to \u003d parseDateTime(taskData[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":250,"author":{"gitId":"Goh-Li-Ting"},"content":" task \u003d new Event(taskDescription, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"Goh-Li-Ting"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Error parsing data from file\");","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":255,"author":{"gitId":"Goh-Li-Ting"},"content":" // update completion status","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"Goh-Li-Ting"},"content":" if (isCompleted) {","lastModifiedDate":"2023-09-01"},{"lineNumber":257,"author":{"gitId":"Goh-Li-Ting"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":258,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":259,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":260,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":261,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":262,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":262}},{"path":"src/main/java/chatbuddy/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.parser.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Storage represents a class to handle operations relating to the local storage of task data.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * Data from TaskList can be saved into or loaded from the local storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The filepath of the file containing the task data. */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" private String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a Storage object with the given filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param filePath The filepath of the file containing the task data.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" * Loads the task data from the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If there is an error creating or finding the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" public ArrayList\u003cTask\u003e load() throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" // load file from hard disk","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" File parentDirectory \u003d file.getParentFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" // check for existence of parentDirectory and file","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" if (!parentDirectory.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" parentDirectory.mkdir();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Error creating data file.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" // load data from file","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" Scanner fileScanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" while (fileScanner.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" // populate task array","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d Parser.parseToTask(fileScanner.nextLine());","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Data file not found.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" return taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" * Saves the task data into the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" * Date in the file is overwritten.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param tasks The list of tasks to save.","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If there is an error saving data into the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":" public void save(TaskList tasks) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" FileWriter fileWriter \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d tasks.getTaskStringsToSave();","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" for (String taskString : taskStrings) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" fileWriter.write(taskString + System.lineSeparator());","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Error saving data into file.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":92}},{"path":"src/main/java/chatbuddy/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" * Deadline represents a Deadline object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * A deadline is a task that has a deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for date inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATE_INPUT \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for date outputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATE_OUTPUT \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The deadline of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" protected LocalDate by;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a Deadline object with the given description and deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a boolean representing whether the task is due within a week.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if the deadline is due within a week, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isWithinAWeek() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" return by.isBefore(LocalDate.now().plus(1, ChronoUnit.WEEKS));","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(FORMATTER_DATE_OUTPUT) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns deadline task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is D | [1 if completed, 0 if not completed] | [task description] | [by].","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The deadline task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"D | \" + super.getInformationForSaving() + \" | \" + by.format(FORMATTER_DATE_INPUT);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":57}},{"path":"src/main/java/chatbuddy/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" * Event represents an Event object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * An event is a task that has a \u0027from\u0027 datetime and a \u0027to\u0027 datetime.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for datetime inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATETIME_INPUT \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for datetime outputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATETIME_OUTPUT \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The \u0027from\u0027 datetime of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The \u0027to\u0027 datetime of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * Constructor to create an Event object.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The task description.","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param from The task\u0027s start date/time in the format dd/MM/yyyy HHmm.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param to The task\u0027s end date/time in the format.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a boolean representing whether the event starts within a week.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if the event starts within a week, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isWithinAWeek() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" return from.isBefore(LocalDateTime.now().plus(1, ChronoUnit.WEEKS));","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" \"[E]%1s (from: %2s to: %3s)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" from.format(FORMATTER_DATETIME_OUTPUT),","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" to.format(FORMATTER_DATETIME_OUTPUT)","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns deadline task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is E | [1 if completed, 0 if not completed] | [task description] | [from] | [to].","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The event task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" \"E | %1s | %2s | %3s\",","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" super.getInformationForSaving(),","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" from.format(FORMATTER_DATETIME_INPUT),","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" to.format(FORMATTER_DATETIME_INPUT));","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":70}},{"path":"src/main/java/chatbuddy/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":" * Task represents a Task object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":" * A task has a description and a boolean representing whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The description of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The boolean representing whether the task is done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates a Task object with a given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * The task object is not done by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Marks the task as done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Marks the task as not done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the status icon of the task based on whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The status icon of the task. Returns X if task is done, else returns an empty space.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a boolean representing whether the task is due or an event starts within a week.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if task is due or starts within a week, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isWithinAWeek() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(\"[%1s] %2s\", getStatusIcon(), description);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is [1 if completed, 0 if not completed] | [task description].","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(\"%1s | %2s\", isDone ? \"1\" : \"0\", description);","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" * Checks if the description of the task contains the given keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if the description contains the keyword, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean containKeyword(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" return description.contains(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":77}},{"path":"src/main/java/chatbuddy/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":" * ToDo represents a ToDo object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":" * A todo object is a task and has a description and a boolean representing whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a ToDo object with the given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns todo task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is T | [1 if completed, 0 if not completed] | [task description].","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The todo task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"T | \" + super.getInformationForSaving();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":33}},{"path":"src/main/java/chatbuddy/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * The Ui class handles interactions with the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" * It reads inputs from the users and output messages to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final String DIVIDER \u003d \" ____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Creates an instance of an Ui object. */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" public Ui() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Prints out a divider. */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(this.DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Prints the welcome message. */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" Hello! I\u0027m Chat Buddy!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Prints the exit message. */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Prints the error message. */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" \" + errorMessage);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" * Reads the user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" * Prints a list of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskStrings The list of tasks represented by Strings.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param message The message to print before the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showTaskList(ArrayList\u003cString\u003e taskStrings, String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" \" + message);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" for (int i \u003d 0; i \u003c taskStrings.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskString \u003d taskStrings.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(String.format(\" %1s.%2s\", i + 1, taskString));","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" * Prints a confirmation message about the addition of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param totalNumOfTasks The number of tasks after the task was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showTaskAddition(Task task, int totalNumOfTasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(String.format(\" Now you have %d tasks in the list.\", totalNumOfTasks));","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" * Prints a confirmation message about the deletion of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param totalNumOfTasks The number of tasks after the task was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showTaskDeletion(Task task, int totalNumOfTasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(String.format(\" Now you have %d tasks in the list.\", totalNumOfTasks));","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":" * Prints a confirmation message about a task being marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showMarkTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Goh-Li-Ting"},"content":" * Prints a confirmation message about a task being marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showUnmarkTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Goh-Li-Ting"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":110}},{"path":"src/test/java/chatbuddy/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" public void getTaskStringsToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" // set up task list","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" ToDo taskOne \u003d new ToDo(\"task1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" ToDo taskTwo \u003d new ToDo(\"task2\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(taskOne);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(taskTwo);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" taskTwo.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d tasks.getTaskStringsToSave();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(2, taskStrings.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"T | 0 | task1\", taskStrings.get(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"T | 1 | task2\", taskStrings.get(1));","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":27}},{"path":"src/test/java/chatbuddy/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.ListCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_listCommandWord_listCommandReturned() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(ListCommand.class, command.getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" Command command \u003d Parser.parse(\"list abcdefg\");","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(ListCommand.class, command.getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_invalidCommandWord_chatBuddyExceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"hi\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"Bye\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_missingTodoDescription_chatBuddyExceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"☹ OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"todo \");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"☹ OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_invalidDeadlineInput_chatBuddyExceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" String errorMessage \u003d \"☹ OOPS!!! Please input deadlines in the format \"","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"\u0027deadline [task description] /by [deadline in dd/MM/yyyy]\u0027.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"The task description and deadline cannot be empty.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" String dateFormatErrorMessage \u003d \"☹ OOPS!!! Please input the deadline date in the format dd/MM/yyyy.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline \");","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(errorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline /by\");","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(errorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline xx /by \");","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(errorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline task /by Sunday\");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(dateFormatErrorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline task /by 01/09/2023 2359\");","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(dateFormatErrorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":107}},{"path":"src/test/java/chatbuddy/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class EventTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" // create event object","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDateTime from \u003d LocalDateTime.parse(\"01/09/2023 1000\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDateTime to \u003d LocalDateTime.parse(\"01/09/2023 1732\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private Event event \u003d new Event(\"event1\", from, to);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" public void getInformationForSaving() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"E | 0 | event1 | 01/09/2023 1000 | 01/09/2023 1732\", event.getInformationForSaving());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":20}},{"path":"src/test/java/chatbuddy/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" private Task todo \u003d new ToDo(\"read book\");","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private Task deadline \u003d new Deadline(\"return book\",","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate.parse(\"23/09/2023\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private DateTimeFormatter dateTimeFormatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" private Task event \u003d new Event(","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" \"go out\",","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime.parse(\"01/09/2023 1000\", dateTimeFormatter),","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime.parse(\"01/09/2023 1732\", dateTimeFormatter)","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(true, todo.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(true, deadline.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(true, event.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" todo.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" deadline.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" event.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(false, todo.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(false, deadline.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(false, event.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":44}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"todo buy groceries","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"deadline do homework /by 02/09/2023","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"event birthday party /from 03/09/2023 1400 /to 03/09/2023 1700","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"deadline return book /by 10/12/2023","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"todo read book","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"unmark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"find book","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":12}},{"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":"Goh-Li-Ting"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\chatbuddy\\*.java","lastModifiedDate":"2023-09-01"},{"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":"Goh-Li-Ting"},"content":"java -classpath ..\\bin chatbuddy.ChatBuddy \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"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":{"-":19,"Goh-Li-Ting":2}}] diff --git a/Goh-Li-Ting_ip_master/commits.json b/Goh-Li-Ting_ip_master/commits.json index b029c141..499c39ca 100644 --- a/Goh-Li-Ting_ip_master/commits.json +++ b/Goh-Li-Ting_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Goh-Li-Ting":[{"date":"2023-08-23","commitResults":[{"hash":"51a9ed294f76d758b0492c4d5ec3e7650cbd0d14","isMergeCommit":false,"messageTitle":"Add greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":10}}},{"hash":"77c936ed3640f5aa2db09fecdd866d532cff02ce","isMergeCommit":false,"messageTitle":"Add ability to echo commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}}]},{"date":"2023-08-24","commitResults":[{"hash":"0b86517ee7e89a8ada0b606b7574db2efb185232","isMergeCommit":false,"messageTitle":"Add ability to add tasks to list and display list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":3}}},{"hash":"b00566faedc7693f45ac7a5ef049f0ae53ff46df","isMergeCommit":false,"messageTitle":"Add ability to mark as done and not done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":5}}},{"hash":"ba315951960c89ae8cdb02f5462ea4b3646fa87f","isMergeCommit":false,"messageTitle":"Add todo, event and deadline tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":151,"deletions":10}}},{"hash":"ee740f323639a6968328bfccde17f76a7a7cf6cf","isMergeCommit":false,"messageTitle":"Add text UI testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"081d2c122284616b24658d732740a16f5c081f8a","isMergeCommit":false,"messageTitle":"Add error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":22}}},{"hash":"a2b11215bdddd8c8622e6edebee9531891ca1803","isMergeCommit":false,"messageTitle":"Add ability to delete tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":36,"deletions":20}}}]},{"date":"2023-08-30","commitResults":[{"hash":"9353d334cb242b0128314c02295f5225bbbd26d3","isMergeCommit":false,"messageTitle":"Add ability to save tasks and retrieve saved tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":180,"deletions":54}}},{"hash":"cfdaac379a8317ffc633fa695eb596d9c61e92fd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"1ac6ce15befa330090524025a462e23ea41d24a6","isMergeCommit":false,"messageTitle":"Add datetime format to deadline and event","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":47,"deletions":13}}},{"hash":"1fb50d4433782137bb153df3b25bbff0bfb48822","isMergeCommit":false,"messageTitle":"Add ability to get deadlines/events within a week","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":12}}},{"hash":"21e28b28becb0b6ccb4e4a9a4cce53b857efc3d0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"33c6a28dd68c80ec55f573ffbceaea0e71561034","isMergeCommit":false,"messageTitle":"Abstract out classes for OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":559,"deletions":377}}},{"hash":"0956f91098f1964af81dbba01d173e9214c608db","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"d387888547c12caa70f02cbe767846d15bce888b","isMergeCommit":false,"messageTitle":"Organise classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":6},"bat":{"insertions":2,"deletions":2}}},{"hash":"ab3ac453fc505436939bc4cde431dd5f879936f8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"ea87dd115ebb669ca515c29d51cf2832d661fec4","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6cd9a63857f98c1420c92344906df9a74c4b4228","isMergeCommit":false,"messageTitle":"Set up gradle to run ChatBuddy using gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"a5a12e6faf5f32644f9e69bc7efd2743578f47a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"5b3bd788891d2eabfe40014f56175a3630489c85","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":199,"deletions":1}}},{"hash":"05e9a7eeff874a19803835c1c6388d53d229f717","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"0255c4540be0e155274d5a6a5ab751c680620e4f","isMergeCommit":false,"messageTitle":"Package app as JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"cddc90c4866428b6637c84fad36fc563cc2f13d5","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":326,"deletions":51}}},{"hash":"5f76b46540847e85adb22a09219dc0ad8928c5ba","isMergeCommit":false,"messageTitle":"Add ability to find tasks by keyword","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":58,"deletions":0}}},{"hash":"3d5f2d3d0ac24128b235657e039aaa09cf48c59f","isMergeCommit":false,"messageTitle":"Change code to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"e912d3fdf3140ee48918aa8fd766d299f7899626","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"919d41a3040972ff83f9b1171b9dcd47ea06ddc6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"508aa944fa3c15b0211580692ee7577111cc9b09","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Goh-Li-Ting":{"java":1427,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":6,"txt":12}},"authorContributionVariance":{"Goh-Li-Ting":111193.52},"authorDisplayNameMap":{"Goh-Li-Ting":"CS2103T-T14-1 GOH ..TING"}} +{"authorDailyContributionsMap":{"Goh-Li-Ting":[{"date":"2023-08-23","commitResults":[{"hash":"51a9ed294f76d758b0492c4d5ec3e7650cbd0d14","isMergeCommit":false,"messageTitle":"Add greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":10}}},{"hash":"77c936ed3640f5aa2db09fecdd866d532cff02ce","isMergeCommit":false,"messageTitle":"Add ability to echo commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}}]},{"date":"2023-08-24","commitResults":[{"hash":"0b86517ee7e89a8ada0b606b7574db2efb185232","isMergeCommit":false,"messageTitle":"Add ability to add tasks to list and display list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":3}}},{"hash":"b00566faedc7693f45ac7a5ef049f0ae53ff46df","isMergeCommit":false,"messageTitle":"Add ability to mark as done and not done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":5}}},{"hash":"ba315951960c89ae8cdb02f5462ea4b3646fa87f","isMergeCommit":false,"messageTitle":"Add todo, event and deadline tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":151,"deletions":10}}},{"hash":"ee740f323639a6968328bfccde17f76a7a7cf6cf","isMergeCommit":false,"messageTitle":"Add text UI testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"081d2c122284616b24658d732740a16f5c081f8a","isMergeCommit":false,"messageTitle":"Add error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":22}}},{"hash":"a2b11215bdddd8c8622e6edebee9531891ca1803","isMergeCommit":false,"messageTitle":"Add ability to delete tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":36,"deletions":20}}}]},{"date":"2023-08-30","commitResults":[{"hash":"9353d334cb242b0128314c02295f5225bbbd26d3","isMergeCommit":false,"messageTitle":"Add ability to save tasks and retrieve saved tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":180,"deletions":54}}},{"hash":"cfdaac379a8317ffc633fa695eb596d9c61e92fd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"1ac6ce15befa330090524025a462e23ea41d24a6","isMergeCommit":false,"messageTitle":"Add datetime format to deadline and event","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":47,"deletions":13}}},{"hash":"1fb50d4433782137bb153df3b25bbff0bfb48822","isMergeCommit":false,"messageTitle":"Add ability to get deadlines/events within a week","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":12}}},{"hash":"21e28b28becb0b6ccb4e4a9a4cce53b857efc3d0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"33c6a28dd68c80ec55f573ffbceaea0e71561034","isMergeCommit":false,"messageTitle":"Abstract out classes for OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":559,"deletions":377}}},{"hash":"0956f91098f1964af81dbba01d173e9214c608db","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"d387888547c12caa70f02cbe767846d15bce888b","isMergeCommit":false,"messageTitle":"Organise classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":6},"bat":{"insertions":2,"deletions":2}}},{"hash":"ab3ac453fc505436939bc4cde431dd5f879936f8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"ea87dd115ebb669ca515c29d51cf2832d661fec4","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6cd9a63857f98c1420c92344906df9a74c4b4228","isMergeCommit":false,"messageTitle":"Set up gradle to run ChatBuddy using gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"a5a12e6faf5f32644f9e69bc7efd2743578f47a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"5b3bd788891d2eabfe40014f56175a3630489c85","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":199,"deletions":1}}},{"hash":"05e9a7eeff874a19803835c1c6388d53d229f717","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"0255c4540be0e155274d5a6a5ab751c680620e4f","isMergeCommit":false,"messageTitle":"Package app as JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"cddc90c4866428b6637c84fad36fc563cc2f13d5","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":326,"deletions":51}}},{"hash":"5f76b46540847e85adb22a09219dc0ad8928c5ba","isMergeCommit":false,"messageTitle":"Add ability to find tasks by keyword","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":58,"deletions":0}}},{"hash":"3d5f2d3d0ac24128b235657e039aaa09cf48c59f","isMergeCommit":false,"messageTitle":"Change code to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"e912d3fdf3140ee48918aa8fd766d299f7899626","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"919d41a3040972ff83f9b1171b9dcd47ea06ddc6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"508aa944fa3c15b0211580692ee7577111cc9b09","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"33cdb2764e9cb92e3d833d178ca6021fe90658f5","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"java":{"insertions":73,"deletions":73}}},{"hash":"d0a3f7fac22bfcddae87aa232b0b5743204e600f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Goh-Li-Ting":{"java":1427,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":10,"txt":12}},"authorContributionVariance":{"Goh-Li-Ting":100267.03},"authorDisplayNameMap":{"Goh-Li-Ting":"CS2103T-T14-1 GOH ..TING"}} diff --git a/JasonLCY-Temp_ip_master/authorship.json b/JasonLCY-Temp_ip_master/authorship.json index 09e567c4..18686fab 100644 --- a/JasonLCY-Temp_ip_master/authorship.json +++ b/JasonLCY-Temp_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":"JasonLCY-Temp"},"content":" mainClass.set(\"jeeves.Jeeves\")","lastModifiedDate":"2023-09-03"},{"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":"JasonLCY-Temp"},"content":" archiveBaseName \u003d \"jeeves\"","lastModifiedDate":"2023-09-03"},{"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":{"JasonLCY-Temp":2,"-":40}},{"path":"src/main/java/jeeves/Jeeves.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.DeletedIdException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" * Contains the main method and primary logic for Jeeves.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Jeeves {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final String RELATIVEPATH_DATA_DIRECTORY \u003d \"data\";","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final String RELATIVEPATH_DATA_FILE \u003d \"data/JeevesData.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for a Jeeves object.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" * Currently, requires no arguments to initialize.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" * Creates a new Storage, TaskList, Parser and Ui object for usage during runtime.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" public Jeeves() {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" storage \u003d new Storage(RELATIVEPATH_DATA_DIRECTORY, RELATIVEPATH_DATA_FILE);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks \u003d new TaskList(storage.readTasklistFromFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" * Main process.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param args Optional command line arguments.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" new Jeeves().run();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" * Contains the primary logic for Jeeves.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":" * Constantly loops and waits for a new line of user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":" * Processes the input depending on what was entered.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" public void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" ui.printGreeting();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":" // Waits for user input and process it accordingly","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" while (true) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":" // Reads the user input and parses the relevant tokens for use","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" ArrayList\u003cString\u003e tokens \u003d parser.parseUserInput(sc.nextLine());","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" String currentCommand \u003d tokens.get(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" // Performs a different action depending on the input received","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" // Unless a specific pre-defined command is received, the program will","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":" // print a default error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currentCommand.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" // Displays a different message if no task is being tracked","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" if (Task.getTaskCount() \u003d\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"I am not currently tracking anything for you Master\");","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"This is what I am tracking for you Master\");","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" // Displays the current list of tasks tracked and their status","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" for (int i \u003d 1; i \u003c\u003d Task.getTaskCount(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" if (tasks.getTask(i) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.printTask(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" // Prints an empty line for output clarity","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.print(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" // Get the id and try to process the marking","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" int id \u003d Integer.parseInt(tokens.get(1));","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":" if (tasks.getTask(id) \u003d\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the id to be marked belongs to a deleted task (null), throws the DeletedIdException","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new DeletedIdException();","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.markTask(id);","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Understood, I have marked the following task as done:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.printTask(id);","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (DeletedIdException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"JasonLCY-Temp"},"content":" int id \u003d Integer.parseInt(tokens.get(1));","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"JasonLCY-Temp"},"content":" if (tasks.getTask(id) \u003d\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the id to be marked belongs to a deleted task (null), throws the DeletedIdException","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new DeletedIdException();","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.unmarkTask(id);","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Understood, I have marked the following task as not done:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\" \" + tasks.getTask(id).toString() + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (DeletedIdException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"JasonLCY-Temp"},"content":" int id \u003d Integer.parseInt(tokens.get(1));","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"JasonLCY-Temp"},"content":" if (tasks.getTask(id) \u003d\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the id to be marked belongs to a deleted task (null), throws the DeletedIdException","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new DeletedIdException();","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Understood, I have deleted the following task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\" \" + tasks.getTask(id).toString() + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.setTask(id, null);","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (DeletedIdException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the To.do normally to the task list","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"JasonLCY-Temp"},"content":" Todo newTodo \u003d new Todo(tokens.get(1));","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.addTaskAtIndex(Task.getTaskCount(), newTodo);","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Task added:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"JasonLCY-Temp"},"content":" \" \" + newTodo + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the Date input is in the accepted format","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"JasonLCY-Temp"},"content":" LocalDate deadline \u003d LocalDate.parse(tokens.get(2));","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the \u0027Deadline\u0027 Task to the task list","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"JasonLCY-Temp"},"content":" Deadline newDeadline \u003d new Deadline(tokens.get(1), deadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.addTaskAtIndex(Task.getTaskCount(), newDeadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Deadline added:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"JasonLCY-Temp"},"content":" \" \" + newDeadline + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the \u0027Event\u0027 Task to the task list","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"JasonLCY-Temp"},"content":" Event newEvent \u003d new Event(tokens.get(1), tokens.get(2), tokens.get(3));","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.addTaskAtIndex(Task.getTaskCount(), newEvent);","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Event added:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"JasonLCY-Temp"},"content":" \" \" + newEvent + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.searchFor(tokens.get(1));","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"JasonLCY-Temp"},"content":" // Before the actual termination of the program, writes the current task list to the external file.","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"JasonLCY-Temp"},"content":" storage.writeTasklistToFile(tasks.getTaskListDataAsString());","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"JasonLCY-Temp"},"content":" // Displays the farewell message and terminates the application","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"JasonLCY-Temp"},"content":" ui.printFarewell();","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"JasonLCY-Temp"},"content":" System.exit(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"JasonLCY-Temp"},"content":" // By default, informs the user that the command is not recognized.","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"JasonLCY-Temp"},"content":" ui.printInvalidCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":171}},{"path":"src/main/java/jeeves/exception/DeletedIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when a \u0027null\u0027 is met instead of a Task object.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * nulls are used to represent a deleted task, so essentially this exception is thrown","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" * when an operation is being attempted on a task that has been deleted from the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"public class DeletedIdException extends Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for DeletedIdException.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" public DeletedIdException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" super(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided belongs to a deleted task)\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"JasonLCY-Temp":18}},{"path":"src/main/java/jeeves/exception/MissingByException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when there is no data provided after a \u0027/by \u0027 ","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * Encountered when adding a new deadline task and no \u0027by date\u0027 is provided by the user","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingByException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for MissingByException.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingByException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" super(\"I cannot do that as the deadline has not been provided.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /by \u003cYYYY-MM-DD\u003e\u0027 after the task description\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":17}},{"path":"src/main/java/jeeves/exception/MissingDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when there is no description provided for a task object","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * Encountered when adding any new task object and no description is provided","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingDescriptionException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for MissingDescriptionException.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" * ","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param errorMsg The custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingDescriptionException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":18}},{"path":"src/main/java/jeeves/exception/MissingFromException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when there is no data provided after a \u0027/from \u0027 ","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * Encountered when adding a new event task and no \u0027from date\u0027 is provided by the user","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingFromException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for MissingFromException.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingFromException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" super(\"I cannot do that as the start time has not been provided.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /from \u003cTime/Date\u003e\u0027 after the task description\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":17}},{"path":"src/main/java/jeeves/exception/MissingIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when there is no valid id provided when using a command that requires an id input. ","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * Encountered when attempting to mark, unmark or delete a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingIdException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for MissingIdException.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingIdException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" super(\"I cannot do that as you have not provided me with a Task ID\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":16}},{"path":"src/main/java/jeeves/exception/MissingToException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when there is no data provided after a \u0027/to \u0027 ","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * Encountered when adding a new event task and no \u0027to date\u0027 is provided by the user","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingToException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for MissingToException.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingToException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" super(\"I cannot do that as the end time has not been provided.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /to \u003cTime/Date\u003e\u0027 after the task end date (after /from block)\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":17}},{"path":"src/main/java/jeeves/exception/NotIntegerIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when the id provided is not a valid integer value. ","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * Encountered when attempting to mark, unmark or delete a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"public class NotIntegerIdException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for NotIntegerIdException.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" public NotIntegerIdException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" super(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided is not an integer)\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":17}},{"path":"src/main/java/jeeves/exception/OutOfBoundIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when the id provided does not belong to a task on the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * Encountered when attempting to mark, unmark or delete a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"public class OutOfBoundIdException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for OutOfBoundIdException.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" public OutOfBoundIdException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" super(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided does not exist)\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":17}},{"path":"src/main/java/jeeves/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingByException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingDescriptionException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingFromException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingIdException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingToException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.NotIntegerIdException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.OutOfBoundIdException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" * Parser processes user input and returns an arraylist of string tokens for other classes to use.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_TODO_OFFSET \u003d 5;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_DEADLINE_OFFSET \u003d 9;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_EVENT_OFFSET \u003d 6;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_MARK_OFFSET \u003d 5;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_UNMARK_OFFSET \u003d 7;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_DELETE_OFFSET \u003d 7;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_FIND_OFFSET \u003d 5;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDFIELD_TO_OFFSET \u003d 4;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDFIELD_FROM_OFFSET \u003d 6;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDFIELD_BY_OFFSET \u003d 4;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" * Constructor for a Parser object.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" * Currently, requires no arguments to initialize.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" public Parser() {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" * Takes the user\u0027s input line and returns an array list of relevant string tokens for usage.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" * Used by the live implementation of Jeeves.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" * ","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param input A line of user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return String ArrayList containing relevant useful string tokens","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":" public ArrayList\u003cString\u003e parseUserInput(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" ArrayList\u003cString\u003e args \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" // returns args \u003ccommand\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"mark \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"mark\");","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" // Gets the task ID that the user wish to mark","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" String idString \u003d input.substring(FINDCOMMAND_MARK_OFFSET);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the task ID is invalid, program will throw an error if the id is invalid","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":" checkIfValidId(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the valid id to the args array list and returns args \u003ccommand,id\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"unmark \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"unmark\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" // Gets the task ID that the user wish to unmark","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" String idString \u003d input.substring(FINDCOMMAND_UNMARK_OFFSET);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the task ID is invalid, program will throw an error if the id is invalid","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" checkIfValidId(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the valid id to the args array list and returns args \u003ccommand,id\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"delete \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"delete\");","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" // Gets the task ID that the user wish to delete","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":" String idString \u003d input.substring(FINDCOMMAND_DELETE_OFFSET);","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the task ID is invalid, program will throw an error if the id is invalid","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" checkIfValidId(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the valid id to the args array list and returns args \u003ccommand, id\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"todo \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"todo\");","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the user provided a description","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":" // If so, returns args \u003ccommand, desc\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" // Else throws the custom MissingDescriptionException error","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" String desc \u003d input.substring(FINDCOMMAND_TODO_OFFSET);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" checkIfDescMissing(desc);","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(desc);","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"deadline \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"deadline\");","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the user has entered the command properly","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" // and extracts the relevant information to parse","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" // then returns args \u003ccommand, desc, dyDate\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" int byDateIndex \u003d getByDateIndex(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" String desc \u003d input.substring(FINDCOMMAND_DEADLINE_OFFSET, byDateIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":" String byDate \u003d input.substring(byDateIndex + FINDFIELD_BY_OFFSET);","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(desc);","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(byDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingDescriptionException | MissingByException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"event \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"event\");","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the user has entered the command properly","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"JasonLCY-Temp"},"content":" // and extracts the relevant information to parse","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"JasonLCY-Temp"},"content":" // then returns args \u003ccommand, desc, fromDate, toDate\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"JasonLCY-Temp"},"content":" int fromDateIndex \u003d getFromDateIndex(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"JasonLCY-Temp"},"content":" int toDateIndex \u003d getToDateIndex(input, fromDateIndex);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"JasonLCY-Temp"},"content":" String desc \u003d input.substring(FINDCOMMAND_EVENT_OFFSET, fromDateIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"JasonLCY-Temp"},"content":" String fromDate \u003d input.substring(fromDateIndex + FINDFIELD_FROM_OFFSET, toDateIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"JasonLCY-Temp"},"content":" String toDate \u003d input.substring(toDateIndex + FINDFIELD_TO_OFFSET);","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(desc);","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(fromDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(toDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingDescriptionException | MissingFromException | MissingToException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"find \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"JasonLCY-Temp"},"content":" // Gets the search term the user wishes to find","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"JasonLCY-Temp"},"content":" // and returns args \u003ccommand, findTerm\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"find\");","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"JasonLCY-Temp"},"content":" String findTerm \u003d input.substring(FINDCOMMAND_FIND_OFFSET);","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(findTerm);","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"JasonLCY-Temp"},"content":" return args;","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"JasonLCY-Temp"},"content":" * Checks if a string is only made up of integer numbers.","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"JasonLCY-Temp"},"content":" * Uses regex to determine if a string contains only integers","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param input The string to be checked","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Whether the string is fully comprised of integers","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"JasonLCY-Temp"},"content":" static boolean isNotNumber(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"JasonLCY-Temp"},"content":" return !input.matches(\"[0-9]+\");","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"JasonLCY-Temp"},"content":" * Checks if the string provided can be parsed into a valid id Integer.","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"JasonLCY-Temp"},"content":" * Throws a custom exception with an appropriate error message upon encountering an error.","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"JasonLCY-Temp"},"content":" * Currently, checks if the idString is: Present, is a Number, is within the usable range.","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param idString The string to be checked.","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"JasonLCY-Temp"},"content":" static void checkIfValidId(String idString) {","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"JasonLCY-Temp"},"content":" if (idString.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"JasonLCY-Temp"},"content":" // id field is empty","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingIdException();","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (isNotNumber(idString)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"JasonLCY-Temp"},"content":" // id field is not an integer","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new NotIntegerIdException();","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (Integer.parseInt(idString) \u003e Task.getTaskCount()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"JasonLCY-Temp"},"content":" // id does not exist","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new OutOfBoundIdException();","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"JasonLCY-Temp"},"content":" } ","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingIdException | NotIntegerIdException | OutOfBoundIdException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"JasonLCY-Temp"},"content":" * Checks if the string provided is not empty","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"JasonLCY-Temp"},"content":" * Throws a custom exception with an appropriate error message if it is.","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"JasonLCY-Temp"},"content":" * Else does nothing.","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param desc The string to be checked.","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"JasonLCY-Temp"},"content":" static void checkIfDescMissing(String desc) {","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"JasonLCY-Temp"},"content":" if (desc.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingDescriptionException(\"The description of a todo cannot be empty\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingDescriptionException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"JasonLCY-Temp"},"content":" static int getByDateIndex(String cmd) throws MissingByException, MissingDescriptionException {","lastModifiedDate":"2023-09-03"},{"lineNumber":178,"author":{"gitId":"JasonLCY-Temp"},"content":" int byDateIndex \u003d cmd.indexOf(\"/by \");","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"JasonLCY-Temp"},"content":" if (byDateIndex \u003d\u003d -1 || cmd.length() \u003d\u003d byDateIndex + FINDFIELD_BY_OFFSET) {","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the \"/by \" block is missing, throws the MissingByException","lastModifiedDate":"2023-09-03"},{"lineNumber":181,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingByException();","lastModifiedDate":"2023-09-03"},{"lineNumber":182,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":183,"author":{"gitId":"JasonLCY-Temp"},"content":" if ((byDateIndex - 1) \u003c\u003d FINDCOMMAND_DEADLINE_OFFSET) {","lastModifiedDate":"2023-09-03"},{"lineNumber":184,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingDescriptionException(\"The description of a deadline cannot be empty\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":185,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":186,"author":{"gitId":"JasonLCY-Temp"},"content":" return byDateIndex;","lastModifiedDate":"2023-09-03"},{"lineNumber":187,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":188,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"JasonLCY-Temp"},"content":" static int getFromDateIndex(String input) throws MissingFromException, MissingToException, MissingDescriptionException {","lastModifiedDate":"2023-09-03"},{"lineNumber":190,"author":{"gitId":"JasonLCY-Temp"},"content":" int fromDateIndex \u003d input.indexOf(\"/from \");","lastModifiedDate":"2023-09-03"},{"lineNumber":191,"author":{"gitId":"JasonLCY-Temp"},"content":" if (fromDateIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":192,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the \"/from \" block is missing, throws the MissingFromException","lastModifiedDate":"2023-09-03"},{"lineNumber":193,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingFromException();","lastModifiedDate":"2023-09-03"},{"lineNumber":194,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":195,"author":{"gitId":"JasonLCY-Temp"},"content":" return fromDateIndex;","lastModifiedDate":"2023-09-03"},{"lineNumber":196,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":197,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":198,"author":{"gitId":"JasonLCY-Temp"},"content":" static int getToDateIndex(String input, int fromDateIndex) throws MissingToException,","lastModifiedDate":"2023-09-03"},{"lineNumber":199,"author":{"gitId":"JasonLCY-Temp"},"content":" MissingDescriptionException, MissingFromException {","lastModifiedDate":"2023-09-03"},{"lineNumber":200,"author":{"gitId":"JasonLCY-Temp"},"content":" int toDateIndex \u003d input.indexOf(\"/to \");","lastModifiedDate":"2023-09-03"},{"lineNumber":201,"author":{"gitId":"JasonLCY-Temp"},"content":" if (toDateIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":202,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the \"/to \" block is missing, throws the MissingToException","lastModifiedDate":"2023-09-03"},{"lineNumber":203,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingToException();","lastModifiedDate":"2023-09-03"},{"lineNumber":204,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":205,"author":{"gitId":"JasonLCY-Temp"},"content":" if (input.length() \u003d\u003d (toDateIndex + FINDFIELD_TO_OFFSET)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":206,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the /to block is present but no data has been given to the field, throw ","lastModifiedDate":"2023-09-03"},{"lineNumber":207,"author":{"gitId":"JasonLCY-Temp"},"content":" // the MissingToException","lastModifiedDate":"2023-09-03"},{"lineNumber":208,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingToException();","lastModifiedDate":"2023-09-03"},{"lineNumber":209,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":210,"author":{"gitId":"JasonLCY-Temp"},"content":" if ((fromDateIndex - 1) \u003c\u003d FINDCOMMAND_DEADLINE_OFFSET) {","lastModifiedDate":"2023-09-03"},{"lineNumber":211,"author":{"gitId":"JasonLCY-Temp"},"content":" //If the description is missing, throw the MissingDescription Exception","lastModifiedDate":"2023-09-03"},{"lineNumber":212,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingDescriptionException(\"The description of a event cannot be empty\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":213,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":214,"author":{"gitId":"JasonLCY-Temp"},"content":" if ((toDateIndex - 1) \u003c\u003d (fromDateIndex + FINDFIELD_FROM_OFFSET)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":215,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the /from block is present but no data has been given to the field, throw ","lastModifiedDate":"2023-09-03"},{"lineNumber":216,"author":{"gitId":"JasonLCY-Temp"},"content":" // the MissingFromException","lastModifiedDate":"2023-09-03"},{"lineNumber":217,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingFromException();","lastModifiedDate":"2023-09-03"},{"lineNumber":218,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":219,"author":{"gitId":"JasonLCY-Temp"},"content":" return toDateIndex;","lastModifiedDate":"2023-09-03"},{"lineNumber":220,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":221,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":221}},{"path":"src/main/java/jeeves/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" * Storage is responsible for all read/write/other interactions with the .txt datafile containing Jeeves\u0027s data.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" private final Path dataDirPath;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" private final Path dataFilePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" * Constructor for a Storage object.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" * Takes 2 different Strings and checks if the relative directory and datafile exists.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" * Creates them if they do not exist.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" * ","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param dirPathString Relative path for the directory in String format","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param filePathString Relative path for the data file in String format","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" public Storage(String dirPathString, String filePathString) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the directory exists","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" dataDirPath \u003d Paths.get(dirPathString);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the directory does not exist, create it for the user","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" if (Files.notExists(dataDirPath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" Files.createDirectories(dataDirPath);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" // Do nothing if an error is encountered since the directory existence is already checked","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":" // Theoretically impossible to enter this block","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":" dataFilePath \u003d Paths.get(filePathString);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the file does not exist, create it for the user","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" if (Files.notExists(dataFilePath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" Files.createFile(dataFilePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":" // Do nothing if an error is encountered since the file existence is already checked","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" // Theoretically impossible to enter this block","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" * Writes the provided data to the datafile using BufferedWriter.","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param data The data to be written to the file in String format","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":" public void writeTasklistToFile(String data) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" // Writes the text to the output file","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" BufferedWriter bw \u003d Files.newBufferedWriter(dataFilePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" bw.write(data);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" bw.flush();","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" bw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch(IOException e){","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" * Reads the data from the datafile using BufferedReader.","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" * Creates a new corresponding Task object for each line of valid data.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Task ArrayList containing the tasks re-created from the datafile.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" public ArrayList\u003cTask\u003e readTasklistFromFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" // Initialization step for task list, adds an empty object so the arraylist is 1-indexed","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(null);","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" BufferedReader br \u003d Files.newBufferedReader(dataFilePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" String currLine;","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" while ((currLine \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" // Extract the information to populate the array list","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" String[] currData \u003d currLine.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":" String taskType \u003d currData[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":" boolean status \u003d Integer.parseInt(currData[1]) \u003d\u003d 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"JasonLCY-Temp"},"content":" String desc \u003d currData[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"JasonLCY-Temp"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"JasonLCY-Temp"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(new Todo(desc, status));","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"JasonLCY-Temp"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"JasonLCY-Temp"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"JasonLCY-Temp"},"content":" LocalDate deadline \u003d LocalDate.parse(currData[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(new Deadline(desc, deadline, status));","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"JasonLCY-Temp"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"JasonLCY-Temp"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"JasonLCY-Temp"},"content":" String startTime \u003d currData[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"JasonLCY-Temp"},"content":" String endTime \u003d currData[4];","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(new Event(desc, startTime, endTime, status));","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"JasonLCY-Temp"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"JasonLCY-Temp"},"content":" br.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"JasonLCY-Temp"},"content":" return taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":114}},{"path":"src/main/java/jeeves/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final DateTimeFormatter dtf \u003d DateTimeFormatter.ofPattern(\"dd LLL yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" public Deadline(String desc, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc);","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" public Deadline(String desc, LocalDate by, boolean status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc, status);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Task deadline","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Deadline of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" public LocalDate getDeadline() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" return by;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(this.id + \". [D]\" + super.toString() + \" (by: \" + by.format(dtf) + \")\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":35}},{"path":"src/main/java/jeeves/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" protected String from;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" protected String to;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" public Event(String desc, String from, String to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc);","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" public Event(String desc, String from, String to, boolean status) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc, status);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Event start time","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Starting time of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" public String getStartTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" return from;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Event end time","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Ending time of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" public String getEndTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" return to;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(this.id + \". [E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\");","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":42}},{"path":"src/main/java/jeeves/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Contains logic related to the Task object.","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" /** Tracks the number of task objects to guarantee the assigned ID will be unique */","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" private static int taskCount \u003d 0;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /** Unique identification number for the task */","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" protected final int id;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" /** The description of the task */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" protected final String desc;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for the Task object.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" * Automatically assigns the instance\u0027s ID based on the global task count.","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param desc Description of the task","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" public Task(String desc) {","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" // Increments the taskCount and uses the value as the unique ID for the current task","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" Task.taskCount +\u003d 1;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" id \u003d Task.taskCount;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" public Task(String desc, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" // Increments the taskCount and uses the value as the unique ID for the current task","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" Task.taskCount +\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" id \u003d Task.taskCount;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the global Task count.","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Number of Tasks initialized","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":" public static int getTaskCount() {","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" return taskCount;","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Task description.","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Description of the task","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":" public String getDesc() {","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" return desc;","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Task status.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Status of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":" return isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" * Setter method for the Task status","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param isDone Status of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" public void setStatus(boolean isDone) {","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" * Obtain a string representation of a Task object","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return String representation of Task","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if a task has its status marked as complete","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" // and displays the appropriate visual","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" if (isDone) {","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(\"[X] \" + this.getDesc());","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(\"[ ] \" + this.getDesc());","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"JasonLCY-Temp":91}},{"path":"src/main/java/jeeves/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" * The arraylist used to track tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" * Due to how the taskCount variable is used as the id and","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * array access position, index 0 will always be unused.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * taskList is effectively 1-indexed","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" public void addTaskAtIndex(int index, Task t) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(index, t);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" public void setTask(int index, Task t) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.set(index,t);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" return taskList.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" public void printTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(taskList.get(index).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" public void markTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.get(index).setStatus(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" public void unmarkTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.get(index).setStatus(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" public String getTaskListDataAsString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" // Starts by creating the text to write to the output file","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" for (Task currTask : taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the task is already deleted from the list, (represented as null object)","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" // don\u0027t write it to the file","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":" // Determines what type of Task is being handled currently for printing purposes","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask instanceof Todo) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"T|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currTask instanceof Deadline) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"D|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"E|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" // Writes the status of the task","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask.isDone()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"1|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"0|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" // Writes the description and other tracked data.","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask instanceof Todo) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(currTask.getDesc())","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currTask instanceof Deadline) {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(currTask.getDesc())","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"|\")","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(((Deadline) currTask).getDeadline())","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(currTask.getDesc())","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"|\")","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(((Event) currTask).getStartTime())","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"|\")","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(((Event) currTask).getEndTime())","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" return sb.toString(); ","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"JasonLCY-Temp"},"content":" public void searchFor(String searchTerm) {","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"JasonLCY-Temp"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"JasonLCY-Temp"},"content":" boolean hasMatch \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"JasonLCY-Temp"},"content":" for (Task currTask: taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"JasonLCY-Temp"},"content":" String currDesc \u003d currTask.getDesc();","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currDesc.contains(searchTerm)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"JasonLCY-Temp"},"content":" if (!hasMatch) {","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"Here are the matching tasks Master: \\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"JasonLCY-Temp"},"content":" hasMatch \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(currTask.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"JasonLCY-Temp"},"content":" if (!hasMatch) {","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"I could not find anything matching \u0027\").append(searchTerm).append(\"\u0027 Master\");","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(sb.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":113}},{"path":"src/main/java/jeeves/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public Todo(String desc) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" public Todo(String desc, boolean status) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc, status);","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(this.id + \". [T]\" + super.toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":17}},{"path":"src/main/java/jeeves/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Ui is responsible for all visual interactions with the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" * Constructor for a Ui object.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Currently, requires no arguments to initialize.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" * Prints the greeting message for the user to view.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" public void printGreeting() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Greetings, Master. Jeeves at your service\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"How may I serve you today?\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" * Prints the farewell message for the user to view.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" public void printFarewell() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"I bid you farewell, Master\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" * Prints the invalid command message for the user to view.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" public void printInvalidCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Apologies Master, I am unable to understand that command.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"I will improve myself to better serve you in the future.\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":38}},{"path":"src/test/java/jeeves/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" public void isNotNumber_numberInput_returnsFalse() {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" assertFalse(Parser.isNotNumber(\"1234\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" assertFalse(Parser.isNotNumber(\"0\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" assertFalse(Parser.isNotNumber(\"192309213098213\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" public void isNotNumber_notNumberInput_returnsTrue() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" assertTrue(Parser.isNotNumber(\"Hi\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" assertTrue(Parser.isNotNumber(\"12319z\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" assertTrue(Parser.isNotNumber(\"1902.\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" assertTrue(Parser.isNotNumber(\"12301 \"));","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" assertTrue(Parser.isNotNumber(\"@*(@#*\u0026\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" assertTrue(Parser.isNotNumber(\"1@\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":33}},{"path":"src/test/java/jeeves/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" public void getTaskListDataAsString_emptyList_returnEmptyString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" TaskList testTaskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" assertEquals(\"\", testTaskList.getTaskListDataAsString());","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" public void getTaskListDataAsString_allNullList_returnEmptyString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" ArrayList\u003cTask\u003e testArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" testArrayList.add(null);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" testArrayList.add(null);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" testArrayList.add(null);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" TaskList testTaskList \u003d new TaskList(testArrayList);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" assertEquals(\"\", testTaskList.getTaskListDataAsString());","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" public void getTaskListDataAsString_allTaskData_returnCorrectString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" ArrayList\u003cTask\u003e testArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" testArrayList.add(new Todo(\"some todo desc\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" testArrayList.add(new Deadline(\"some deadline desc\", LocalDate.parse(\"2023-09-03\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" testArrayList.add(new Event(\"some event desc\", \"some from date\", \"some to date\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" TaskList testTaskList \u003d new TaskList(testArrayList);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(testTaskList.getTaskListDataAsString());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" assertEquals(\"T|0|some todo desc\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"D|0|some deadline desc|2023-09-03\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"E|0|some event desc|some from date|some to date\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" , testTaskList.getTaskListDataAsString());","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":40}},{"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":"JasonLCY-Temp"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\jeeves\\storage\\*.java","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\jeeves\\task\\*.java","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\jeeves\\exception\\*.java","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\jeeves\\*.java","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":"java -classpath ..\\bin jeeves.Jeeves \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":"REM pause so it\u0027s actually possible to read the results","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":"pause","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8,"-":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":"-"},"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":"JasonLCY-Temp"},"content":" mainClass.set(\"jeeves.Jeeves\")","lastModifiedDate":"2023-09-03"},{"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":"JasonLCY-Temp"},"content":" archiveBaseName \u003d \"jeeves\"","lastModifiedDate":"2023-09-03"},{"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":{"JasonLCY-Temp":2,"-":40}},{"path":"src/main/java/jeeves/Jeeves.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.DeletedIdException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" * Contains the main method and primary logic for Jeeves.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Jeeves {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final String RELATIVE_PATH_DATA_DIRECTORY \u003d \"data\";","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final String RELATIVE_PATH_DATA_FILE \u003d \"data/JeevesData.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for a Jeeves object.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" * Currently, requires no arguments to initialize.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" * Creates a new Storage, TaskList, Parser and Ui object for usage during runtime.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" public Jeeves() {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" storage \u003d new Storage(RELATIVE_PATH_DATA_DIRECTORY, RELATIVE_PATH_DATA_FILE);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks \u003d new TaskList(storage.readTasklistFromFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" * Main process.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param args Optional command line arguments.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" new Jeeves().run();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" * Contains the primary logic for Jeeves.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":" * Constantly loops and waits for a new line of user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":" * Processes the input depending on what was entered.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" public void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" ui.printGreeting();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":" // Waits for user input and process it accordingly","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" while (true) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":" // Reads the user input and parses the relevant tokens for use","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" ArrayList\u003cString\u003e tokens \u003d parser.parseUserInput(sc.nextLine());","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" String currentCommand \u003d tokens.get(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" // Performs a different action depending on the input received","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" // Unless a specific pre-defined command is received, the program will","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":" // print a default error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currentCommand.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" // Displays a different message if no task is being tracked","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" if (Task.getTaskCount() \u003d\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"I am not currently tracking anything for you Master\");","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"This is what I am tracking for you Master\");","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" // Displays the current list of tasks tracked and their status","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" for (int i \u003d 1; i \u003c\u003d Task.getTaskCount(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" if (tasks.getTask(i) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.printTask(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" // Prints an empty line for output clarity","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.print(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" // Get the id and try to process the marking","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" int id \u003d Integer.parseInt(tokens.get(1));","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":" if (tasks.getTask(id) \u003d\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the id to be marked belongs to a deleted task (null), throws the DeletedIdException","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new DeletedIdException();","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.markTask(id);","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Understood, I have marked the following task as done:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.printTask(id);","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (DeletedIdException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"JasonLCY-Temp"},"content":" int id \u003d Integer.parseInt(tokens.get(1));","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"JasonLCY-Temp"},"content":" if (tasks.getTask(id) \u003d\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the id to be marked belongs to a deleted task (null), throws the DeletedIdException","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new DeletedIdException();","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.unmarkTask(id);","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Understood, I have marked the following task as not done:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\" \" + tasks.getTask(id).toString() + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (DeletedIdException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"JasonLCY-Temp"},"content":" int id \u003d Integer.parseInt(tokens.get(1));","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"JasonLCY-Temp"},"content":" if (tasks.getTask(id) \u003d\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the id to be marked belongs to a deleted task (null), throws the DeletedIdException","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new DeletedIdException();","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Understood, I have deleted the following task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\" \" + tasks.getTask(id).toString() + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.setTask(id, null);","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (DeletedIdException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the To.do normally to the task list","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"JasonLCY-Temp"},"content":" Todo newTodo \u003d new Todo(tokens.get(1));","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.addTaskAtIndex(Task.getTaskCount(), newTodo);","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Task added:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"JasonLCY-Temp"},"content":" \" \" + newTodo + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the Date input is in the accepted format","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"JasonLCY-Temp"},"content":" LocalDate deadline \u003d LocalDate.parse(tokens.get(2));","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the \u0027Deadline\u0027 Task to the task list","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"JasonLCY-Temp"},"content":" Deadline newDeadline \u003d new Deadline(tokens.get(1), deadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.addTaskAtIndex(Task.getTaskCount(), newDeadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Deadline added:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"JasonLCY-Temp"},"content":" \" \" + newDeadline + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the \u0027Event\u0027 Task to the task list","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"JasonLCY-Temp"},"content":" Event newEvent \u003d new Event(tokens.get(1), tokens.get(2), tokens.get(3));","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.addTaskAtIndex(Task.getTaskCount(), newEvent);","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Event added:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"JasonLCY-Temp"},"content":" \" \" + newEvent + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.searchFor(tokens.get(1));","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"JasonLCY-Temp"},"content":" // Before the actual termination of the program, writes the current task list to the external file.","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"JasonLCY-Temp"},"content":" storage.writeTasklistToFile(tasks.getTaskListDataAsString());","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"JasonLCY-Temp"},"content":" // Displays the farewell message and terminates the application","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"JasonLCY-Temp"},"content":" ui.printFarewell();","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"JasonLCY-Temp"},"content":" System.exit(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"JasonLCY-Temp"},"content":" // By default, informs the user that the command is not recognized.","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"JasonLCY-Temp"},"content":" ui.printInvalidCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":171}},{"path":"src/main/java/jeeves/exception/DeletedIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when a \u0027null\u0027 is met instead of a Task object.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * nulls are used to represent a deleted task, so essentially this exception is thrown","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" * when an operation is being attempted on a task that has been deleted from the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"public class DeletedIdException extends Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for DeletedIdException.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" public DeletedIdException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" super(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided belongs to a deleted task)\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"JasonLCY-Temp":18}},{"path":"src/main/java/jeeves/exception/MissingByException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when there is no data provided after a \u0027/by \u0027 ","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * Encountered when adding a new deadline task and no \u0027by date\u0027 is provided by the user","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingByException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for MissingByException.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingByException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" super(\"I cannot do that as the deadline has not been provided.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /by \u003cYYYY-MM-DD\u003e\u0027 after the task description\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":17}},{"path":"src/main/java/jeeves/exception/MissingDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when there is no description provided for a task object","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * Encountered when adding any new task object and no description is provided","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingDescriptionException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for MissingDescriptionException.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" * ","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param errorMsg The custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingDescriptionException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":18}},{"path":"src/main/java/jeeves/exception/MissingFromException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when there is no data provided after a \u0027/from \u0027 ","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * Encountered when adding a new event task and no \u0027from date\u0027 is provided by the user","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingFromException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for MissingFromException.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingFromException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" super(\"I cannot do that as the start time has not been provided.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /from \u003cTime/Date\u003e\u0027 after the task description\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":17}},{"path":"src/main/java/jeeves/exception/MissingIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when there is no valid id provided when using a command that requires an id input. ","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * Encountered when attempting to mark, unmark or delete a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingIdException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for MissingIdException.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingIdException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" super(\"I cannot do that as you have not provided me with a Task ID\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":16}},{"path":"src/main/java/jeeves/exception/MissingToException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when there is no data provided after a \u0027/to \u0027 ","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * Encountered when adding a new event task and no \u0027to date\u0027 is provided by the user","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingToException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for MissingToException.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingToException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" super(\"I cannot do that as the end time has not been provided.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /to \u003cTime/Date\u003e\u0027 after the task end date (after /from block)\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":17}},{"path":"src/main/java/jeeves/exception/NotIntegerIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when the id provided is not a valid integer value. ","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * Encountered when attempting to mark, unmark or delete a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"public class NotIntegerIdException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for NotIntegerIdException.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" public NotIntegerIdException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" super(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided is not an integer)\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":17}},{"path":"src/main/java/jeeves/exception/OutOfBoundIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Custom exception that is thrown when the id provided does not belong to a task on the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" * Encountered when attempting to mark, unmark or delete a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"public class OutOfBoundIdException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for OutOfBoundIdException.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * Calls the super constructor with the custom error message","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" public OutOfBoundIdException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" super(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided does not exist)\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":17}},{"path":"src/main/java/jeeves/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingByException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingDescriptionException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingFromException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingIdException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingToException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.NotIntegerIdException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.OutOfBoundIdException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" * Parser processes user input and returns an arraylist of string tokens for other classes to use.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FIND_COMMAND_TODO_OFFSET \u003d 5;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FIND_COMMAND_DEADLINE_OFFSET \u003d 9;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FIND_COMMAND_EVENT_OFFSET \u003d 6;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FIND_COMMAND_MARK_OFFSET \u003d 5;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FIND_COMMAND_UNMARK_OFFSET \u003d 7;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FIND_COMMAND_DELETE_OFFSET \u003d 7;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FIND_COMMAND_FIND_OFFSET \u003d 5;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FIND_FIELD_TO_OFFSET \u003d 4;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FIND_FIELD_FROM_OFFSET \u003d 6;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FIND_FIELD_BY_OFFSET \u003d 4;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" * Constructor for a Parser object.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" * Currently, requires no arguments to initialize.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" public Parser() {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" * Takes the user\u0027s input line and returns an array list of relevant string tokens for usage.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" * Used by the live implementation of Jeeves.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" * ","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param input A line of user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return String ArrayList containing relevant useful string tokens","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":" public ArrayList\u003cString\u003e parseUserInput(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" ArrayList\u003cString\u003e args \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" // returns args \u003ccommand\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"mark \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"mark\");","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" // Gets the task ID that the user wish to mark","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" String idString \u003d input.substring(FIND_COMMAND_MARK_OFFSET);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the task ID is invalid, program will throw an error if the id is invalid","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":" checkIfValidId(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the valid id to the args array list and returns args \u003ccommand,id\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"unmark \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"unmark\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" // Gets the task ID that the user wish to unmark","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" String idString \u003d input.substring(FIND_COMMAND_UNMARK_OFFSET);","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the task ID is invalid, program will throw an error if the id is invalid","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" checkIfValidId(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the valid id to the args array list and returns args \u003ccommand,id\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"delete \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"delete\");","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" // Gets the task ID that the user wish to delete","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":" String idString \u003d input.substring(FIND_COMMAND_DELETE_OFFSET);","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the task ID is invalid, program will throw an error if the id is invalid","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" checkIfValidId(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the valid id to the args array list and returns args \u003ccommand, id\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"todo \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"todo\");","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the user provided a description","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":" // If so, returns args \u003ccommand, desc\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" // Else throws the custom MissingDescriptionException error","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" String desc \u003d input.substring(FIND_COMMAND_TODO_OFFSET);","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" checkIfDescMissing(desc);","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(desc);","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"deadline \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"deadline\");","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the user has entered the command properly","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" // and extracts the relevant information to parse","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" // then returns args \u003ccommand, desc, dyDate\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" int byDateIndex \u003d getByDateIndex(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" String desc \u003d input.substring(FIND_COMMAND_DEADLINE_OFFSET, byDateIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":" String byDate \u003d input.substring(byDateIndex + FIND_FIELD_BY_OFFSET);","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(desc);","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(byDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingDescriptionException | MissingByException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"event \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"event\");","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the user has entered the command properly","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"JasonLCY-Temp"},"content":" // and extracts the relevant information to parse","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"JasonLCY-Temp"},"content":" // then returns args \u003ccommand, desc, fromDate, toDate\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"JasonLCY-Temp"},"content":" int fromDateIndex \u003d getFromDateIndex(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"JasonLCY-Temp"},"content":" int toDateIndex \u003d getToDateIndex(input, fromDateIndex);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"JasonLCY-Temp"},"content":" String desc \u003d input.substring(FIND_COMMAND_EVENT_OFFSET, fromDateIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"JasonLCY-Temp"},"content":" String fromDate \u003d input.substring(fromDateIndex + FIND_FIELD_FROM_OFFSET, toDateIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"JasonLCY-Temp"},"content":" String toDate \u003d input.substring(toDateIndex + FIND_FIELD_TO_OFFSET);","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(desc);","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(fromDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(toDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingDescriptionException | MissingFromException | MissingToException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"find \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"JasonLCY-Temp"},"content":" // Gets the search term the user wishes to find","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"JasonLCY-Temp"},"content":" // and returns args \u003ccommand, findTerm\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"find\");","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"JasonLCY-Temp"},"content":" String findTerm \u003d input.substring(FIND_COMMAND_FIND_OFFSET);","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(findTerm);","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"JasonLCY-Temp"},"content":" return args;","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"JasonLCY-Temp"},"content":" * Checks if a string is only made up of integer numbers.","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"JasonLCY-Temp"},"content":" * Uses regex to determine if a string contains only integers","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param input The string to be checked","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Whether the string is fully comprised of integers","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"JasonLCY-Temp"},"content":" static boolean isNotNumber(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"JasonLCY-Temp"},"content":" return !input.matches(\"[0-9]+\");","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"JasonLCY-Temp"},"content":" * Checks if the string provided can be parsed into a valid id Integer.","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"JasonLCY-Temp"},"content":" * Throws a custom exception with an appropriate error message upon encountering an error.","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"JasonLCY-Temp"},"content":" * Currently, checks if the idString is: Present, is a Number, is within the usable range.","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param idString The string to be checked.","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"JasonLCY-Temp"},"content":" static void checkIfValidId(String idString) {","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"JasonLCY-Temp"},"content":" if (idString.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"JasonLCY-Temp"},"content":" // id field is empty","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingIdException();","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (isNotNumber(idString)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"JasonLCY-Temp"},"content":" // id field is not an integer","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new NotIntegerIdException();","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (Integer.parseInt(idString) \u003e Task.getTaskCount()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"JasonLCY-Temp"},"content":" // id does not exist","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new OutOfBoundIdException();","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"JasonLCY-Temp"},"content":" } ","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingIdException | NotIntegerIdException | OutOfBoundIdException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"JasonLCY-Temp"},"content":" * Checks if the string provided is not empty","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"JasonLCY-Temp"},"content":" * Throws a custom exception with an appropriate error message if it is.","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"JasonLCY-Temp"},"content":" * Else does nothing.","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param description The string to be checked.","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"JasonLCY-Temp"},"content":" static void checkIfDescMissing(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"JasonLCY-Temp"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingDescriptionException(\"The description of a todo cannot be empty\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingDescriptionException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"JasonLCY-Temp"},"content":" static int getByDateIndex(String command) throws MissingByException, MissingDescriptionException {","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"JasonLCY-Temp"},"content":" int byDateIndex \u003d command.indexOf(\"/by \");","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"JasonLCY-Temp"},"content":" if (byDateIndex \u003d\u003d -1 || command.length() \u003d\u003d byDateIndex + FIND_FIELD_BY_OFFSET) {","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the \"/by \" block is missing, throws the MissingByException","lastModifiedDate":"2023-09-03"},{"lineNumber":181,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingByException();","lastModifiedDate":"2023-09-03"},{"lineNumber":182,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":183,"author":{"gitId":"JasonLCY-Temp"},"content":" if ((byDateIndex - 1) \u003c\u003d FIND_COMMAND_DEADLINE_OFFSET) {","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingDescriptionException(\"The description of a deadline cannot be empty\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":185,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":186,"author":{"gitId":"JasonLCY-Temp"},"content":" return byDateIndex;","lastModifiedDate":"2023-09-03"},{"lineNumber":187,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":188,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"JasonLCY-Temp"},"content":" static int getFromDateIndex(String input) throws MissingFromException, MissingToException, MissingDescriptionException {","lastModifiedDate":"2023-09-03"},{"lineNumber":190,"author":{"gitId":"JasonLCY-Temp"},"content":" int fromDateIndex \u003d input.indexOf(\"/from \");","lastModifiedDate":"2023-09-03"},{"lineNumber":191,"author":{"gitId":"JasonLCY-Temp"},"content":" if (fromDateIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":192,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the \"/from \" block is missing, throws the MissingFromException","lastModifiedDate":"2023-09-03"},{"lineNumber":193,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingFromException();","lastModifiedDate":"2023-09-03"},{"lineNumber":194,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":195,"author":{"gitId":"JasonLCY-Temp"},"content":" return fromDateIndex;","lastModifiedDate":"2023-09-03"},{"lineNumber":196,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":197,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":198,"author":{"gitId":"JasonLCY-Temp"},"content":" static int getToDateIndex(String input, int fromDateIndex) throws MissingToException,","lastModifiedDate":"2023-09-03"},{"lineNumber":199,"author":{"gitId":"JasonLCY-Temp"},"content":" MissingDescriptionException, MissingFromException {","lastModifiedDate":"2023-09-03"},{"lineNumber":200,"author":{"gitId":"JasonLCY-Temp"},"content":" int toDateIndex \u003d input.indexOf(\"/to \");","lastModifiedDate":"2023-09-03"},{"lineNumber":201,"author":{"gitId":"JasonLCY-Temp"},"content":" if (toDateIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":202,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the \"/to \" block is missing, throws the MissingToException","lastModifiedDate":"2023-09-03"},{"lineNumber":203,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingToException();","lastModifiedDate":"2023-09-03"},{"lineNumber":204,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":205,"author":{"gitId":"JasonLCY-Temp"},"content":" if (input.length() \u003d\u003d (toDateIndex + FIND_FIELD_TO_OFFSET)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":206,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the /to block is present but no data has been given to the field, throw ","lastModifiedDate":"2023-09-03"},{"lineNumber":207,"author":{"gitId":"JasonLCY-Temp"},"content":" // the MissingToException","lastModifiedDate":"2023-09-03"},{"lineNumber":208,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingToException();","lastModifiedDate":"2023-09-03"},{"lineNumber":209,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":210,"author":{"gitId":"JasonLCY-Temp"},"content":" if ((fromDateIndex - 1) \u003c\u003d FIND_COMMAND_DEADLINE_OFFSET) {","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"JasonLCY-Temp"},"content":" //If the description is missing, throw the MissingDescription Exception","lastModifiedDate":"2023-09-03"},{"lineNumber":212,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingDescriptionException(\"The description of a event cannot be empty\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":213,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":214,"author":{"gitId":"JasonLCY-Temp"},"content":" if ((toDateIndex - 1) \u003c\u003d (fromDateIndex + FIND_FIELD_FROM_OFFSET)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":215,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the /from block is present but no data has been given to the field, throw ","lastModifiedDate":"2023-09-03"},{"lineNumber":216,"author":{"gitId":"JasonLCY-Temp"},"content":" // the MissingFromException","lastModifiedDate":"2023-09-03"},{"lineNumber":217,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingFromException();","lastModifiedDate":"2023-09-03"},{"lineNumber":218,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":219,"author":{"gitId":"JasonLCY-Temp"},"content":" return toDateIndex;","lastModifiedDate":"2023-09-03"},{"lineNumber":220,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":221,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":221}},{"path":"src/main/java/jeeves/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" * Storage is responsible for all read/write/other interactions with the .txt datafile containing Jeeves\u0027s data.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" private final Path dataDirPath;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" private final Path dataFilePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" * Constructor for a Storage object.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" * Takes 2 different Strings and checks if the relative directory and datafile exists.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" * Creates them if they do not exist.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" * ","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param dirPathString Relative path for the directory in String format","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param filePathString Relative path for the data file in String format","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" public Storage(String dirPathString, String filePathString) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the directory exists","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" dataDirPath \u003d Paths.get(dirPathString);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the directory does not exist, create it for the user","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" if (Files.notExists(dataDirPath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" Files.createDirectories(dataDirPath);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" // Do nothing if an error is encountered since the directory existence is already checked","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":" // Theoretically impossible to enter this block","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":" dataFilePath \u003d Paths.get(filePathString);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the file does not exist, create it for the user","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" if (Files.notExists(dataFilePath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" Files.createFile(dataFilePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":" // Do nothing if an error is encountered since the file existence is already checked","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" // Theoretically impossible to enter this block","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" * Writes the provided data to the datafile using BufferedWriter.","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param data The data to be written to the file in String format","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":" public void writeTasklistToFile(String data) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" // Writes the text to the output file","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" BufferedWriter bw \u003d Files.newBufferedWriter(dataFilePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" bw.write(data);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" bw.flush();","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" bw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch(IOException e){","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" * Reads the data from the datafile using BufferedReader.","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" * Creates a new corresponding Task object for each line of valid data.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Task ArrayList containing the tasks re-created from the datafile.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" public ArrayList\u003cTask\u003e readTasklistFromFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" // Initialization step for task list, adds an empty object so the arraylist is 1-indexed","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(null);","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" BufferedReader br \u003d Files.newBufferedReader(dataFilePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" String currLine;","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" while ((currLine \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" // Extract the information to populate the array list","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" String[] currData \u003d currLine.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":" String taskType \u003d currData[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":" boolean status \u003d Integer.parseInt(currData[1]) \u003d\u003d 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"JasonLCY-Temp"},"content":" String desc \u003d currData[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"JasonLCY-Temp"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"JasonLCY-Temp"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(new Todo(desc, status));","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"JasonLCY-Temp"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"JasonLCY-Temp"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"JasonLCY-Temp"},"content":" LocalDate deadline \u003d LocalDate.parse(currData[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(new Deadline(desc, deadline, status));","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"JasonLCY-Temp"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"JasonLCY-Temp"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"JasonLCY-Temp"},"content":" String startTime \u003d currData[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"JasonLCY-Temp"},"content":" String endTime \u003d currData[4];","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(new Event(desc, startTime, endTime, status));","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"JasonLCY-Temp"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"JasonLCY-Temp"},"content":" br.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"JasonLCY-Temp"},"content":" return taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":114}},{"path":"src/main/java/jeeves/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final DateTimeFormatter dtf \u003d DateTimeFormatter.ofPattern(\"dd LLL yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" public Deadline(String desc, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc);","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" public Deadline(String desc, LocalDate by, boolean status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc, status);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Task deadline","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Deadline of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" public LocalDate getDeadline() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" return by;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(this.id + \". [D]\" + super.toString() + \" (by: \" + by.format(dtf) + \")\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":35}},{"path":"src/main/java/jeeves/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" protected String from;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" protected String to;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" public Event(String desc, String from, String to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc);","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" public Event(String desc, String from, String to, boolean status) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc, status);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Event start time","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Starting time of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" public String getStartTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" return from;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Event end time","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Ending time of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" public String getEndTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" return to;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(this.id + \". [E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\");","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":42}},{"path":"src/main/java/jeeves/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Contains logic related to the Task object.","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" /** Tracks the number of task objects to guarantee the assigned ID will be unique */","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" private static int taskCount \u003d 0;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /** Unique identification number for the task */","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" protected final int id;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" /** The description of the task */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" protected final String desc;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for the Task object.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" * Automatically assigns the instance\u0027s ID based on the global task count.","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param desc Description of the task","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" public Task(String desc) {","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" // Increments the taskCount and uses the value as the unique ID for the current task","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" Task.taskCount +\u003d 1;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" id \u003d Task.taskCount;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" public Task(String desc, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" // Increments the taskCount and uses the value as the unique ID for the current task","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" Task.taskCount +\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" id \u003d Task.taskCount;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the global Task count.","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Number of Tasks initialized","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":" public static int getTaskCount() {","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" return taskCount;","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Task description.","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Description of the task","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":" public String getDesc() {","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" return desc;","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Task status.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Status of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":" return isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" * Setter method for the Task status","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param isDone Status of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" public void setStatus(boolean isDone) {","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" * Obtain a string representation of a Task object","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return String representation of Task","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if a task has its status marked as complete","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" // and displays the appropriate visual","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" if (isDone) {","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(\"[X] \" + this.getDesc());","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(\"[ ] \" + this.getDesc());","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"JasonLCY-Temp":91}},{"path":"src/main/java/jeeves/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" * The arraylist used to track tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" * Due to how the taskCount variable is used as the id and","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * array access position, index 0 will always be unused.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * taskList is effectively 1-indexed","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" public void addTaskAtIndex(int index, Task t) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(index, t);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" public void setTask(int index, Task t) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.set(index,t);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" return taskList.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" public void printTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(taskList.get(index).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" public void markTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.get(index).setStatus(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" public void unmarkTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.get(index).setStatus(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" public String getTaskListDataAsString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" // Starts by creating the text to write to the output file","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" for (Task currTask : taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the task is already deleted from the list, (represented as null object)","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" // don\u0027t write it to the file","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":" // Determines what type of Task is being handled currently for printing purposes","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask instanceof Todo) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"T|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currTask instanceof Deadline) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"D|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"E|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" // Writes the status of the task","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask.isDone()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"1|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"0|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" // Writes the description and other tracked data.","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask instanceof Todo) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(currTask.getDesc())","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currTask instanceof Deadline) {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(currTask.getDesc())","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"|\")","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(((Deadline) currTask).getDeadline())","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(currTask.getDesc())","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"|\")","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(((Event) currTask).getStartTime())","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"|\")","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(((Event) currTask).getEndTime())","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" return sb.toString(); ","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"JasonLCY-Temp"},"content":" public void searchFor(String searchTerm) {","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"JasonLCY-Temp"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"JasonLCY-Temp"},"content":" boolean hasMatch \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"JasonLCY-Temp"},"content":" for (Task currTask: taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"JasonLCY-Temp"},"content":" String currDesc \u003d currTask.getDesc();","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currDesc.contains(searchTerm)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"JasonLCY-Temp"},"content":" if (!hasMatch) {","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"Here are the matching tasks Master: \\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"JasonLCY-Temp"},"content":" hasMatch \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(currTask.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"JasonLCY-Temp"},"content":" if (!hasMatch) {","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"I could not find anything matching \u0027\").append(searchTerm).append(\"\u0027 Master\");","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(sb.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":113}},{"path":"src/main/java/jeeves/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public Todo(String desc) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" public Todo(String desc, boolean status) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc, status);","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(this.id + \". [T]\" + super.toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":17}},{"path":"src/main/java/jeeves/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Ui is responsible for all visual interactions with the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" * Constructor for a Ui object.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * Currently, requires no arguments to initialize.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" * Prints the greeting message for the user to view.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" public void printGreeting() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Greetings, Master. Jeeves at your service\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"How may I serve you today?\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" * Prints the farewell message for the user to view.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" public void printFarewell() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"I bid you farewell, Master\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" * Prints the invalid command message for the user to view.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" public void printInvalidCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Apologies Master, I am unable to understand that command.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"I will improve myself to better serve you in the future.\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":38}},{"path":"src/test/java/jeeves/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" public void isNotNumber_numberInput_returnsFalse() {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" assertFalse(Parser.isNotNumber(\"1234\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" assertFalse(Parser.isNotNumber(\"0\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" assertFalse(Parser.isNotNumber(\"192309213098213\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" public void isNotNumber_notNumberInput_returnsTrue() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" assertTrue(Parser.isNotNumber(\"Hi\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" assertTrue(Parser.isNotNumber(\"12319z\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" assertTrue(Parser.isNotNumber(\"1902.\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" assertTrue(Parser.isNotNumber(\"12301 \"));","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" assertTrue(Parser.isNotNumber(\"@*(@#*\u0026\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" assertTrue(Parser.isNotNumber(\"1@\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":33}},{"path":"src/test/java/jeeves/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" public void getTaskListDataAsString_emptyList_returnEmptyString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" TaskList testTaskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" assertEquals(\"\", testTaskList.getTaskListDataAsString());","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" public void getTaskListDataAsString_allNullList_returnEmptyString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" ArrayList\u003cTask\u003e testArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" testArrayList.add(null);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" testArrayList.add(null);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" testArrayList.add(null);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" TaskList testTaskList \u003d new TaskList(testArrayList);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" assertEquals(\"\", testTaskList.getTaskListDataAsString());","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" public void getTaskListDataAsString_allTaskData_returnCorrectString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" ArrayList\u003cTask\u003e testArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" testArrayList.add(new Todo(\"some todo desc\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" testArrayList.add(new Deadline(\"some deadline desc\", LocalDate.parse(\"2023-09-03\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" testArrayList.add(new Event(\"some event desc\", \"some from date\", \"some to date\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" TaskList testTaskList \u003d new TaskList(testArrayList);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(testTaskList.getTaskListDataAsString());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" assertEquals(\"T|0|some todo desc\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"D|0|some deadline desc|2023-09-03\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"E|0|some event desc|some from date|some to date\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" , testTaskList.getTaskListDataAsString());","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":40}},{"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":"JasonLCY-Temp"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\jeeves\\storage\\*.java","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\jeeves\\task\\*.java","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\jeeves\\exception\\*.java","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\jeeves\\*.java","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":"java -classpath ..\\bin jeeves.Jeeves \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":"REM pause so it\u0027s actually possible to read the results","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":"pause","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8,"-":19}}] diff --git a/JasonLCY-Temp_ip_master/commits.json b/JasonLCY-Temp_ip_master/commits.json index 12707bff..c605e463 100644 --- a/JasonLCY-Temp_ip_master/commits.json +++ b/JasonLCY-Temp_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"JasonLCY-Temp":[{"date":"2023-08-21","commitResults":[{"hash":"1a1e32733ab6026b28671df1fafbc0480aaa600a","isMergeCommit":false,"messageTitle":"Remove Duke.java and Add Jeeves.java","messageBody":"Change the name and personality of the chatbot.\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":10}}},{"hash":"9b0ab0a314cab2af37375cc60c4c71ddbe59c9fc","isMergeCommit":false,"messageTitle":"Jeeves class, main method: Update to be responsive to user input","messageBody":"The program only starts and ends instantly.\n\nThere is a need for it to be able to recognize user input and respond accordingly.\n\nLet\u0027s add the ability to read and recognize user input.\nSpecifically, Jeeves can recognize the \u0027bye\u0027 command and terminate appropriately.\nAll other commands will simply be echoed back.\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":2}}},{"hash":"2a981da0366d1899705896931f11e3e49dab1243","isMergeCommit":false,"messageTitle":"Add Task.java","messageBody":"No program logic exists for managing tasks.\n\nA Task Object will allow for the management of tasks cleanly.\n\nLet\u0027s add the Task class with a default constructor and getter/setters.\n","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}}]},{"date":"2023-08-22","commitResults":[{"hash":"6fb6025ae9cc7d4afb38714919aa2706cba918a7","isMergeCommit":false,"messageTitle":"Update Task class: Getter methods for task count and task id","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"c2d559ffb5a2689714ef00c50daf77196772fceb","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add task and list task feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":5}}}]},{"date":"2023-08-23","commitResults":[{"hash":"f3a908c49641c3daf2c182d86c3da579f723e91b","isMergeCommit":false,"messageTitle":"Update Task class: Add status tracking attribute and methods","messageBody":"Task object attribute list needs to expanded in order to extend the\nscope of Jeeves\u0027s functionality to track task status.\n","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"e2479d54c165bce16803ef3b053842a11c1ef620","isMergeCommit":false,"messageTitle":"Update Task class: Remove unused setter method for task description","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":10}}},{"hash":"fcf9b5e6786ec4fba445ea84d4c91da4c4dd2f30","isMergeCommit":false,"messageTitle":"Update Jeeves class: Change taskList scope","messageBody":"To avoid unnecessary code duplication when implementing task marking\nand unmarking, the task printing function has been moved to a separate\nmethod.\n\nThe scope of taskList has also been changed to be a class-level member\nin order for the program to properly function.\n","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":8}}},{"hash":"f84e76dbf837bdb5f4e90f057272312e3e8e9078","isMergeCommit":false,"messageTitle":"Task class: Replace switch case with if else blocks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":7}}},{"hash":"440c507fc1987ef5e03ee3dd0eb7878c34465c1e","isMergeCommit":false,"messageTitle":"Jeeves class: Add Marking/Unmarking function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"30d761b913028544f133743c1e283963863a1835","isMergeCommit":false,"messageTitle":"Update program to use the toString() String representation of a Task object for displaying output.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":20}}},{"hash":"480e6f0b28f547b85451cd41e94aa1bdfc4359f1","isMergeCommit":false,"messageTitle":"Refactor project: Packaged files, removed unused methods","messageBody":"In preparation of adding subclasses to Task, the current java files have\nbeen packaged for better logical organization.\n\nAlso, unused methods have been removed for better code cleanliness.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":18}}}]},{"date":"2023-08-25","commitResults":[{"hash":"51d901f5e323db894efcd403b80ec78c9bb7a200","isMergeCommit":false,"messageTitle":"Add Todo, Event and Deadline classes skeleton","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"60be09cfd4f6574b9b86303521497fbaf8e41c9a","isMergeCommit":false,"messageTitle":"Update String representation of Task objects","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":10}}},{"hash":"a3d51ea5de7da764f970bc5a895584e1bff35c53","isMergeCommit":false,"messageTitle":"Update Deadline and Event classes to be functional","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":2}}},{"hash":"6bfa3fc395bba16b07c1ba1a22041da68a066968","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add support for Todo, Deadline and Event tracking","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":11}}},{"hash":"0c30f6ec900446e1d6dc30c79dd1e452b4eae196","isMergeCommit":false,"messageTitle":"Update testcase scripts to work with Jeeves","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"8519ca853b431f67e7180a6fc5cf4b5bfabe81eb","isMergeCommit":false,"messageTitle":"Remove runtime.sh","messageBody":"Shell script is unused as local devices are all Windows.\nPlease utilize the batch file for testing.\n","fileTypesAndContributionMap":{"sh":{"insertions":0,"deletions":38}}},{"hash":"c56d5de3c12c7c2045da357093a1e8d442c18e88","isMergeCommit":false,"messageTitle":"Update testing batch file to work with this project","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":6,"deletions":2}}},{"hash":"529d0e924cfa39a17225faadb34b5d425cffe510","isMergeCommit":false,"messageTitle":"Update Jeeves class: Move scanner scope","messageBody":"Scanner was being recreated after every command, this is a waste of\nresources.\n\nScanner is only created once now.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"1b5f19bc9bb6bb17231963d53e0cb8ba38770507","isMergeCommit":false,"messageTitle":"Add test cases and expected output files","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"61ee1834cfd2c5f6b67c63550783ba4f0abc27dd","isMergeCommit":false,"messageTitle":"Update Jeeves class: New message output when 0 tasks recorded","messageBody":"Also updated test cases and expected output files to match the new\nintended behaviour\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":7,"deletions":1}}},{"hash":"e6db0be0ba5075c65d5da33823573cd5ecc6ba74","isMergeCommit":false,"messageTitle":"Jeeves class: Add constants and remove magic numbers","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":9}}},{"hash":"9b26f6a9561ed2fea90bf56458f1e99b6ec54c79","isMergeCommit":false,"messageTitle":"Update Jeeves Class: Add exception handling for \"mark\" command","messageBody":"Also updated test cases and expected outputs with new expected\nbehaviour\n","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":63,"deletions":7},"bat":{"insertions":1,"deletions":0}}},{"hash":"4c379235ba2ed4d7bda8d89c0e903ebff87ef6c4","isMergeCommit":false,"messageTitle":"Update Jeeves Class: Add exception handling for \"unmark\" command","messageBody":"Also updated test cases and expected outputs with new expected\nbehaviour\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":28,"deletions":7}}},{"hash":"c2b6f2d11831e8b9dfcf6b5fdc5dfde73f6422f5","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add exception handling for multiple commands","messageBody":"Specifically\n* todo\n* deadline\n* event\n\nAlso updated test cases and expected output with the expected behaviour\n","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":121,"deletions":30}}}]},{"date":"2023-08-26","commitResults":[{"hash":"eb41263481b71f3e703def0111ab6a187cfaace2","isMergeCommit":false,"messageTitle":"Update Jeeves class: Change taskList data structure to ArrayList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":15}}},{"hash":"918e0a8fb66e1bca14185013f055214e713393d1","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add Delete function","messageBody":"* Tasks can now be permanently removed from the task list.\n* Exception handling added for deleted tasks to \"mark\" and \"unmark\"\ncommands\n* Test cases and expected output updated to match new expected behaviour\n","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":61,"deletions":7}}}]},{"date":"2023-08-28","commitResults":[{"hash":"ac8ab0fa500cb1a723e614ede2cf340f4c294bd0","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add datafile creation ability","messageBody":"Jeeves will automatically check for a saved task list and\ncreate the file and directory path required.\n\nAlso \u0027.gitignore\u0027 update to ignore the Task data as it does not make\nsense to track it with a RCS.\n","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"300596f5df00ad1c3fd9ca5467b2c31b1439c4c0","isMergeCommit":false,"messageTitle":"Update Jeeves to store tasks to an external data file","messageBody":"Updated the Task classes to be able to extract the required information\nto be written to the file.\nAlso updated test cases with new expected behaviour following a previous\nchange.\n","fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":9}}},{"hash":"004baba6d81eb444d3cc9ac057c430fb0716c895","isMergeCommit":false,"messageTitle":"Update Jeeves to read data from external data file","messageBody":"Task classes edited with new constructors to handle the new required\nscenario.\n","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":13}}},{"hash":"9f78cfcec3f84d54486ccb0ca6ea31389d2adb92","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"c4f83cbdf8e04df15ba010c03870d4d4bcd9075e","isMergeCommit":false,"messageTitle":"Update Jeeves to understand Dates","messageBody":"Deadline tasks can now officially support Dates in yyyy-MM-dd format\n","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":9}}},{"hash":"f10db9081cb5954f11bb77a16606d3fe48b2a68e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"5be733b432cca8a17c4d773a3f693aae20ee669e","isMergeCommit":false,"messageTitle":"Retire deprecated redirection testing files","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":35},"bat":{"insertions":3,"deletions":2}}}]},{"date":"2023-09-03","commitResults":[{"hash":"64fce8737b21ba28a6d660461cbc9338887579dc","isMergeCommit":false,"messageTitle":"Refactor Jeeves class: Extract code to classes for better abstraction","messageBody":"Storage class deals with loading tasks from the file and writing\nto the file.\n\nUI class deals with user interactions.\n\nParser class deals with interpreting the user\u0027s command and extracting\nrelevant tokens for later usage.\n\nTaskList class deals with the task list and it\u0027s operations.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":546,"deletions":405}}},{"hash":"959e0f0375a9f2261c4bb6a47c77bf96d3577dd7","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"39b36624b92d588769f86cb7efe5fc9e294f5ff8","isMergeCommit":false,"messageTitle":"Add Gradle wrappers to project","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"6e70c3e8f556ee9bfa6cd0130cb0f942e6441821","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser and TaskList class","messageBody":"Only isNotNumber method from Parser and\ngetTaskListDataAsString method from TaskList has unit tests\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":10}}},{"hash":"63e4c59594f94deae1993f4fb87d96a27129ecea","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add \u0027find\u0027 feature","messageBody":"\u0027find\u0027 allows the user to search through the descriptions of all tasks\nand will display all tasks that matches the search term given\n","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":0}}},{"hash":"334998c03ce9e8c99567c7c278a4a7e41616a254","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f27ca7ebf138e54476b2080156ad4026429f4fab","isMergeCommit":false,"messageTitle":"Update code to comply with the coding standard","messageBody":"Code tweaked to best fit with coding standards using manual inspection,\nfuture improvements possible with automated check styles.\n","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"002b5c37aa0027b4c6ef3da58263afe6cc8263bf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"5202cf61f1740db97a0f097bcdf18637eeb1066d","isMergeCommit":false,"messageTitle":"Add Javadocs for exception classes and methods.","messageBody":"Refactored code to reduce unnecessary string duplication when throwing\nan exception. (Error message is not required to construct the exception)\n","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":35}}},{"hash":"7903c1ee326c84336cf6c34d5d35a692311ddaf4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6786abcad38322e62ff98b74ea078315f6b56c3d","isMergeCommit":false,"messageTitle":"Add Javadocs across the entire code base.","messageBody":"Specifically:\n* Jeeves class\n* Parser class\n* Storage class\n* Ui class\n","fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":12}}},{"hash":"4abbc3d5371acb9c70d27e97b4a4836651ba560e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"JasonLCY-Temp":{"java":1052,"md":0,"fxml":0,"sh":0,"bat":8,"gradle":2,"txt":0}},"authorContributionVariance":{"JasonLCY-Temp":101322.64},"authorDisplayNameMap":{"JasonLCY-Temp":"CS2103T-T11-2 JASO.. YEN"}} +{"authorDailyContributionsMap":{"JasonLCY-Temp":[{"date":"2023-08-21","commitResults":[{"hash":"1a1e32733ab6026b28671df1fafbc0480aaa600a","isMergeCommit":false,"messageTitle":"Remove Duke.java and Add Jeeves.java","messageBody":"Change the name and personality of the chatbot.\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":10}}},{"hash":"9b0ab0a314cab2af37375cc60c4c71ddbe59c9fc","isMergeCommit":false,"messageTitle":"Jeeves class, main method: Update to be responsive to user input","messageBody":"The program only starts and ends instantly.\n\nThere is a need for it to be able to recognize user input and respond accordingly.\n\nLet\u0027s add the ability to read and recognize user input.\nSpecifically, Jeeves can recognize the \u0027bye\u0027 command and terminate appropriately.\nAll other commands will simply be echoed back.\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":2}}},{"hash":"2a981da0366d1899705896931f11e3e49dab1243","isMergeCommit":false,"messageTitle":"Add Task.java","messageBody":"No program logic exists for managing tasks.\n\nA Task Object will allow for the management of tasks cleanly.\n\nLet\u0027s add the Task class with a default constructor and getter/setters.\n","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}}]},{"date":"2023-08-22","commitResults":[{"hash":"6fb6025ae9cc7d4afb38714919aa2706cba918a7","isMergeCommit":false,"messageTitle":"Update Task class: Getter methods for task count and task id","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"c2d559ffb5a2689714ef00c50daf77196772fceb","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add task and list task feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":5}}}]},{"date":"2023-08-23","commitResults":[{"hash":"f3a908c49641c3daf2c182d86c3da579f723e91b","isMergeCommit":false,"messageTitle":"Update Task class: Add status tracking attribute and methods","messageBody":"Task object attribute list needs to expanded in order to extend the\nscope of Jeeves\u0027s functionality to track task status.\n","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"e2479d54c165bce16803ef3b053842a11c1ef620","isMergeCommit":false,"messageTitle":"Update Task class: Remove unused setter method for task description","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":10}}},{"hash":"fcf9b5e6786ec4fba445ea84d4c91da4c4dd2f30","isMergeCommit":false,"messageTitle":"Update Jeeves class: Change taskList scope","messageBody":"To avoid unnecessary code duplication when implementing task marking\nand unmarking, the task printing function has been moved to a separate\nmethod.\n\nThe scope of taskList has also been changed to be a class-level member\nin order for the program to properly function.\n","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":8}}},{"hash":"f84e76dbf837bdb5f4e90f057272312e3e8e9078","isMergeCommit":false,"messageTitle":"Task class: Replace switch case with if else blocks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":7}}},{"hash":"440c507fc1987ef5e03ee3dd0eb7878c34465c1e","isMergeCommit":false,"messageTitle":"Jeeves class: Add Marking/Unmarking function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"30d761b913028544f133743c1e283963863a1835","isMergeCommit":false,"messageTitle":"Update program to use the toString() String representation of a Task object for displaying output.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":20}}},{"hash":"480e6f0b28f547b85451cd41e94aa1bdfc4359f1","isMergeCommit":false,"messageTitle":"Refactor project: Packaged files, removed unused methods","messageBody":"In preparation of adding subclasses to Task, the current java files have\nbeen packaged for better logical organization.\n\nAlso, unused methods have been removed for better code cleanliness.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":18}}}]},{"date":"2023-08-25","commitResults":[{"hash":"51d901f5e323db894efcd403b80ec78c9bb7a200","isMergeCommit":false,"messageTitle":"Add Todo, Event and Deadline classes skeleton","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"60be09cfd4f6574b9b86303521497fbaf8e41c9a","isMergeCommit":false,"messageTitle":"Update String representation of Task objects","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":10}}},{"hash":"a3d51ea5de7da764f970bc5a895584e1bff35c53","isMergeCommit":false,"messageTitle":"Update Deadline and Event classes to be functional","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":2}}},{"hash":"6bfa3fc395bba16b07c1ba1a22041da68a066968","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add support for Todo, Deadline and Event tracking","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":11}}},{"hash":"0c30f6ec900446e1d6dc30c79dd1e452b4eae196","isMergeCommit":false,"messageTitle":"Update testcase scripts to work with Jeeves","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"8519ca853b431f67e7180a6fc5cf4b5bfabe81eb","isMergeCommit":false,"messageTitle":"Remove runtime.sh","messageBody":"Shell script is unused as local devices are all Windows.\nPlease utilize the batch file for testing.\n","fileTypesAndContributionMap":{"sh":{"insertions":0,"deletions":38}}},{"hash":"c56d5de3c12c7c2045da357093a1e8d442c18e88","isMergeCommit":false,"messageTitle":"Update testing batch file to work with this project","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":6,"deletions":2}}},{"hash":"529d0e924cfa39a17225faadb34b5d425cffe510","isMergeCommit":false,"messageTitle":"Update Jeeves class: Move scanner scope","messageBody":"Scanner was being recreated after every command, this is a waste of\nresources.\n\nScanner is only created once now.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"1b5f19bc9bb6bb17231963d53e0cb8ba38770507","isMergeCommit":false,"messageTitle":"Add test cases and expected output files","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"61ee1834cfd2c5f6b67c63550783ba4f0abc27dd","isMergeCommit":false,"messageTitle":"Update Jeeves class: New message output when 0 tasks recorded","messageBody":"Also updated test cases and expected output files to match the new\nintended behaviour\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":7,"deletions":1}}},{"hash":"e6db0be0ba5075c65d5da33823573cd5ecc6ba74","isMergeCommit":false,"messageTitle":"Jeeves class: Add constants and remove magic numbers","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":9}}},{"hash":"9b26f6a9561ed2fea90bf56458f1e99b6ec54c79","isMergeCommit":false,"messageTitle":"Update Jeeves Class: Add exception handling for \"mark\" command","messageBody":"Also updated test cases and expected outputs with new expected\nbehaviour\n","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":63,"deletions":7},"bat":{"insertions":1,"deletions":0}}},{"hash":"4c379235ba2ed4d7bda8d89c0e903ebff87ef6c4","isMergeCommit":false,"messageTitle":"Update Jeeves Class: Add exception handling for \"unmark\" command","messageBody":"Also updated test cases and expected outputs with new expected\nbehaviour\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":28,"deletions":7}}},{"hash":"c2b6f2d11831e8b9dfcf6b5fdc5dfde73f6422f5","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add exception handling for multiple commands","messageBody":"Specifically\n* todo\n* deadline\n* event\n\nAlso updated test cases and expected output with the expected behaviour\n","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":121,"deletions":30}}}]},{"date":"2023-08-26","commitResults":[{"hash":"eb41263481b71f3e703def0111ab6a187cfaace2","isMergeCommit":false,"messageTitle":"Update Jeeves class: Change taskList data structure to ArrayList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":15}}},{"hash":"918e0a8fb66e1bca14185013f055214e713393d1","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add Delete function","messageBody":"* Tasks can now be permanently removed from the task list.\n* Exception handling added for deleted tasks to \"mark\" and \"unmark\"\ncommands\n* Test cases and expected output updated to match new expected behaviour\n","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":61,"deletions":7}}}]},{"date":"2023-08-28","commitResults":[{"hash":"ac8ab0fa500cb1a723e614ede2cf340f4c294bd0","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add datafile creation ability","messageBody":"Jeeves will automatically check for a saved task list and\ncreate the file and directory path required.\n\nAlso \u0027.gitignore\u0027 update to ignore the Task data as it does not make\nsense to track it with a RCS.\n","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"300596f5df00ad1c3fd9ca5467b2c31b1439c4c0","isMergeCommit":false,"messageTitle":"Update Jeeves to store tasks to an external data file","messageBody":"Updated the Task classes to be able to extract the required information\nto be written to the file.\nAlso updated test cases with new expected behaviour following a previous\nchange.\n","fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":9}}},{"hash":"004baba6d81eb444d3cc9ac057c430fb0716c895","isMergeCommit":false,"messageTitle":"Update Jeeves to read data from external data file","messageBody":"Task classes edited with new constructors to handle the new required\nscenario.\n","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":13}}},{"hash":"9f78cfcec3f84d54486ccb0ca6ea31389d2adb92","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"c4f83cbdf8e04df15ba010c03870d4d4bcd9075e","isMergeCommit":false,"messageTitle":"Update Jeeves to understand Dates","messageBody":"Deadline tasks can now officially support Dates in yyyy-MM-dd format\n","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":9}}},{"hash":"f10db9081cb5954f11bb77a16606d3fe48b2a68e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"5be733b432cca8a17c4d773a3f693aae20ee669e","isMergeCommit":false,"messageTitle":"Retire deprecated redirection testing files","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":35},"bat":{"insertions":3,"deletions":2}}}]},{"date":"2023-09-03","commitResults":[{"hash":"64fce8737b21ba28a6d660461cbc9338887579dc","isMergeCommit":false,"messageTitle":"Refactor Jeeves class: Extract code to classes for better abstraction","messageBody":"Storage class deals with loading tasks from the file and writing\nto the file.\n\nUI class deals with user interactions.\n\nParser class deals with interpreting the user\u0027s command and extracting\nrelevant tokens for later usage.\n\nTaskList class deals with the task list and it\u0027s operations.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":546,"deletions":405}}},{"hash":"959e0f0375a9f2261c4bb6a47c77bf96d3577dd7","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"39b36624b92d588769f86cb7efe5fc9e294f5ff8","isMergeCommit":false,"messageTitle":"Add Gradle wrappers to project","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"6e70c3e8f556ee9bfa6cd0130cb0f942e6441821","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser and TaskList class","messageBody":"Only isNotNumber method from Parser and\ngetTaskListDataAsString method from TaskList has unit tests\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":10}}},{"hash":"63e4c59594f94deae1993f4fb87d96a27129ecea","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add \u0027find\u0027 feature","messageBody":"\u0027find\u0027 allows the user to search through the descriptions of all tasks\nand will display all tasks that matches the search term given\n","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":0}}},{"hash":"334998c03ce9e8c99567c7c278a4a7e41616a254","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f27ca7ebf138e54476b2080156ad4026429f4fab","isMergeCommit":false,"messageTitle":"Update code to comply with the coding standard","messageBody":"Code tweaked to best fit with coding standards using manual inspection,\nfuture improvements possible with automated check styles.\n","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"002b5c37aa0027b4c6ef3da58263afe6cc8263bf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"5202cf61f1740db97a0f097bcdf18637eeb1066d","isMergeCommit":false,"messageTitle":"Add Javadocs for exception classes and methods.","messageBody":"Refactored code to reduce unnecessary string duplication when throwing\nan exception. (Error message is not required to construct the exception)\n","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":35}}},{"hash":"7903c1ee326c84336cf6c34d5d35a692311ddaf4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6786abcad38322e62ff98b74ea078315f6b56c3d","isMergeCommit":false,"messageTitle":"Add Javadocs across the entire code base.","messageBody":"Specifically:\n* Jeeves class\n* Parser class\n* Storage class\n* Ui class\n","fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":12}}},{"hash":"4abbc3d5371acb9c70d27e97b4a4836651ba560e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"035f8593dd244df12e23feefbbfacaf3e17d3cfe","isMergeCommit":false,"messageTitle":"Jeeves \u0026 Parser class : Rename variables as per PR review suggestions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":33}}}]}]},"authorFileTypeContributionMap":{"JasonLCY-Temp":{"java":1052,"md":0,"fxml":0,"sh":0,"bat":8,"gradle":2,"txt":0}},"authorContributionVariance":{"JasonLCY-Temp":96048.45},"authorDisplayNameMap":{"JasonLCY-Temp":"CS2103T-T11-2 JASO.. YEN"}} diff --git a/Jonyxzx_ip_master/authorship.json b/Jonyxzx_ip_master/authorship.json index 72b1ac0f..0aab86b8 100644 --- a/Jonyxzx_ip_master/authorship.json +++ b/Jonyxzx_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"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":"Jonyxzx"},"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":{"Jonyxzx":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":"Jonyxzx"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"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":{"Jonyxzx":1,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" * The main class for the chatbot application.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" * Duke is a chatbot that help to manage tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"public class Duke {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a Duke instance with the provided file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" * @param filePath The file path for storing task data.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" this.tasks \u003d this.storage.loadData();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" * Runs the chatbot, displaying welcome messages and processing user commands.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" } catch (DukeException | DateTimeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" * The entry point for starting the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" * @param args Command-line arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":62}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":" * Exception class for chatbot errors.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a DukeException with an error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Jonyxzx":15}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" * Displays a farewell message and indicates that the application should exit.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"public class ByeCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by displaying a farewell message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" * Does nothing.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" //Do nothing","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" * Indicates that the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" * @return `true` indicating that the application should exit.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":43}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" * Implements classes define specific actions for each command.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"public interface Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command with the specified task list, user interface, and storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks (to be modified or queried).","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data after modification.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If an error occurs during command execution.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" * Loads task-related data for the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to which task data can be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" void loadTask(TaskList tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * Checks whether the command signifies an application exit.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" * @return `true` if the command indicates an exit, otherwise `false`.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" boolean isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":36}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" * Adds a new Deadline task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"public class DeadlineCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" private final String details;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a DeadlineCommand with the specified details.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" * @param details The details of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" public DeadlineCommand(String details) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by creating and adding a Deadline task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" * Displays appropriate messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to which the new task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data after modification.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If the deadline details are empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" if (details.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!!! The description of a deadline cannot be empty.\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" String[] partDeadline \u003d details.split(\"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d new Deadline(partDeadline[0], partDeadline[1].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" tasks.add(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n\" + \"\\t\" + curr + \"\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" + \"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" storage.editData(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" * Loads the task from the command details and adds it to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to which the new task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" String[] partDeadline \u003d details.split(\"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d new Deadline(partDeadline[0], partDeadline[1].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" tasks.add(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" * Indicates that this command is not an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Jonyxzx"},"content":" * @return `false` indicating that the application should not exit.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Jonyxzx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Jonyxzx"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":69}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" * Determines the task index to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" private final String details;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a DeleteCommand with the specified details.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * @param details The details of the task index to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" public DeleteCommand(String details) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by removing a task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" * Displays appropriate messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks from which the task will be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data after modification.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If the task index is out of bounds.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" int deleteIndex \u003d Integer.parseInt(this.details) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" if (deleteIndex \u003e tasks.size() || deleteIndex \u003c 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!! Task does not exist\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(\"Noted. I\u0027ve removed this task:\\n\" + \"\\t\" + tasks.get(deleteIndex).toString() + \"\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" + \"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" tasks.remove(deleteIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" storage.editData(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" * Does nothing.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" //Do nothing","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" * Indicates that this command is not an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" * @return `false` indicating that the application should not exit.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":64}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" * Adds a new Event task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":"public class EventCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" private final String details;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" * Constructs an EventCommand with the specified details.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" * @param details The details of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" public EventCommand(String details) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by creating and adding an Event task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * Displays appropriate messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to which the new task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data after modification.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If the event details are empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" if (details.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!!! The description of a event cannot be empty.\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" String[] partFrom \u003d details.split(\"/from\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" String[] partTo \u003d partFrom[1].split(\"/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d new Event(partFrom[0], partTo[0].trim(), partTo[1].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" tasks.add(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n\" + \"\\t\" + curr + \"\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" + \"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" storage.editData(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" * Loads the event task from the command details and adds it to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to which the new task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" String[] partFrom \u003d details.split(\"/from\");","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" String[] partTo \u003d partFrom[1].split(\"/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d new Event(partFrom[0], partTo[0].trim(), partTo[1].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":" tasks.add(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Jonyxzx"},"content":" * Indicates that this command is not an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Jonyxzx"},"content":" * @return `false` indicating that the application should not exit.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Jonyxzx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Jonyxzx"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":72}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" * Searches through the task list and displays tasks matching the keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" private final String details;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a FindCommand with the specified keyword details.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * @param details The keyword to search for in the task names.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" public FindCommand(String details) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by searching and displaying tasks containing the keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" * Displays the matching tasks to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to search through.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" StringBuilder output \u003d new StringBuilder(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" if (tasks.get(i).getName().contains(details)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" output.append(\"\\n\").append(i + 1).append(\".\").append(tasks.get(i).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(output.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" * Does nothing.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" //Do nothing","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" * Indicates that this command is not an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" * @return `false` indicating that the application should not exit.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":60}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" * Iterates through the task list and displays the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by displaying all the tasks in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" * Displays the matching tasks to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to iterate through.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" StringBuilder output \u003d new StringBuilder(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" output.append(\"\\n\").append(i + 1).append(\".\").append(tasks.get(i).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(output.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" * Does nothing.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" //Do nothing","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" * Indicates that this command is not an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" * @return `false` indicating that the application should not exit.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":47}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" * Determines the task index to be marked.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"public class MarkCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" private final String details;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a MarkCommand with the specified details.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" * @param details The details of the task index to be marked.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" public MarkCommand(String details) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by marking a task as completed in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" * Displays appropriate messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks in which the task will be marked.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data after modification.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If the task index is out of bounds.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" int markIndex \u003d Integer.parseInt(details) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" if (markIndex \u003e tasks.size() || markIndex \u003c 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!! Task does not exist\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d tasks.get(markIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" curr.taskDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(\"Nice! I\u0027ve marked this task as done:\\n\" + \"\\t\" + curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" storage.editData(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" * Does nothing.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" //Do nothing","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" * Indicates that this command is not an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" * @return `false` indicating that the application should not exit.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Jonyxzx"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":65}},{"path":"src/main/java/duke/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" * Adds a new Todo task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"public class TodoCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" private final String details;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a TodoCommand with the specified details.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" * @param details The details of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" public TodoCommand(String details) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by creating and adding a Todo task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" * Displays appropriate messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to which the new task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data after modification.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If the todo details are empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" if (details.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d new Todo(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" tasks.add(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n\" + \"\\t\" + curr + \"\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" + \"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" storage.editData(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" * Loads the todo task from the command details and adds it to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to which the new task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d new Todo(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" tasks.add(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" * Indicates that this command is not an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" * @return `false` indicating that the application should not exit.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Jonyxzx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Jonyxzx"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":67}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" * Determines the task index to be unmarked.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"public class UnmarkCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" private final String details;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a UnmarkCommand with the specified details.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" * @param details The details of the task index to be marked.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" public UnmarkCommand(String details) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by unmarking a task as completed in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" * Displays appropriate messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks in which the task will be unmarked.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data after modification.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If the task index is out of bounds.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" int unmarkIndex \u003d Integer.parseInt(details) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" if (unmarkIndex \u003e tasks.size() || unmarkIndex \u003c 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!! Task does not exist\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d tasks.get(unmarkIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" curr.taskUndone();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(\"OK, I\u0027ve marked this task as not done yet:\\n\" + \"\\t\" + curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" storage.editData(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" * Does nothing.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" //Do nothing","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" * Indicates that this command is not an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" * @return `false` indicating that the application should not exit.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":64}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.TodoCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * Parses user input to create corresponding Command objects for Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * Determines the type of command based on the keyword in the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" * Parses the full user input and creates the appropriate Command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" * @param fullCommand The full user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" * @return The Command object corresponding to the user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If the user input is not recognized.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" String[] parts \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" String keyword \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" String details \u003d parts.length \u003d\u003d 2 ? parts[1] : \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" switch (keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" return new MarkCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" return new UnmarkCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" return new TodoCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" return new DeadlineCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" return new EventCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" return new DeleteCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" return new FindCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":56}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" * Handles the loading and saving of task data for chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" * Manages reading from and writing to a specified file.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" private final String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" * @param filePath The file path where task data is stored.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" * Edits and saves task data to the specified file.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" * @param taskList The TaskList containing tasks to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If there is an issue saving the data.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" public void editData(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath, false));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" for (Task t : taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" writer.write(t.toSave() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!! Unable to save data safely.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" * Loads task data from the specified file and returns a TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" * @return The TaskList containing the loaded tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If there is an issue loading the data.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" public TaskList loadData() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" TaskList loadedTask \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(filePath));","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" String currLine;","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":" while ((currLine \u003d reader.readLine()) !\u003d null \u0026\u0026 !currLine.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Jonyxzx"},"content":" String[] parseCurr \u003d currLine.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Jonyxzx"},"content":" String completed \u003d parseCurr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Jonyxzx"},"content":" String command \u003d parseCurr[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Jonyxzx"},"content":" Command c \u003d Parser.parse(command);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Jonyxzx"},"content":" c.loadTask(loadedTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Jonyxzx"},"content":" if (completed.equals(\"1\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Jonyxzx"},"content":" loadedTask.get(loadedTask.size() - 1).taskDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Jonyxzx"},"content":" return loadedTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Jonyxzx"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Jonyxzx"},"content":" new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Jonyxzx"},"content":" return loadedTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Jonyxzx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!! Unable to read saved data safely.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":80}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" * Represents a deadline task in the chatbot application.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" private final LocalDateTime time;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a Deadline task with the given name and time.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * @param name The name of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * @param time The deadline date and time as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" public Deadline(String name, String time) {","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" this.time \u003d timeConverter(time);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" * Converts a string time representation to a LocalDateTime object.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" * @param time The time as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * @return The LocalDateTime object representing the time.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" * @throws DateTimeException If there\u0027s an issue parsing the time string.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" public LocalDateTime timeConverter(String time) throws DateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" if (!time.contains(\" \")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" time +\u003d \" 2359\";","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" return LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" * Converts the deadline task to a string for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" public String toSave() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" String timeToSave \u003d time.toString().replace(\"T\", \" \").replace(\":\", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" return (super.isComplete ? \"1 \" : \"0 \") + \"deadline \" + super.name + \"/by \" + timeToSave;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" * Converts the deadline task to a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" return \"[D]\" + super.toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" + \"(by: \" + time.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Jonyxzx":60}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" * Represents an event task in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" private final LocalDateTime start;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" private final LocalDateTime end;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" * Constructs an Event task with the given name, start time, and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * @param name The name of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" * @param start The start time of the event as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" * @param end The end time of the event as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" public Event(String name, String start, String end) {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" this.start \u003d timeConverterStart(start);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" this.end \u003d timeConverterEnd(end);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * Converts a start time string representation to a LocalDateTime object.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @param time The start time as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * @return The LocalDateTime object representing the start time.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" * @throws DateTimeException If there\u0027s an issue parsing the time string.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" public LocalDateTime timeConverterStart(String time) throws DateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" if (!time.contains(\" \")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" time +\u003d \" 0000\";","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" return LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" * Converts an end time string representation to a LocalDateTime object.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" * @param time The end time as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" * @return The LocalDateTime object representing the end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" * @throws DateTimeException If there\u0027s an issue parsing the time string.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" public LocalDateTime timeConverterEnd(String time) throws DateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" if (!time.contains(\" \")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" time +\u003d \" 2359\";","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" return LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" * Converts the event task to a string for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Jonyxzx"},"content":" public String toSave() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Jonyxzx"},"content":" String startToSave \u003d start.toString().replace(\"T\", \" \").replace(\":\", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Jonyxzx"},"content":" String endToSave \u003d end.toString().replace(\"T\", \" \").replace(\":\", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Jonyxzx"},"content":" return (super.isComplete ? \"1 \" : \"0 \") + \"event \" + super.name + \"/from \" + startToSave + \" /to \" + endToSave;","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Jonyxzx"},"content":" * Converts the event task to a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"Jonyxzx"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"Jonyxzx"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Jonyxzx"},"content":" + \"/from \" + start.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"))","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Jonyxzx"},"content":" + \" /to \" + end.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Jonyxzx":80}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":" * Represents a task in the chatbot application.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":" protected String name;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" protected boolean isComplete;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a Task instance with the given name.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" * Marks the task as completed.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" public void taskDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" this.isComplete \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * Marks the task as not completed.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" public void taskUndone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" * Retrieves the name of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" * @return The name of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" public String getName() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" return this.name;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" * Retrieves the completion status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" * @return `true` if the task is completed, `false` otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" public boolean getComplete() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" return this.isComplete;","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" * Converts the task to a string for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" public String toSave() {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" return \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":" * Converts the task to a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Jonyxzx"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Jonyxzx"},"content":" return isComplete ? \"[X] \" + name : \"[ ] \" + name;","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":70}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":" * A collection of tasks managed by the chatbot application.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":9}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":" * Represents a todo task in the chatbot application.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a Todo task with the given name.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" * @param name The name of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" * Converts the todo task to a string for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" public String toSave() {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" return (super.isComplete ? \"1 \" : \"0 \") + \"todo \" + super.name;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * Converts the todo task to a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Jonyxzx":36}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":" * User interface class responsible for interacting with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":" * Provides methods to display messages, read user commands, and show errors.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" private static final Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" * Adds a horizontal line to the provided message for better formatting.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" * @param message The message to which a horizontal line is added.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * @return The formatted message with a horizontal line.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" private String addLine(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" String horizontal \u003d \"_____________________________________________________\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" return horizontal + message + \"\\n\" + horizontal;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" * Displays a welcome message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" System.out.println(addLine(\"Hello! I\u0027m Ace\\nWhat can I do for you?\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * Reads a command entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" * @return The user\u0027s input command.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" * Displays a message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" public void sendMessage(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" System.out.println(addLine(message));","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" * @param message The error message to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" public void showError(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" System.out.println(addLine(message));","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":56}},{"path":"src/test/java/duke/command/ByeCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"public class ByeCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" public void testIsExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" ByeCommand byeCommand \u003d new ByeCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" assertTrue(byeCommand.isExit());","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":14}},{"path":"src/test/java/duke/command/DeadlineCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"public class DeadlineCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" public void missingArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new DeadlineCommand(\"\").execute(null, null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" public void testDeadlineLoad() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" DeadlineCommand testCommand \u003d new DeadlineCommand(\"borrow book /by 2000-10-10 1800\");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" testCommand.loadTask(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":24}},{"path":"src/test/java/duke/command/DeleteCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" public void negativeArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new DeleteCommand(\"-1\").execute(new TaskList(), null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" public void testTaskDeletion() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" DeadlineCommand addTaskCommand \u003d new DeadlineCommand(\"borrow book /by 2000-10-10 1800\");","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" addTaskCommand.loadTask(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" new DeleteCommand(\"1\").execute(tasks, new Ui(), new Storage(\"data/duke.txt\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" assertEquals(0, tasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":27}},{"path":"src/test/java/duke/command/EventCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"public class EventCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" public void missingArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new EventCommand(\"\").execute(null, null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" public void testEventLoad() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" EventCommand testCommand \u003d new EventCommand(\"read book /from 2000-10-10 1800 /to 2000-10-11 1800\");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" testCommand.loadTask(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":24}},{"path":"src/test/java/duke/command/MarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"public class MarkCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" public void negativeArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new MarkCommand(\"-1\").execute(new TaskList(), null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" public void invalidArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new MarkCommand(\"2\").execute(new TaskList(), null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" public void markTaskTest() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" TodoCommand testCommand \u003d new TodoCommand(\"buy book\");","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" testCommand.loadTask(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" new MarkCommand(\"1\").execute(tasks, new Ui(), new Storage(\"data/duke.txt\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" assertTrue(tasks.get(0).getComplete());","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" new DeleteCommand(\"1\").execute(tasks, new Ui(), new Storage(\"data/duke.txt\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":33}},{"path":"src/test/java/duke/command/TodoCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"public class TodoCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" public void missingArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new TodoCommand(\"\").execute(null, null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" public void testTodoLoad() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" TodoCommand testCommand \u003d new TodoCommand(\"buy book\");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" testCommand.loadTask(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":24}},{"path":"src/test/java/duke/command/UnmarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"public class UnmarkCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" public void negativeArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new UnmarkCommand(\"-1\").execute(new TaskList(), null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" public void invalidArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new UnmarkCommand(\"-1\").execute(new TaskList(), null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" public void markTaskTest() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" TodoCommand testCommand \u003d new TodoCommand(\"todo buy book\");","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" testCommand.loadTask(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" new MarkCommand(\"1\").execute(tasks, new Ui(), new Storage(\"data/duke.txt\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" new UnmarkCommand(\"1\").execute(tasks, new Ui(), new Storage(\"data/duke.txt\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" assertFalse(tasks.get(0).getComplete());","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" new DeleteCommand(\"1\").execute(tasks, new Ui(), new Storage(\"data/duke.txt\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":34}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"blah","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"mark 100","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"unmark 100","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"delete 99","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":"delete -1","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"delete 1","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Jonyxzx":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":"Jonyxzx"},"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":{"Jonyxzx":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":"Jonyxzx"},"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":{"Jonyxzx":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"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":"Jonyxzx"},"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":{"Jonyxzx":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":"Jonyxzx"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-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":"-"},"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":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"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":"Jonyxzx"},"content":"javafx {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" version \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" modules \u003d [\u0027javafx.base\u0027, \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027, \u0027javafx.graphics\u0027]","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"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":{"Jonyxzx":22,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"0 todo a","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"0 todo b","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"0 todo c","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"0 todo d","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"0 todo a","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"0 todo b","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jonyxzx":6}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" * The main class for the chatbot application.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" * Duke is a chatbot that help to manage tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"public class Duke {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" public final Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a Duke instance with the provided file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" * @param filePath The file path for storing task data.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" this.tasks \u003d this.storage.loadData();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" * Runs the chatbot, displaying welcome messages and processing user commands.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" * @param inputs The user inputs.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" public void run(String... inputs) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" for (String input : inputs) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" Command c \u003d Parser.parse(input.trim());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" } catch (DukeException | DateTimeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jonyxzx":51}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":" * Exception class for chatbot errors.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a DukeException with an error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Jonyxzx":15}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Main;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":" * A launcher class to start the chatbot GUI.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jonyxzx":13}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" * Displays a farewell message and indicates that the application should exit.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"public class ByeCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by displaying a farewell message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(\"Bye. Happy to be able to serve you!!!\\nShutting down...\");","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" closeChatbot();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" * Closes the chatbot after two seconds of pause.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" public void closeChatbot() {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" PauseTransition pause \u003d new PauseTransition(Duration.seconds(2));","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" pause.setOnFinished(event -\u003e {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" Platform.exit();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" });","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" pause.play();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" * Does nothing.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" //Do nothing","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":48}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" * Implements classes define specific actions for each command.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"public interface Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command with the specified task list, user interface, and storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks (to be modified or queried).","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data after modification.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If an error occurs during command execution.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" * Loads task-related data for the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to which task data can be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" void loadTask(TaskList tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":29}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" * Adds a new Deadline task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"public class DeadlineCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" private final String details;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a DeadlineCommand with the specified details.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" * @param details The details of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" public DeadlineCommand(String details) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by creating and adding a Deadline task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" * Displays appropriate messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to which the new task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data after modification.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If the deadline details are empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" if (details.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!!! The description of a deadline cannot be empty.\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" String[] partDeadline \u003d details.split(\"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d new Deadline(partDeadline[0], partDeadline[1].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" tasks.add(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n\" + \"\\t\" + curr + \"\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" + \"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" storage.editData(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" * Loads the task from the command details and adds it to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to which the new task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" String[] partDeadline \u003d details.split(\"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d new Deadline(partDeadline[0], partDeadline[1].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" tasks.add(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":59}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" * Determines the task index to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" private final String details;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a DeleteCommand with the specified details.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * @param details The details of the task index to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" public DeleteCommand(String details) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by removing a task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" * Displays appropriate messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks from which the task will be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data after modification.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If the task index is out of bounds.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" int deleteIndex \u003d Integer.parseInt(this.details) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" if (deleteIndex \u003e tasks.size() || deleteIndex \u003c 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!! Task does not exist\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(\"Noted. I\u0027ve removed this task:\\n\" + \"\\t\" + tasks.get(deleteIndex).toString() + \"\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" + \"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" tasks.remove(deleteIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" storage.editData(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" * Does nothing.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" //Do nothing","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":54}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" * Adds a new Event task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":"public class EventCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" private final String details;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" * Constructs an EventCommand with the specified details.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" * @param details The details of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" public EventCommand(String details) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by creating and adding an Event task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * Displays appropriate messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to which the new task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data after modification.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If the event details are empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" if (details.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!!! The description of a event cannot be empty.\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" String[] partFrom \u003d details.split(\"/from\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" String[] partTo \u003d partFrom[1].split(\"/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d new Event(partFrom[0], partTo[0].trim(), partTo[1].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" tasks.add(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n\" + \"\\t\" + curr + \"\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" + \"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" storage.editData(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" * Loads the event task from the command details and adds it to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to which the new task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" String[] partFrom \u003d details.split(\"/from\");","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" String[] partTo \u003d partFrom[1].split(\"/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d new Event(partFrom[0], partTo[0].trim(), partTo[1].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":" tasks.add(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":62}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" * Searches through the task list and displays tasks matching the keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" private final String details;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a FindCommand with the specified keyword details.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * @param details The keyword to search for in the task names.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" public FindCommand(String details) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by searching and displaying tasks containing the keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" * Displays the matching tasks to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to search through.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" StringBuilder output \u003d new StringBuilder(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" if (tasks.get(i).getName().contains(details)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" output.append(\"\\n\").append(i + 1).append(\".\").append(tasks.get(i).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(output.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" * Does nothing.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" //Do nothing","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":50}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" * Iterates through the task list and displays the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by displaying all the tasks in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" * Displays the matching tasks to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to iterate through.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" StringBuilder output \u003d new StringBuilder(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" output.append(\"\\n\").append(i + 1).append(\".\").append(tasks.get(i).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(output.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" * Does nothing.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" //Do nothing","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":37}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" * Determines the task index to be marked.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"public class MarkCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" private final String details;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a MarkCommand with the specified details.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" * @param details The details of the task index to be marked.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" public MarkCommand(String details) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by marking a task as completed in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" * Displays appropriate messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks in which the task will be marked.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data after modification.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If the task index is out of bounds.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" int markIndex \u003d Integer.parseInt(details) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" if (markIndex \u003e tasks.size() || markIndex \u003c 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!! Task does not exist\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d tasks.get(markIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" curr.taskDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(\"Nice! I\u0027ve marked this task as done:\\n\" + \"\\t\" + curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" storage.editData(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" * Does nothing.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" //Do nothing","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":55}},{"path":"src/main/java/duke/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" * Adds a new Todo task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"public class TodoCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" private final String details;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a TodoCommand with the specified details.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" * @param details The details of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" public TodoCommand(String details) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by creating and adding a Todo task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" * Displays appropriate messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to which the new task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data after modification.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If the todo details are empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" if (details.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d new Todo(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" tasks.add(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n\" + \"\\t\" + curr + \"\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" + \"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" storage.editData(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" * Loads the todo task from the command details and adds it to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks to which the new task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d new Todo(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" tasks.add(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":57}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" * Determines the task index to be unmarked.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"public class UnmarkCommand implements Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" private final String details;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a UnmarkCommand with the specified details.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" * @param details The details of the task index to be marked.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" public UnmarkCommand(String details) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" * Executes the command by unmarking a task as completed in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" * Displays appropriate messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks in which the task will be unmarked.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @param storage The storage for saving task data after modification.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If the task index is out of bounds.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" int unmarkIndex \u003d Integer.parseInt(details) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" if (unmarkIndex \u003e tasks.size() || unmarkIndex \u003c 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!! Task does not exist\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" Task curr \u003d tasks.get(unmarkIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" curr.taskUndone();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" ui.sendMessage(\"OK, I\u0027ve marked this task as not done yet:\\n\" + \"\\t\" + curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" storage.editData(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" * Does nothing.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" public void loadTask(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" //Do nothing","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":54}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.TodoCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * Parses user input to create corresponding Command objects for Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * Determines the type of command based on the keyword in the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" * Parses the full user input and creates the appropriate Command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" * @param fullCommand The full user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" * @return The Command object corresponding to the user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If the user input is not recognized.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" String[] parts \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" String keyword \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" String details \u003d parts.length \u003d\u003d 2 ? parts[1] : \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" switch (keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" return new MarkCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" return new UnmarkCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" return new TodoCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" return new DeadlineCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" return new EventCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" return new DeleteCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" return new FindCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":56}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" * Handles the loading and saving of task data for chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" * Manages reading from and writing to a specified file.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" private final String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" * @param filePath The file path where task data is stored.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" * Edits and saves task data to the specified file.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" * @param taskList The TaskList containing tasks to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If there is an issue saving the data.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" public void editData(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath, false));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" for (Task t : taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" writer.write(t.toSave() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!! Unable to save data safely.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" * Loads task data from the specified file and returns a TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" * @return The TaskList containing the loaded tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" * @throws DukeException If there is an issue loading the data.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" public TaskList loadData() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" TaskList loadedTask \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(filePath));","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" String currLine;","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":" while ((currLine \u003d reader.readLine()) !\u003d null \u0026\u0026 !currLine.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Jonyxzx"},"content":" String[] parseCurr \u003d currLine.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Jonyxzx"},"content":" String completed \u003d parseCurr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Jonyxzx"},"content":" String command \u003d parseCurr[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Jonyxzx"},"content":" Command c \u003d Parser.parse(command);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Jonyxzx"},"content":" c.loadTask(loadedTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Jonyxzx"},"content":" if (completed.equals(\"1\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Jonyxzx"},"content":" loadedTask.get(loadedTask.size() - 1).taskDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Jonyxzx"},"content":" return loadedTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Jonyxzx"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Jonyxzx"},"content":" new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Jonyxzx"},"content":" return loadedTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Jonyxzx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Jonyxzx"},"content":" throw new DukeException(\"OOPS!! Unable to read saved data safely.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":80}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" * Represents a deadline task in the chatbot application.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" private final LocalDateTime time;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a Deadline task with the given name and time.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" * @param name The name of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * @param time The deadline date and time as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" public Deadline(String name, String time) {","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" this.time \u003d timeConverter(time);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" * Converts a string time representation to a LocalDateTime object.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" * @param time The time as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * @return The LocalDateTime object representing the time.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" * @throws DateTimeException If there\u0027s an issue parsing the time string.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" public LocalDateTime timeConverter(String time) throws DateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" if (!time.contains(\" \")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" time +\u003d \" 2359\";","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" return LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" * Converts the deadline task to a string for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" public String toSave() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" String timeToSave \u003d time.toString().replace(\"T\", \" \").replace(\":\", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" return (super.isComplete ? \"1 \" : \"0 \") + \"deadline \" + super.name + \"/by \" + timeToSave;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" * Converts the deadline task to a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" return \"[D]\" + super.toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" + \"(by: \" + time.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Jonyxzx":60}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" * Represents an event task in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" private final LocalDateTime start;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" private final LocalDateTime end;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" * Constructs an Event task with the given name, start time, and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" * @param name The name of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" * @param start The start time of the event as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" * @param end The end time of the event as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" public Event(String name, String start, String end) {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" this.start \u003d timeConverterStart(start);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" this.end \u003d timeConverterEnd(end);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * Converts a start time string representation to a LocalDateTime object.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @param time The start time as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * @return The LocalDateTime object representing the start time.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" * @throws DateTimeException If there\u0027s an issue parsing the time string.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" public LocalDateTime timeConverterStart(String time) throws DateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" if (!time.contains(\" \")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" time +\u003d \" 0000\";","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" return LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" * Converts an end time string representation to a LocalDateTime object.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" * @param time The end time as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" * @return The LocalDateTime object representing the end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" * @throws DateTimeException If there\u0027s an issue parsing the time string.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" public LocalDateTime timeConverterEnd(String time) throws DateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" if (!time.contains(\" \")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" time +\u003d \" 2359\";","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" return LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" * Converts the event task to a string for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Jonyxzx"},"content":" public String toSave() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Jonyxzx"},"content":" String startToSave \u003d start.toString().replace(\"T\", \" \").replace(\":\", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Jonyxzx"},"content":" String endToSave \u003d end.toString().replace(\"T\", \" \").replace(\":\", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Jonyxzx"},"content":" return (super.isComplete ? \"1 \" : \"0 \") + \"event \" + super.name + \"/from \" + startToSave + \" /to \" + endToSave;","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Jonyxzx"},"content":" * Converts the event task to a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"Jonyxzx"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"Jonyxzx"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Jonyxzx"},"content":" + \"/from \" + start.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"))","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Jonyxzx"},"content":" + \" /to \" + end.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Jonyxzx":80}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":" * Represents a task in the chatbot application.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":" protected String name;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" protected boolean isComplete;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a Task instance with the given name.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" * Marks the task as completed.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" public void taskDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" this.isComplete \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * Marks the task as not completed.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" public void taskUndone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" * Retrieves the name of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" * @return The name of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" public String getName() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" return this.name;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" * Retrieves the completion status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" * @return `true` if the task is completed, `false` otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" public boolean getComplete() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" return this.isComplete;","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":" * Converts the task to a string for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" public String toSave() {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" return \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":" * Converts the task to a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Jonyxzx"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Jonyxzx"},"content":" return isComplete ? \"[X] \" + name : \"[ ] \" + name;","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":70}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":" * A collection of tasks managed by the chatbot application.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":9}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":" * Represents a todo task in the chatbot application.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" * Constructs a Todo task with the given name.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" * @param name The name of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" * Converts the todo task to a string for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" public String toSave() {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" return (super.isComplete ? \"1 \" : \"0 \") + \"todo \" + super.name;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * Converts the todo task to a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Jonyxzx":36}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"import javafx.scene.text.Text;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"import javafx.scene.text.TextAlignment;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"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":20,"author":{"gitId":"Jonyxzx"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" private Text dialogText;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":" this.dialogText.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" this.displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" Text t \u003d (Text) getChildren().get(1);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" t.setTextAlignment(TextAlignment.LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Jonyxzx"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jonyxzx":63}},{"path":"src/main/java/duke/ui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" private static final Duke DUKE \u003d new Duke(\"data/duke.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(DUKE);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jonyxzx":32}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" private final Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" private final Image bot \u003d new Image(this.getClass().getResourceAsStream(\"/images/chatbot.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" * Initialises the ScrollPane.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Jonyxzx"},"content":" showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Jonyxzx"},"content":" * Displays the welcome message.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Jonyxzx"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Jonyxzx"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Jonyxzx"},"content":" DialogBox.getDukeDialog(\"Hello! I\u0027m Ace\\nWhat can I do for you?\", this.bot)","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Jonyxzx"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Jonyxzx"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Jonyxzx"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Jonyxzx"},"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":54,"author":{"gitId":"Jonyxzx"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Jonyxzx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Jonyxzx"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Jonyxzx"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Jonyxzx"},"content":" String[] userInputs \u003d input.split(\"\\\\+\");","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Jonyxzx"},"content":" duke.run(userInputs);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Jonyxzx"},"content":" String response \u003d duke.ui.getOutput();","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Jonyxzx"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Jonyxzx"},"content":" DialogBox.getUserDialog(input, this.user),","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Jonyxzx"},"content":" DialogBox.getDukeDialog(response, this.bot)","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"Jonyxzx"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Jonyxzx"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jonyxzx":68}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":" * Provides methods to store messages, and errors.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":" private String output;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" * Stores a message by the chatbot.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" public void sendMessage(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" this.output \u003d message;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" * Stores an error message by the chatbot.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" * @param message The error message to be displayed.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" public void showError(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" this.output \u003d message;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" * Returns a message to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" * @return The message to be displayed.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" public String getOutput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" return this.output;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":35}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"\u003c?import javafx.scene.text.Text?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"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-05"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" \u003cText fx:id\u003d\"dialogText\" strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"Text\" textAlignment\u003d\"RIGHT\" wrappingWidth\u003d\"275.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"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":12,"author":{"gitId":"Jonyxzx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jonyxzx":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"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.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"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-05"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"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-05"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"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-05"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jonyxzx":19}},{"path":"src/test/java/duke/command/DeadlineCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"public class DeadlineCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" public void missingArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new DeadlineCommand(\"\").execute(null, null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" public void testDeadlineLoad() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" DeadlineCommand testCommand \u003d new DeadlineCommand(\"borrow book /by 2000-10-10 1800\");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" testCommand.loadTask(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":24}},{"path":"src/test/java/duke/command/DeleteCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" public void negativeArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new DeleteCommand(\"-1\").execute(new TaskList(), null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" public void testTaskDeletion() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" DeadlineCommand addTaskCommand \u003d new DeadlineCommand(\"borrow book /by 2000-10-10 1800\");","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" addTaskCommand.loadTask(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" new DeleteCommand(\"1\").execute(tasks, new Ui(), new Storage(\"data/duke.txt\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" assertEquals(0, tasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":27}},{"path":"src/test/java/duke/command/EventCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"public class EventCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" public void missingArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new EventCommand(\"\").execute(null, null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" public void testEventLoad() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" EventCommand testCommand \u003d new EventCommand(\"read book /from 2000-10-10 1800 /to 2000-10-11 1800\");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" testCommand.loadTask(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":24}},{"path":"src/test/java/duke/command/MarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"public class MarkCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" public void negativeArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new MarkCommand(\"-1\").execute(new TaskList(), null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" public void invalidArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new MarkCommand(\"2\").execute(new TaskList(), null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" public void markTaskTest() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" TodoCommand testCommand \u003d new TodoCommand(\"buy book\");","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" testCommand.loadTask(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" new MarkCommand(\"1\").execute(tasks, new Ui(), new Storage(\"data/duke.txt\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" assertTrue(tasks.get(0).getComplete());","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" new DeleteCommand(\"1\").execute(tasks, new Ui(), new Storage(\"data/duke.txt\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":33}},{"path":"src/test/java/duke/command/TodoCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"public class TodoCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":" public void missingArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new TodoCommand(\"\").execute(null, null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":" public void testTodoLoad() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" TodoCommand testCommand \u003d new TodoCommand(\"buy book\");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" testCommand.loadTask(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":24}},{"path":"src/test/java/duke/command/UnmarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"public class UnmarkCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":" public void negativeArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new UnmarkCommand(\"-1\").execute(new TaskList(), null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jonyxzx"},"content":" public void invalidArgument() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jonyxzx"},"content":" assertThrows(DukeException.class, () -\u003e new UnmarkCommand(\"-1\").execute(new TaskList(), null, null));","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jonyxzx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jonyxzx"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jonyxzx"},"content":" public void markTaskTest() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jonyxzx"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jonyxzx"},"content":" TodoCommand testCommand \u003d new TodoCommand(\"todo buy book\");","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jonyxzx"},"content":" testCommand.loadTask(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Jonyxzx"},"content":" new MarkCommand(\"1\").execute(tasks, new Ui(), new Storage(\"data/duke.txt\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jonyxzx"},"content":" new UnmarkCommand(\"1\").execute(tasks, new Ui(), new Storage(\"data/duke.txt\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jonyxzx"},"content":" assertFalse(tasks.get(0).getComplete());","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jonyxzx"},"content":" new DeleteCommand(\"1\").execute(tasks, new Ui(), new Storage(\"data/duke.txt\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jonyxzx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jonyxzx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jonyxzx":34}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jonyxzx"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"Jonyxzx"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"Jonyxzx"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"Jonyxzx"},"content":"blah","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"Jonyxzx"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"Jonyxzx"},"content":"mark 100","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"Jonyxzx"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Jonyxzx"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"Jonyxzx"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"Jonyxzx"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"Jonyxzx"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"Jonyxzx"},"content":"unmark 100","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Jonyxzx"},"content":"delete 99","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Jonyxzx"},"content":"delete -1","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Jonyxzx"},"content":"delete 1","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"Jonyxzx"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"Jonyxzx"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Jonyxzx":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":"Jonyxzx"},"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":{"Jonyxzx":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":"Jonyxzx"},"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":{"Jonyxzx":1,"-":37}}] diff --git a/Jonyxzx_ip_master/commits.json b/Jonyxzx_ip_master/commits.json index 3c44be11..8fd3f871 100644 --- a/Jonyxzx_ip_master/commits.json +++ b/Jonyxzx_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Jonyxzx":[{"date":"2023-08-22","commitResults":[{"hash":"fe9658b98f0ee1ea18e1000c40d15ca93feb40ec","isMergeCommit":false,"messageTitle":"Level 0 added","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":10}}},{"hash":"722564f98e9caf9997275283a1a09edee90174db","isMergeCommit":false,"messageTitle":"Level 1 added","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":8}}},{"hash":"36a4bcaf1aea813aa82587acd5ef86eac2ec24f9","isMergeCommit":false,"messageTitle":"Level 2 added","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":1}}},{"hash":"13bd6141dab1ab6da75ff6d0e965e01494cc82f2","isMergeCommit":false,"messageTitle":"Level 3 + A-Classes added","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":10}}}]},{"date":"2023-08-23","commitResults":[{"hash":"8ff812556adf41bda547a3def374814f4926bb65","isMergeCommit":false,"messageTitle":"Level 4 + A-Inheritance added","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":13}}},{"hash":"e85f1c34a18f8e58004b35fef7c9d967ac91befc","isMergeCommit":false,"messageTitle":"Level-5 + A-TextUiTesting added","messageBody":"","tags":["Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":39,"deletions":23}}},{"hash":"e0dfdfae2382c6a77156b4ad25494d89e719ae0a","isMergeCommit":false,"messageTitle":"Level 6 + A-Exceptions + A-Collections","messageBody":"","tags":["Level-6","A-Exceptions","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":16,"deletions":0},"java":{"insertions":34,"deletions":28}}}]},{"date":"2023-08-29","commitResults":[{"hash":"b99fe9fe83ae4a35c648bb40780b634f61b2c2d6","isMergeCommit":false,"messageTitle":"Refactor the code to apply more OOP concepts and implement save data","messageBody":"","tags":["Level-7","A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":535,"deletions":162},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"68fa9f5b8275a2ce621cf896ae1c683f571c9296","isMergeCommit":false,"messageTitle":"Add the ability for deadline and event to recognise time date format","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":56,"deletions":17}}},{"hash":"92cdeeafea01b31f743bd07ff58c83b30d7c35eb","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e8540f413f9364eb058bbe2640aca48a7c0abc6d","isMergeCommit":false,"messageTitle":"Merge gradle into the main branch and add JUnit testcases","messageBody":"","tags":["A-JUnit","A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":189,"deletions":6}}},{"hash":"ccca7d96028ca603833b45109e0ca223fed8bf92","isMergeCommit":false,"messageTitle":"Create jar files and fix output display errors","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":3,"deletions":3}}},{"hash":"8c3c73713bebae8346ede9307573584fb701fd8f","isMergeCommit":false,"messageTitle":"Add the find feature to search for keyword in the list","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":34}}}]},{"date":"2023-08-30","commitResults":[{"hash":"40348ff1950d789e45346f9a994e155caae04664","isMergeCommit":false,"messageTitle":"Add javadoc for all public methods and classes","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":454,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"99e139622364073490905ceb3c1c46b329d99701","isMergeCommit":false,"messageTitle":"Add checkstyle plugins and rewrite the code to fix the checkstyle errors","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":55}}}]}]},"authorFileTypeContributionMap":{"Jonyxzx":{"java":1291,"md":2,"fxml":0,"sh":1,"bat":1,"gradle":1,"txt":17}},"authorContributionVariance":{"Jonyxzx":70176.125},"authorDisplayNameMap":{"Jonyxzx":"CS2103T-T11-2 JONY..JONY"}} +{"authorDailyContributionsMap":{"Jonyxzx":[{"date":"2023-08-22","commitResults":[{"hash":"fe9658b98f0ee1ea18e1000c40d15ca93feb40ec","isMergeCommit":false,"messageTitle":"Level 0 added","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":10}}},{"hash":"722564f98e9caf9997275283a1a09edee90174db","isMergeCommit":false,"messageTitle":"Level 1 added","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":8}}},{"hash":"36a4bcaf1aea813aa82587acd5ef86eac2ec24f9","isMergeCommit":false,"messageTitle":"Level 2 added","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":1}}},{"hash":"13bd6141dab1ab6da75ff6d0e965e01494cc82f2","isMergeCommit":false,"messageTitle":"Level 3 + A-Classes added","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":10}}}]},{"date":"2023-08-23","commitResults":[{"hash":"8ff812556adf41bda547a3def374814f4926bb65","isMergeCommit":false,"messageTitle":"Level 4 + A-Inheritance added","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":13}}},{"hash":"e85f1c34a18f8e58004b35fef7c9d967ac91befc","isMergeCommit":false,"messageTitle":"Level-5 + A-TextUiTesting added","messageBody":"","tags":["Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":39,"deletions":23}}},{"hash":"e0dfdfae2382c6a77156b4ad25494d89e719ae0a","isMergeCommit":false,"messageTitle":"Level 6 + A-Exceptions + A-Collections","messageBody":"","tags":["Level-6","A-Exceptions","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":16,"deletions":0},"java":{"insertions":34,"deletions":28}}}]},{"date":"2023-08-29","commitResults":[{"hash":"b99fe9fe83ae4a35c648bb40780b634f61b2c2d6","isMergeCommit":false,"messageTitle":"Refactor the code to apply more OOP concepts and implement save data","messageBody":"","tags":["Level-7","A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":535,"deletions":162},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"68fa9f5b8275a2ce621cf896ae1c683f571c9296","isMergeCommit":false,"messageTitle":"Add the ability for deadline and event to recognise time date format","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":56,"deletions":17}}},{"hash":"92cdeeafea01b31f743bd07ff58c83b30d7c35eb","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e8540f413f9364eb058bbe2640aca48a7c0abc6d","isMergeCommit":false,"messageTitle":"Merge gradle into the main branch and add JUnit testcases","messageBody":"","tags":["A-JUnit","A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":189,"deletions":6}}},{"hash":"ccca7d96028ca603833b45109e0ca223fed8bf92","isMergeCommit":false,"messageTitle":"Create jar files and fix output display errors","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":3,"deletions":3}}},{"hash":"8c3c73713bebae8346ede9307573584fb701fd8f","isMergeCommit":false,"messageTitle":"Add the find feature to search for keyword in the list","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":34}}}]},{"date":"2023-08-30","commitResults":[{"hash":"40348ff1950d789e45346f9a994e155caae04664","isMergeCommit":false,"messageTitle":"Add javadoc for all public methods and classes","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":454,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"99e139622364073490905ceb3c1c46b329d99701","isMergeCommit":false,"messageTitle":"Add checkstyle plugins and rewrite the code to fix the checkstyle errors","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":55}}}]},{"date":"2023-09-05","commitResults":[{"hash":"f20f15312d9006ca2bfcbb5d5071ee37baec24ae","isMergeCommit":false,"messageTitle":"Add GUI to the chatbot and transform the program into a GUI based application","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":28,"deletions":0},"java":{"insertions":8,"deletions":14}}},{"hash":"3dd61b13d0d892f794fe016d7c19a0510edc81e1","isMergeCommit":false,"messageTitle":"Refactor the code to fit the GUI support","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":22,"deletions":1},"txt":{"insertions":1,"deletions":0},"fxml":{"insertions":29,"deletions":22},"java":{"insertions":207,"deletions":159}}},{"hash":"23f22f49c58169e8dac12208e295a3d0f2801613","isMergeCommit":false,"messageTitle":"Add the ability to take in multiple inputs at one go","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":13,"deletions":10}}},{"hash":"8f5b25baee8d14aaa3d9373e9430e2fb63de289a","isMergeCommit":false,"messageTitle":"Fix some wrapped text issue due to long text output","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"fxml":{"insertions":2,"deletions":2},"java":{"insertions":6,"deletions":3}}}]}]},"authorFileTypeContributionMap":{"Jonyxzx":{"java":1339,"md":2,"fxml":35,"sh":1,"bat":1,"gradle":22,"txt":23}},"authorContributionVariance":{"Jonyxzx":75259.61},"authorDisplayNameMap":{"Jonyxzx":"CS2103T-T11-2 JONY..JONY"}} diff --git a/Jweewee_ip_master/authorship.json b/Jweewee_ip_master/authorship.json index 96887c7c..ce4dcbb1 100644 --- a/Jweewee_ip_master/authorship.json +++ b/Jweewee_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"[T] | [X] | read book","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":"[D] | [X] | return book | June 6th","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":"[E] | [X] | project meeting | Aug 6th 2-4pm","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":"[T] | [X] | join sports club","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":"[E] | [X] | project meeting | Mon 2-4pm","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":"[E] | [X] | project meeting | Mon 2-4pm","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Jweewee":6}},{"path":"src/main/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":"D | 0 | return book | June 6th","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":"E | 0 | project meeting | Aug 6th 2-4pm","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":"T | 1 | join sports club","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Jweewee":4}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":" protected String by;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Jweewee"},"content":" public String toTxtString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Jweewee"},"content":"// return \"D | \" + (this.isDone ? \"1\" : \"0\") + \" | \" + this.description + \" | \" + by;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Jweewee"},"content":" return \"[D] | [\" + (this.isDone ? \"X\": \" \") + \"] | \" + this.description + \" | \" + by;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Jweewee"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Jweewee"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Jweewee"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Jweewee":18}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"import java.io.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":"import java.util.List;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Jweewee"},"content":" * The Duke class represents a simple chatbot application that helps manage tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Jweewee"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"Jweewee"},"content":" private static List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Jweewee"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Jweewee"},"content":" * The main method to start the Duke chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Jweewee"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Jweewee"},"content":" * @param args Command-line arguments (unused).","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Jweewee"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Jweewee"},"content":" Duke wizzer \u003d new Duke();","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Jweewee"},"content":" String logo \u003d \"Wiz\";","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Jweewee"},"content":" String folderPath \u003d \"./data/\";","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Jweewee"},"content":" String filePath \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Jweewee"},"content":" // wizzer.readFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Jweewee"},"content":"// List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Jweewee"},"content":" tasks \u003d readFile(filePath, folderPath);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Jweewee"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Jweewee"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"Hello from \" + logo +","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Jweewee"},"content":" \"\\nWhat can I do for you?\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"--------------------------\");","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Jweewee"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Jweewee"},"content":" String command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Jweewee"},"content":" while (!command.equals(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"--------------------------\");","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Jweewee"},"content":" wizzer.executeCommand(command, filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Jweewee"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Jweewee"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"--------------------------\");","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"Jweewee"},"content":" command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Jweewee"},"content":" scanner.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"--------------------------\");","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Jweewee"},"content":" private static void createDataFolderIfNeeded(String folderPath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Jweewee"},"content":" File dataFolder \u003d new File(folderPath);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Jweewee"},"content":" if (!dataFolder.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Jweewee"},"content":" dataFolder.mkdir();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Jweewee"},"content":" private static void createDataFileIfNeeded(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Jweewee"},"content":" File dataFile \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Jweewee"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Jweewee"},"content":" dataFile.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Jweewee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Jweewee"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Jweewee"},"content":" public static void writeLine(String filePath) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Jweewee"},"content":" File resourceFile \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Jweewee"},"content":" FileWriter writer \u003d new FileWriter(resourceFile);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Jweewee"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Jweewee"},"content":" writer.write(task.toTxtString() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Jweewee"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Jweewee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Jweewee"},"content":" public static List\u003cTask\u003e readFile(String filePath, String folderPath) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Jweewee"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Jweewee"},"content":" File resourceFile \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Jweewee"},"content":" Scanner myReader \u003d new Scanner(resourceFile);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Jweewee"},"content":" int count \u003d -1;","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Jweewee"},"content":" while (myReader.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Jweewee"},"content":" count +\u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Jweewee"},"content":" String data \u003d myReader.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Jweewee"},"content":"// String[] parts \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Jweewee"},"content":"// String taskType \u003d parts[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Jweewee"},"content":"// int isDone \u003d Integer.parseInt(parts[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Jweewee"},"content":"// String description \u003d parts[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Jweewee"},"content":"// String date \u003d parts.length \u003e 3 ? parts[3] : \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"Jweewee"},"content":"// String[] parts \u003d data.split(\"]\\\\[\");","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Jweewee"},"content":"// String isDone \u003d parts[1].substring(0, 1); //\"X\" or \" \"","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Jweewee"},"content":" //[E] | [0] | project meeting | Mon 2-4pm","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Jweewee"},"content":" String[] parts \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Jweewee"},"content":" String taskType \u003d parts[0].substring(1,2);","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Jweewee"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Jweewee"},"content":" String date \u003d parts.length \u003e 3 ? parts[3] : \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Jweewee"},"content":"// String descripNtime[] \u003d parts[1].substring(3).split(\"\\\\(\"); //description to time","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Jweewee"},"content":"// String description1 \u003d descripNtime[0].trim(); // \"project meeting\"","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Jweewee"},"content":"// String[] dates \u003d descripNtime[1].split(\" to: \");","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Jweewee"},"content":"// String start1 \u003d dates[0].substring(6); // \"Mon 2pm\"","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Jweewee"},"content":"// String end1 \u003d dates[1].substring(0, dates[1].length() - 1); //\"4pm\"","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Jweewee"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"Jweewee"},"content":" Task currTask \u003d new ToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Jweewee"},"content":" tasks.add(currTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Jweewee"},"content":" if (parts[1].charAt(1) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Jweewee"},"content":" tasks.get(count).markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Jweewee"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Jweewee"},"content":" String start \u003d date.split(\"-\")[0] + \"pm\";","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Jweewee"},"content":" String end \u003d date.split(\"-\")[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Jweewee"},"content":" Task currTask \u003d new Event(description, start, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Jweewee"},"content":" tasks.add(currTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Jweewee"},"content":" if (parts[1].charAt(1) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Jweewee"},"content":" tasks.get(count).markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"Jweewee"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"Jweewee"},"content":" Task currTask \u003d new Deadline(description, date);","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"Jweewee"},"content":" tasks.add(currTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"Jweewee"},"content":" if (parts[1].charAt(1) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Jweewee"},"content":" tasks.get(count).markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"Jweewee"},"content":" myReader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"Jweewee"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"Jweewee"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"Jweewee"},"content":" createDataFolderIfNeeded(folderPath);","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"Jweewee"},"content":" createDataFileIfNeeded(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"Jweewee"},"content":" writeLine(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"Unable to find file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":138,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"Jweewee"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":140,"author":{"gitId":"Jweewee"},"content":" * Parses and handles the user\u0027s command to perform various tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"Jweewee"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"Jweewee"},"content":" * @param command The user\u0027s command to be processed.","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"Jweewee"},"content":" * @throws DukeException If the command is not recognised, or error","lastModifiedDate":"2023-08-24"},{"lineNumber":144,"author":{"gitId":"Jweewee"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"Jweewee"},"content":" public void executeCommand(String command, String filePath) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"Jweewee"},"content":" String[] separateCommand \u003d command.split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"--------------------------\");","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"--------------------------\");","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"Jweewee"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":150,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"Task List:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":151,"author":{"gitId":"Jweewee"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":152,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" \" + (i + 1) + \". \" + tasks.get(i).toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":154,"author":{"gitId":"Jweewee"},"content":" } else if (command.startsWith(\"mark\") || command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":155,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":156,"author":{"gitId":"Jweewee"},"content":" if (separateCommand.length \u003e 2 || Integer.parseInt(separateCommand[1]) \u003e tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":157,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! Invalid number\");","lastModifiedDate":"2023-08-24"},{"lineNumber":158,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":159,"author":{"gitId":"Jweewee"},"content":" int taskNumber \u003d Integer.parseInt(separateCommand[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"Jweewee"},"content":" if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"Jweewee"},"content":" tasks.get(taskNumber - 1).markAsDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":162,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" Marked as done: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":163,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"Jweewee"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":165,"author":{"gitId":"Jweewee"},"content":" tasks.get(taskNumber - 1).markAsUndone();","lastModifiedDate":"2023-08-24"},{"lineNumber":166,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" Marked as not done yet: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":167,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":168,"author":{"gitId":"Jweewee"},"content":" writeLine(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" \" + tasks.get(taskNumber - 1).toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":170,"author":{"gitId":"Jweewee"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":171,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! Invalid number\");","lastModifiedDate":"2023-08-24"},{"lineNumber":172,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":173,"author":{"gitId":"Jweewee"},"content":" } else if (command.startsWith(\"todo\") || command.startsWith(\"deadline\") || command.startsWith(\"event\")","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"Jweewee"},"content":" || command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"Jweewee"},"content":" if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":176,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":177,"author":{"gitId":"Jweewee"},"content":" String description \u003d command.substring(5);","lastModifiedDate":"2023-08-24"},{"lineNumber":178,"author":{"gitId":"Jweewee"},"content":" if (description.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":179,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":180,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":181,"author":{"gitId":"Jweewee"},"content":" Task currTask \u003d new ToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"Jweewee"},"content":" tasks.add(currTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"Jweewee"},"content":" writeLine(currTask.toTxtString());","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"Jweewee"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":185,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":186,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":187,"author":{"gitId":"Jweewee"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":188,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":189,"author":{"gitId":"Jweewee"},"content":" String[] parts \u003d command.split(\"/by\");","lastModifiedDate":"2023-08-24"},{"lineNumber":190,"author":{"gitId":"Jweewee"},"content":" String description \u003d parts[0].substring(9).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":191,"author":{"gitId":"Jweewee"},"content":" if (description.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":192,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":193,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":194,"author":{"gitId":"Jweewee"},"content":" String byID \u003d parts[1].trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":195,"author":{"gitId":"Jweewee"},"content":" Task currTask \u003d new Deadline(description, byID);","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"Jweewee"},"content":" tasks.add(currTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"Jweewee"},"content":"// writeLine(currTask.toTxtString());","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"Jweewee"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":199,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":200,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":201,"author":{"gitId":"Jweewee"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":202,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":203,"author":{"gitId":"Jweewee"},"content":" String[] parts \u003d command.split(\"/from\");","lastModifiedDate":"2023-08-24"},{"lineNumber":204,"author":{"gitId":"Jweewee"},"content":" String description \u003d parts[0].substring(6).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":205,"author":{"gitId":"Jweewee"},"content":" if (description.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":206,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":207,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":208,"author":{"gitId":"Jweewee"},"content":" String[] timeParts \u003d parts[1].split(\"/to\");","lastModifiedDate":"2023-08-24"},{"lineNumber":209,"author":{"gitId":"Jweewee"},"content":" String start \u003d timeParts[0].trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":210,"author":{"gitId":"Jweewee"},"content":" String end \u003d timeParts[1].trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":211,"author":{"gitId":"Jweewee"},"content":" Task currTask \u003d new Event(description, start, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"Jweewee"},"content":" tasks.add(currTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"Jweewee"},"content":"// writeLine(currTask.toTxtString());","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"Jweewee"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":215,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":216,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":217,"author":{"gitId":"Jweewee"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":218,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":219,"author":{"gitId":"Jweewee"},"content":" if (separateCommand.length \u003e 2 || Integer.parseInt(separateCommand[1]) \u003e tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":220,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! Invalid number\");","lastModifiedDate":"2023-08-24"},{"lineNumber":221,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":222,"author":{"gitId":"Jweewee"},"content":" int taskNumber \u003d Integer.parseInt(separateCommand[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":223,"author":{"gitId":"Jweewee"},"content":" if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":224,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":225,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" \" + tasks.get(taskNumber - 1).toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":226,"author":{"gitId":"Jweewee"},"content":" tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":227,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":228,"author":{"gitId":"Jweewee"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":229,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! Invalid number\");","lastModifiedDate":"2023-08-24"},{"lineNumber":230,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":231,"author":{"gitId":"Jweewee"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":232,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":233,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":234,"author":{"gitId":"Jweewee"},"content":" if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":235,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":236,"author":{"gitId":"Jweewee"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":237,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" I\u0027ve added this task:\" + \"\\n\" + \" \" + tasks.get(tasks.size() - 1).toString()","lastModifiedDate":"2023-08-24"},{"lineNumber":238,"author":{"gitId":"Jweewee"},"content":" + \"\\n\" + \" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":239,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":240,"author":{"gitId":"Jweewee"},"content":" writeLine(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"Jweewee"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":242,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":243,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":244,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":245,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":5,"Jweewee":240}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":" * Custom exception class for Duke chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":" * This exception throws when issue or error.","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Jweewee"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Jweewee"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Jweewee"},"content":" return super.getMessage();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Jweewee"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Jweewee":13}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":" * The Event class represents a task of type \"Event\" inherited from the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":" * It contains a description and a time interval during which the event occurs.","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":" protected String start;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Jweewee"},"content":" protected String end;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Jweewee"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Jweewee"},"content":" * Constructs a new Event task with the provided description and time interval.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Jweewee"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Jweewee"},"content":" * @param description The description of the Event task.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Jweewee"},"content":" * @param start The start time of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Jweewee"},"content":" * @param end The end time of event","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Jweewee"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Jweewee"},"content":" public Event(String description, String start, String end) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Jweewee"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Jweewee"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Jweewee"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Jweewee"},"content":" public String toTxtString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Jweewee"},"content":" String newStart \u003d this.start.split(\"pm\")[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Jweewee"},"content":"// return \"E | \" + (this.isDone ? 1 : 0) + \" | \" + this.description + \" | \" + newStart + \"-\" + end;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Jweewee"},"content":" return \"[E] | [\" + (this.isDone ? \"X\": \" \") + \"] | \" + this.description + \" | \" + newStart + \"-\" + end;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Jweewee"},"content":" //event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Jweewee"},"content":" //","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Jweewee"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Jweewee"},"content":" * Returns a string representation of the Event task","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Jweewee"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Jweewee"},"content":" * @return A formatted string indicated the task type, completion status and time interval","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Jweewee"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Jweewee"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Jweewee"},"content":" return \"[E]\" + super.toString() + \" (from: \" + start + \" to: \" + end + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Jweewee"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Jweewee":38}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Jweewee"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Jweewee"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Jweewee"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Jweewee"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Jweewee"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Jweewee"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Jweewee"},"content":" public String toTxtString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Jweewee"},"content":" return \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Jweewee"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Jweewee"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Jweewee"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Jweewee":24}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"public class ToDo extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":" public String toTxtString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Jweewee"},"content":" return \"[T] | [\" + (this.isDone ? \"X\" : \" \") + \"] | \" + this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Jweewee"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Jweewee"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Jweewee"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Jweewee":15}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":"todo buy bread","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":"deadline return books /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Jweewee"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Jweewee"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Jweewee"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Jweewee"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Jweewee":10}}] +[{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"[T] | [X] | read book","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":"[D] | [X] | return book | June 6th","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":"[E] | [X] | project meeting | Aug 6th 2-4pm","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":"[T] | [X] | join sports club","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":"[E] | [X] | project meeting | Mon 2-4pm","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":"[E] | [X] | project meeting | Mon 2-4pm","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Jweewee":6}},{"path":"src/main/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":"D | 0 | return book | June 6th","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":"E | 0 | project meeting | Aug 6th 2-4pm","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":"T | 1 | join sports club","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Jweewee":4}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":" protected String by;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":" protected LocalDateTime dateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweewee"},"content":" static DateTimeFormatter formatterToTxtString \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Jweewee"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Jweewee"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Jweewee"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Jweewee"},"content":" this.dateTime \u003d getDateTime(by);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweewee"},"content":" public static LocalDateTime getDateTime(String dateTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweewee"},"content":"// String[] datesPart \u003d dateTime.split(\" \"); // 2/12/2019 1800 -\u003e {2/12/2019, 1800} 2019-12-02 1800","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweewee"},"content":"// LocalDate lt \u003d LocalDate.parse(datesPart[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweewee"},"content":"// DateTimeFormatter dateTimeFormatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweewee"},"content":" return LocalDateTime.parse(dateTime, formatterToTxtString);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Jweewee"},"content":" public String toTxtString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Jweewee"},"content":"// return \"D | \" + (this.isDone ? \"1\" : \"0\") + \" | \" + this.description + \" | \" + by;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweewee"},"content":" return \"[D] | [\" + (this.isDone ? \"X\": \" \") + \"] | \" + this.description + \" | \"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweewee"},"content":" + this.dateTime.format(formatterToTxtString);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Jweewee"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Jweewee"},"content":"// return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweewee"},"content":" DateTimeFormatter formatterToString \u003d DateTimeFormatter.ofPattern(\"MM/dd/yyyy HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweewee"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.dateTime.format(formatterToString) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Jweewee"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Jweewee":33}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"import java.io.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":"import java.util.List;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Jweewee"},"content":" * The Duke class represents a simple chatbot application that helps manage tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Jweewee"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"Jweewee"},"content":" private static List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Jweewee"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Jweewee"},"content":" * The main method to start the Duke chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Jweewee"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Jweewee"},"content":" * @param args Command-line arguments (unused).","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Jweewee"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Jweewee"},"content":" Duke wizzer \u003d new Duke();","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Jweewee"},"content":" String logo \u003d \"Wiz\";","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Jweewee"},"content":" String folderPath \u003d \"./data/\";","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Jweewee"},"content":" String filePath \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Jweewee"},"content":" tasks \u003d readFile(filePath, folderPath);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Jweewee"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Jweewee"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"Hello from \" + logo +","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Jweewee"},"content":" \"\\nWhat can I do for you?\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"--------------------------\");","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Jweewee"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Jweewee"},"content":" String command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Jweewee"},"content":" while (!command.equals(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"--------------------------\");","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Jweewee"},"content":" wizzer.executeCommand(command, filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Jweewee"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Jweewee"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"--------------------------\");","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Jweewee"},"content":" command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"Jweewee"},"content":" scanner.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"--------------------------\");","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Jweewee"},"content":" private static void createDataFolderIfNeeded(String folderPath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Jweewee"},"content":" File dataFolder \u003d new File(folderPath);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Jweewee"},"content":" if (!dataFolder.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Jweewee"},"content":" dataFolder.mkdir();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Jweewee"},"content":" private static void createDataFileIfNeeded(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Jweewee"},"content":" File dataFile \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Jweewee"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Jweewee"},"content":" dataFile.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Jweewee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Jweewee"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Jweewee"},"content":" public static void writeLine(String filePath) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Jweewee"},"content":" File resourceFile \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Jweewee"},"content":" FileWriter writer \u003d new FileWriter(resourceFile);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Jweewee"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Jweewee"},"content":" writer.write(task.toTxtString() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Jweewee"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Jweewee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"Jweewee"},"content":" public static List\u003cTask\u003e readFile(String filePath, String folderPath) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Jweewee"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Jweewee"},"content":" File resourceFile \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Jweewee"},"content":" Scanner myReader \u003d new Scanner(resourceFile);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Jweewee"},"content":" int count \u003d -1;","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Jweewee"},"content":" while (myReader.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Jweewee"},"content":" count +\u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Jweewee"},"content":" String data \u003d myReader.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Jweewee"},"content":" String[] parts \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Jweewee"},"content":" String taskType \u003d parts[0].substring(1,2);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Jweewee"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Jweewee"},"content":" String date \u003d parts.length \u003e 3 ? parts[3] : \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Jweewee"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Jweewee"},"content":" Task currTask \u003d new ToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Jweewee"},"content":" tasks.add(currTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Jweewee"},"content":" if (parts[1].charAt(1) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Jweewee"},"content":" tasks.get(count).markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Jweewee"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Jweewee"},"content":" String start \u003d date.split(\"-\")[0] + \"pm\";","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Jweewee"},"content":" String end \u003d date.split(\"-\")[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Jweewee"},"content":" Task currTask \u003d new Event(description, start, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Jweewee"},"content":" tasks.add(currTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Jweewee"},"content":" if (parts[1].charAt(1) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Jweewee"},"content":" tasks.get(count).markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Jweewee"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Jweewee"},"content":" Task currTask \u003d new Deadline(description, date);","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Jweewee"},"content":" tasks.add(currTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Jweewee"},"content":" if (parts[1].charAt(1) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"Jweewee"},"content":" tasks.get(count).markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Jweewee"},"content":" myReader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Jweewee"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Jweewee"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Jweewee"},"content":" createDataFolderIfNeeded(folderPath);","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Jweewee"},"content":" createDataFileIfNeeded(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Jweewee"},"content":" writeLine(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"Unable to find file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"Jweewee"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"Jweewee"},"content":" * Parses and handles the user\u0027s command to perform various tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"Jweewee"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"Jweewee"},"content":" * @param command The user\u0027s command to be processed.","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"Jweewee"},"content":" * @throws DukeException If the command is not recognised, or error","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"Jweewee"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"Jweewee"},"content":" public void executeCommand(String command, String filePath) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"Jweewee"},"content":" String[] separateCommand \u003d command.split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"--------------------------\");","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"--------------------------\");","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"Jweewee"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"Jweewee"},"content":" System.out.println(\"Task List:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"Jweewee"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" \" + (i + 1) + \". \" + tasks.get(i).toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"Jweewee"},"content":" } else if (command.startsWith(\"mark\") || command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":138,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":139,"author":{"gitId":"Jweewee"},"content":" if (separateCommand.length \u003e 2 || Integer.parseInt(separateCommand[1]) \u003e tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":140,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! Invalid number\");","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"Jweewee"},"content":" int taskNumber \u003d Integer.parseInt(separateCommand[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"Jweewee"},"content":" if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":144,"author":{"gitId":"Jweewee"},"content":" tasks.get(taskNumber - 1).markAsDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" Marked as done: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"Jweewee"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"Jweewee"},"content":" tasks.get(taskNumber - 1).markAsUndone();","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" Marked as not done yet: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":150,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":151,"author":{"gitId":"Jweewee"},"content":" writeLine(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" \" + tasks.get(taskNumber - 1).toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"Jweewee"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":154,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! Invalid number\");","lastModifiedDate":"2023-08-24"},{"lineNumber":155,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":156,"author":{"gitId":"Jweewee"},"content":" } else if (command.startsWith(\"todo\") || command.startsWith(\"deadline\") || command.startsWith(\"event\")","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"Jweewee"},"content":" || command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"Jweewee"},"content":" if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":159,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"Jweewee"},"content":" String description \u003d command.substring(5);","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"Jweewee"},"content":" if (description.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":162,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":163,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":164,"author":{"gitId":"Jweewee"},"content":" Task currTask \u003d new ToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"Jweewee"},"content":" tasks.add(currTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"Jweewee"},"content":" writeLine(currTask.toTxtString());","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"Jweewee"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":168,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":169,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":170,"author":{"gitId":"Jweewee"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":171,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":172,"author":{"gitId":"Jweewee"},"content":" String[] parts \u003d command.split(\"/by\"); // 2/12/2019 1800","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"Jweewee"},"content":" String description \u003d parts[0].substring(9).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":174,"author":{"gitId":"Jweewee"},"content":" if (description.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":175,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":176,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":177,"author":{"gitId":"Jweewee"},"content":" String byID \u003d parts[1].trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":178,"author":{"gitId":"Jweewee"},"content":" Task currTask \u003d new Deadline(description, byID);","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"Jweewee"},"content":" tasks.add(currTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"Jweewee"},"content":"// writeLine(currTask.toTxtString());","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"Jweewee"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":182,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":183,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":184,"author":{"gitId":"Jweewee"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":185,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":186,"author":{"gitId":"Jweewee"},"content":" String[] parts \u003d command.split(\"/from\");","lastModifiedDate":"2023-08-24"},{"lineNumber":187,"author":{"gitId":"Jweewee"},"content":" String description \u003d parts[0].substring(6).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":188,"author":{"gitId":"Jweewee"},"content":" if (description.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":189,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":190,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":191,"author":{"gitId":"Jweewee"},"content":" String[] timeParts \u003d parts[1].split(\"/to\");","lastModifiedDate":"2023-08-24"},{"lineNumber":192,"author":{"gitId":"Jweewee"},"content":" String start \u003d timeParts[0].trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":193,"author":{"gitId":"Jweewee"},"content":" String end \u003d timeParts[1].trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":194,"author":{"gitId":"Jweewee"},"content":" Task currTask \u003d new Event(description, start, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"Jweewee"},"content":" tasks.add(currTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"Jweewee"},"content":"// writeLine(currTask.toTxtString());","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"Jweewee"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":198,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":199,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":200,"author":{"gitId":"Jweewee"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":201,"author":{"gitId":"Jweewee"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":202,"author":{"gitId":"Jweewee"},"content":" if (separateCommand.length \u003e 2 || Integer.parseInt(separateCommand[1]) \u003e tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":203,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! Invalid number\");","lastModifiedDate":"2023-08-24"},{"lineNumber":204,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":205,"author":{"gitId":"Jweewee"},"content":" int taskNumber \u003d Integer.parseInt(separateCommand[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":206,"author":{"gitId":"Jweewee"},"content":" if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":207,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":208,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" \" + tasks.get(taskNumber - 1).toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":209,"author":{"gitId":"Jweewee"},"content":" tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":210,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":211,"author":{"gitId":"Jweewee"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":212,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! Invalid number\");","lastModifiedDate":"2023-08-24"},{"lineNumber":213,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":214,"author":{"gitId":"Jweewee"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":215,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":216,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":217,"author":{"gitId":"Jweewee"},"content":" if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":218,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":219,"author":{"gitId":"Jweewee"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":220,"author":{"gitId":"Jweewee"},"content":" System.out.println(\" I\u0027ve added this task:\" + \"\\n\" + \" \" + tasks.get(tasks.size() - 1).toString()","lastModifiedDate":"2023-08-24"},{"lineNumber":221,"author":{"gitId":"Jweewee"},"content":" + \"\\n\" + \" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":222,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":223,"author":{"gitId":"Jweewee"},"content":" writeLine(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"Jweewee"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":225,"author":{"gitId":"Jweewee"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":226,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":227,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":228,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":5,"Jweewee":223}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":" * Custom exception class for Duke chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":" * This exception throws when issue or error.","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Jweewee"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Jweewee"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Jweewee"},"content":" return super.getMessage();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Jweewee"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Jweewee":13}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":" * The Event class represents a task of type \"Event\" inherited from the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":" * It contains a description and a time interval during which the event occurs.","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":" protected String start;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Jweewee"},"content":" protected String end;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Jweewee"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Jweewee"},"content":" * Constructs a new Event task with the provided description and time interval.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Jweewee"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Jweewee"},"content":" * @param description The description of the Event task.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Jweewee"},"content":" * @param start The start time of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Jweewee"},"content":" * @param end The end time of event","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Jweewee"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Jweewee"},"content":" public Event(String description, String start, String end) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Jweewee"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Jweewee"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Jweewee"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Jweewee"},"content":" public String toTxtString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Jweewee"},"content":" String newStart \u003d this.start.split(\"pm\")[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Jweewee"},"content":"// return \"E | \" + (this.isDone ? 1 : 0) + \" | \" + this.description + \" | \" + newStart + \"-\" + end;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Jweewee"},"content":" return \"[E] | [\" + (this.isDone ? \"X\": \" \") + \"] | \" + this.description + \" | \" + newStart + \"-\" + end;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Jweewee"},"content":" //event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Jweewee"},"content":" //","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Jweewee"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Jweewee"},"content":" * Returns a string representation of the Event task","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Jweewee"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Jweewee"},"content":" * @return A formatted string indicated the task type, completion status and time interval","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Jweewee"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Jweewee"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Jweewee"},"content":" return \"[E]\" + super.toString() + \" (from: \" + start + \" to: \" + end + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Jweewee"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Jweewee":38}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Jweewee"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Jweewee"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Jweewee"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Jweewee"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Jweewee"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Jweewee"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Jweewee"},"content":" public String toTxtString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Jweewee"},"content":" return \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Jweewee"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Jweewee"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Jweewee"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Jweewee":24}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"public class ToDo extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":" public String toTxtString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Jweewee"},"content":" return \"[T] | [\" + (this.isDone ? \"X\" : \" \") + \"] | \" + this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Jweewee"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Jweewee"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Jweewee"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Jweewee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Jweewee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Jweewee"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Jweewee":15}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jweewee"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Jweewee"},"content":"todo buy bread","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Jweewee"},"content":"deadline return books /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Jweewee"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Jweewee"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Jweewee"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Jweewee"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Jweewee"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Jweewee"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Jweewee"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Jweewee":10}}] diff --git a/Jweewee_ip_master/commits.json b/Jweewee_ip_master/commits.json index 909647ad..33f9030a 100644 --- a/Jweewee_ip_master/commits.json +++ b/Jweewee_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Jweewee":[{"date":"2023-08-24","commitResults":[{"hash":"10338ed7d8f56fefb4d6ef8ab754810284170582","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"60bf400d0065a3c6f26d876b7fc8e92672013b2f","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":5}}},{"hash":"a701ac4c84894800d75c5140ca072e4e51e26af6","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":1}}},{"hash":"20cbe4e4696035c0d38d78163ef32f6bd5a3b3ab","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":26}}},{"hash":"8e29567a5d9266534e32d13278bd1d9554ddbfd1","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"bf4278a1c9ae494278bc3a73b9df61eaeaa23d6c","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":2}}},{"hash":"b0f8bd392094b2555fb1f8c5e6bf63f3a2345f41","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"8ca9d5ae558f30a1342e7ed506fb24e36b75a918","isMergeCommit":false,"messageTitle":"Level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":25}}},{"hash":"b696ad54d97757d89be6b1d21ee2bcde78dcf356","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"fee3f45bcf079179f491920236384225ef5f041a","isMergeCommit":false,"messageTitle":"Doc","messageBody":"","tags":["Docs"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"4831d9e9a0e5a80677b3e59bd91821191d15665e","isMergeCommit":false,"messageTitle":"Corrected code for delete function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":3}}}]},{"date":"2023-08-31","commitResults":[{"hash":"33d63ef4f563fab2d9fc56234a692f333390377e","isMergeCommit":false,"messageTitle":"branch-level-7 commit","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":119,"deletions":12}}},{"hash":"a858e79c9b30e60eedcf8335758da06b41f28cb8","isMergeCommit":true,"messageTitle":"Merge branch-Level-7 to local Master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f7270faf7a385c88ded856d5f8862e00695cdbd6","isMergeCommit":false,"messageTitle":"branch-level-7 commit","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":26,"deletions":4}}},{"hash":"d8205248f7c1323ea015a1b42abe278da44c3f0e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 no 2","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Jweewee":{"java":348,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":20}},"authorContributionVariance":{"Jweewee":9575.803},"authorDisplayNameMap":{"Jweewee":"CS2103T-W16-2 JOSH..G-EN"}} +{"authorDailyContributionsMap":{"Jweewee":[{"date":"2023-08-24","commitResults":[{"hash":"10338ed7d8f56fefb4d6ef8ab754810284170582","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"60bf400d0065a3c6f26d876b7fc8e92672013b2f","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":5}}},{"hash":"a701ac4c84894800d75c5140ca072e4e51e26af6","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":1}}},{"hash":"20cbe4e4696035c0d38d78163ef32f6bd5a3b3ab","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":26}}},{"hash":"8e29567a5d9266534e32d13278bd1d9554ddbfd1","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"bf4278a1c9ae494278bc3a73b9df61eaeaa23d6c","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":2}}},{"hash":"b0f8bd392094b2555fb1f8c5e6bf63f3a2345f41","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"8ca9d5ae558f30a1342e7ed506fb24e36b75a918","isMergeCommit":false,"messageTitle":"Level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":25}}},{"hash":"b696ad54d97757d89be6b1d21ee2bcde78dcf356","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"fee3f45bcf079179f491920236384225ef5f041a","isMergeCommit":false,"messageTitle":"Doc","messageBody":"","tags":["Docs"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"4831d9e9a0e5a80677b3e59bd91821191d15665e","isMergeCommit":false,"messageTitle":"Corrected code for delete function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":3}}}]},{"date":"2023-08-31","commitResults":[{"hash":"33d63ef4f563fab2d9fc56234a692f333390377e","isMergeCommit":false,"messageTitle":"branch-level-7 commit","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":119,"deletions":12}}},{"hash":"a858e79c9b30e60eedcf8335758da06b41f28cb8","isMergeCommit":true,"messageTitle":"Merge branch-Level-7 to local Master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f7270faf7a385c88ded856d5f8862e00695cdbd6","isMergeCommit":false,"messageTitle":"branch-level-7 commit","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":26,"deletions":4}}},{"hash":"d8205248f7c1323ea015a1b42abe278da44c3f0e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 no 2","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"99cfd65525e77228be981a920a8b7de8f57fbe3e","isMergeCommit":false,"messageTitle":"branch-level-8 commit","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":23}}},{"hash":"0dc2c421216504a4066c53781dc44fb6f88f47a6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Jweewee":{"java":346,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":20}},"authorContributionVariance":{"Jweewee":7306.7705},"authorDisplayNameMap":{"Jweewee":"CS2103T-W16-2 JOSH..G-EN"}} diff --git a/Kokseng1_ip_master/authorship.json b/Kokseng1_ip_master/authorship.json index cca4164e..90830bcd 100644 --- a/Kokseng1_ip_master/authorship.json +++ b/Kokseng1_ip_master/authorship.json @@ -1 +1 @@ -[{"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 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.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * main program, responsible for running everything and connecting components together","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" * types of task","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" BYE,","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" LIST,","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" MARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" UNMARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" DELETE,","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" EVENT,","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" TODO,","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" DEADLINE","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * keeps reading commands and responding accordingly, until command is \"bye\"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" public static void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" Ui.printGreeting();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" String inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" TaskType taskType \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" while (taskType !\u003d TaskType.BYE) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" taskType \u003d Parser.parseType(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" taskList.updateFromStorage(); //load tasks from hard drive if it is available, into taskList","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" case LIST: {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" taskList.printList();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" case MARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getMarkIndex(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" taskList.markTask(tasknum);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" case UNMARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getUnmarkIndex(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" taskList.unmarkTask(tasknum);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" case TODO:","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" case EVENT:","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Parser.parseTask(inputString, taskType);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" taskList.addTask(nextTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" case DELETE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" taskList.deleteTask(Parser.getDeleteIndex(inputString));","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"I can\u0027t identify your command!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" taskList.saveList();","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" taskType \u003d Parser.parseType(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" Ui.print(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" } catch (TaskParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" Ui.print(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" Duke.run();","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":90,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Kokseng1":87,"-":3}},{"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":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"Kokseng1"},"content":" throw new TaskParseException(\"Not a TaskType\");","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":125}},{"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 ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" * constructor","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" public TaskList() {","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":" * saves current tasks to hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" public void saveList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" Storage.saveTask(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * loads tasks from hard drive into tasks, prints a message if there","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * are no tasks found","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" public void updateFromStorage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" tasks \u003d Storage.loadTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"No tasks found in storage, starting new list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" * prints the list of task in their string format,","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" * each task starts on a new line","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if there are no tasks in the list","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" public void printList() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks yet\");","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" Ui.print((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-04"},{"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":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" * add a task to the current list","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" * @param task task to be added","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Got it. I\u0027ve added this task: \\n\" + task + \"\\nnow you have \"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","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":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" * deletes a task from the list","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task which is to be deleted","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if index is out of range or there are no tasks to delete","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" public void deleteTask(int i) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003c\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks to delete\");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" } else if (tasks.size() \u003c i) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task.Task index out of range\");","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" Task deleted \u003d tasks.remove(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Noted. I\u0027ve removed this task:\\n\" + deleted + \"\\nNow you have \"","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","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":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" * marks a task at an index as done","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task to be marked as done","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is already done","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" public void markTask(int i) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" tasks.get(i).mark();","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":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" * unmarks task at an index as undone","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task which is to be marked undone","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is still undone","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" public void unmarkTask(int i) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" tasks.get(i).unmark();","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":98}},{"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.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" * responsible for printing messages and recieving commands","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * scanner to read input","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" private static final Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * read and returns command","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" * @return String of user input","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" public static String readCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * prints a message to the user","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * @param message String message to be printed","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" public static void print(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * greeting to be printed at start of program","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" public static void printGreeting() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" String name \u003d \"Chaty\";","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Hello! I\u0027m \" + name + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" + \"What can I do for you?\" + \"\\n\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":39}},{"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.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task, a supertype of Event, Deadline and Todo","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * \u003ccode\u003eisDone\u003c/code\u003e shows whether the task is completed","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" * name of task","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" private final String description;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" * whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" * constructor, should not be used because this is an abstract class. For initialising description","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" * and isDone only","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * @param description name of task","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" public Task(boolean done, String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d done;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * getter for boolean isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" * @return boolean isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" public boolean getisDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" return this.isDone;","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":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" * getter for descriptions","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" * @return","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" return this.description;","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":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * marks the task as done, if it is undone","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is already done","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" public void mark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task already done\");","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Nice! I\u0027ve marked this task as done:\\n\" + toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" * unmarks the task as undone, if it is done","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is still undone","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" public void unmark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task still undone\");","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"OK, I\u0027ve marked this task as not done yet:\\n\" + toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" * get String representation of whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" * @return \u003ccode\u003e\"X\"\u003c/code\u003e for done, \" \" for undone","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" * String representation of task, including whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" * @return string representation of task","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" return (\"[\" + this.getStatusIcon() + \"] \" + this.description);","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" * converts hard drive\u0027s String format of a task into an actual task item","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" * @param text String from hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" * @return task item","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if string cannot be recognised and cannot be parsed into a task","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" public static Task parse(String text) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" String[] parts \u003d text.split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" String first \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" boolean done \u003d parts[1].equals(\"1\"); // 1 \u003d done, 0 \u003d undone","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" switch (first) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Todo(done, \"todo \" + description);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Event(done, \"event \" + description + \" /from \" + from + \" /to \" + to);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Deadline(done, \"deadline \" + description + \" /by \" + by);","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Unable to parse from hard drive\");","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":118}},{"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":"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":"-"},"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":"Kokseng1"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-05"},{"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":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"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":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Kokseng1":4,"-":41}},{"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 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.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * main program, responsible for running everything and connecting components together","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" * types of task","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" BYE,","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" LIST,","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" MARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" UNMARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" DELETE,","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" EVENT,","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" TODO,","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" DEADLINE","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * keeps reading commands and responding accordingly, until command is \"bye\"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" public static void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" Ui.printGreeting();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" String inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" TaskType taskType \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" while (taskType !\u003d TaskType.BYE) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" taskType \u003d Parser.parseType(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" taskList.updateFromStorage(); //load tasks from hard drive if it is available, into taskList","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" case LIST: {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" taskList.printList();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" case MARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getMarkIndex(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" taskList.markTask(tasknum);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" case UNMARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getUnmarkIndex(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" taskList.unmarkTask(tasknum);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" case TODO:","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" case EVENT:","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Parser.parseTask(inputString, taskType);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" taskList.addTask(nextTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" case DELETE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" taskList.deleteTask(Parser.getDeleteIndex(inputString));","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"I can\u0027t identify your command!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" taskList.saveList();","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" taskType \u003d Parser.parseType(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" Ui.print(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" } catch (TaskParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" Ui.print(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" Duke.run();","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":90,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Kokseng1":87,"-":3}},{"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 duke.exceptions.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.TaskParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"public class DukeTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" public void parseTypeTest() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" Duke.TaskType result \u003d Parser.parseType(\"Todo make\");","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" assertEquals(Duke.TaskType.TODO, result);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" } catch (TaskParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","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":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" public void parseTaskTest() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" Task expected \u003d new Deadline(false, \"deadline return book /by 2019-12-02\");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" Task result \u003d Parser.parseTask(\"deadline return book /by 2019-12-02\", Duke.TaskType.DEADLINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" assertEquals(expected.toString(), result.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","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":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" public void markTasFromTaskListTest(){","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" Task expected \u003d new Todo(true, \"todo mark\");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" list.addTask(new Todo(false, \"todo mark\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" list.markTask(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" Task result \u003d list.getTask(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" assertEquals(result.toString(), expected.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kokseng1":53}},{"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":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"Kokseng1"},"content":" throw new TaskParseException(\"Not a TaskType\");","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":125}},{"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 ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" * constructor","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" public TaskList() {","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":" * saves current tasks to hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" public void saveList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" Storage.saveTask(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * loads tasks from hard drive into tasks, prints a message if there","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * are no tasks found","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" public void updateFromStorage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" tasks \u003d Storage.loadTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"No tasks found in storage, starting new list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" * prints the list of task in their string format,","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" * each task starts on a new line","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if there are no tasks in the list","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" public void printList() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks yet\");","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" Ui.print((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-04"},{"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":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" * add a task to the current list","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" * @param task task to be added","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Got it. I\u0027ve added this task: \\n\" + task + \"\\nnow you have \"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","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":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" * deletes a task from the list","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task which is to be deleted","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if index is out of range or there are no tasks to delete","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" public void deleteTask(int i) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003c\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks to delete\");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" } else if (tasks.size() \u003c i) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task.Task index out of range\");","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" Task deleted \u003d tasks.remove(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Noted. I\u0027ve removed this task:\\n\" + deleted + \"\\nNow you have \"","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","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":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" * marks a task at an index as done","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task to be marked as done","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is already done","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" public void markTask(int i) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" tasks.get(i).mark();","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":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" * unmarks task at an index as undone","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task which is to be marked undone","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is still undone","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" public void unmarkTask(int i) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" tasks.get(i).unmark();","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" * getter for task from list","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task to be gotten","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" * @return task at index i","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" public Task getTask(int i) {","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" return tasks.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":107}},{"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.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" * responsible for printing messages and recieving commands","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * scanner to read input","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" private static final Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * read and returns command","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" * @return String of user input","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" public static String readCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * prints a message to the user","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * @param message String message to be printed","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" public static void print(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * greeting to be printed at start of program","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" public static void printGreeting() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" String name \u003d \"Chaty\";","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Hello! I\u0027m \" + name + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" + \"What can I do for you?\" + \"\\n\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":39}},{"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.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task, a supertype of Event, Deadline and Todo","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * \u003ccode\u003eisDone\u003c/code\u003e shows whether the task is completed","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" * name of task","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" private final String description;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" * whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" * constructor, should not be used because this is an abstract class. For initialising description","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" * and isDone only","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * @param description name of task","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" public Task(boolean done, String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d done;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * getter for boolean isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" * @return boolean isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" public boolean getisDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" return this.isDone;","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":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" * getter for descriptions","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" * @return","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" return this.description;","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":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * marks the task as done, if it is undone","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is already done","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" public void mark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task already done\");","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Nice! I\u0027ve marked this task as done:\\n\" + toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" * unmarks the task as undone, if it is done","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is still undone","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" public void unmark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task still undone\");","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"OK, I\u0027ve marked this task as not done yet:\\n\" + toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" * get String representation of whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" * @return \u003ccode\u003e\"X\"\u003c/code\u003e for done, \" \" for undone","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" * String representation of task, including whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" * @return string representation of task","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" return (\"[\" + this.getStatusIcon() + \"] \" + this.description);","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" * converts hard drive\u0027s String format of a task into an actual task item","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" * @param text String from hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" * @return task item","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if string cannot be recognised and cannot be parsed into a task","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" public static Task parse(String text) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" String[] parts \u003d text.split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" String first \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" boolean done \u003d parts[1].equals(\"1\"); // 1 \u003d done, 0 \u003d undone","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" switch (first) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Todo(done, \"todo \" + description);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Event(done, \"event \" + description + \" /from \" + from + \" /to \" + to);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Deadline(done, \"deadline \" + description + \" /by \" + by);","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Unable to parse from hard drive\");","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":118}},{"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":"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 2ca3882f..8096e51a 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}}}]}]},"authorFileTypeContributionMap":{"Kokseng1":{"java":755,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":0,"txt":15}},"authorContributionVariance":{"Kokseng1":32186.459},"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-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1},"java":{"insertions":62,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"Kokseng1":{"java":817,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":4,"txt":15}},"authorContributionVariance":{"Kokseng1":30626.846},"authorDisplayNameMap":{"Kokseng1":"CS2103T-W13-1 NG K..SENG"}} diff --git a/LHeng1_ip_master/authorship.json b/LHeng1_ip_master/authorship.json index ca9b8c26..39960dad 100644 --- a/LHeng1_ip_master/authorship.json +++ b/LHeng1_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Avalon.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"import java.util.List;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"public class Avalon {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" Task[] tasks \u003d new Task[100];","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" int taskCount \u003d 0;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" //greet","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" System.out.println(","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" \" Hello! I\u0027m Arthur Pendragon.\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" );","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":" //exit","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":" if (userInput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" System.out.println(","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":" \" Farewell. We will meet again!\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" );","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"LHeng1"},"content":" //display list","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"LHeng1"},"content":" if (taskCount \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"LHeng1"},"content":" System.out.println(","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"LHeng1"},"content":" \" You haven\u0027t added anything, my sire.\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"LHeng1"},"content":" );","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"LHeng1"},"content":" \" Here are the tasks in your list:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"LHeng1"},"content":" for (int i \u003d 0; i \u003c taskCount; i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" \" + (i + 1) + \".\" + tasks[i]);","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"LHeng1"},"content":" //mark task","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"mark \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"LHeng1"},"content":" int taskIndex \u003d Integer.parseInt(userInput.substring(5)) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"LHeng1"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c taskCount) {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"LHeng1"},"content":" tasks[taskIndex].markDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"LHeng1"},"content":" \" Nice! I\u0027ve marked this task as done:\\n \" + \" \" +","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"LHeng1"},"content":" tasks[taskIndex].getStatusIcon() + \" \" +","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"LHeng1"},"content":" tasks[taskIndex].description +","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"LHeng1"},"content":" \"\\n ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Invalid task number to be marked.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"LHeng1"},"content":" //unmark task","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"unmark \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"LHeng1"},"content":" int taskIndex \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"LHeng1"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c taskCount) {","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"LHeng1"},"content":" tasks[taskIndex].markNotDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"LHeng1"},"content":" \" Nice! I\u0027ve marked this task as not done yet:\\n \" + \" \" +","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"LHeng1"},"content":" tasks[taskIndex].getStatusIcon() + \" \" +","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"LHeng1"},"content":" tasks[taskIndex].description +","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"LHeng1"},"content":" \"\\n ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Invalid task number to be unmarked.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"LHeng1"},"content":" //create activity","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"todo \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"LHeng1"},"content":" String description \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"LHeng1"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"LHeng1"},"content":" tasks[taskCount] \u003d new ToDo(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"LHeng1"},"content":" taskCount++;","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"LHeng1"},"content":" \" Got it. I\u0027ve added this task:\\n \" + \" \" + tasks[taskCount - 1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"deadline \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"LHeng1"},"content":" String[] parts \u003d userInput.substring(9).split(\" /by \");","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"LHeng1"},"content":" if (parts.length !\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Please provide a description and a deadline (use /by).\");","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"LHeng1"},"content":" String description \u003d parts[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"LHeng1"},"content":" String by \u003d parts[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"LHeng1"},"content":" tasks[taskCount] \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"LHeng1"},"content":" taskCount++;","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"LHeng1"},"content":" \" Got it. I\u0027ve added this task:\\n \" + \" \" + tasks[taskCount - 1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"event \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"LHeng1"},"content":" String[] parts \u003d userInput.substring(6).split(\" /from | /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"LHeng1"},"content":" if (parts.length !\u003d 3) {","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Please provide a description, a starting time, and an ending time (use /from and /to).\");","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"LHeng1"},"content":" String description \u003d parts[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"LHeng1"},"content":" String from \u003d parts[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"LHeng1"},"content":" String to \u003d parts[2];","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"LHeng1"},"content":" tasks[taskCount] \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"LHeng1"},"content":" taskCount++;","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"LHeng1"},"content":" \" Got it. I\u0027ve added this task:\\n \" + \" \" + tasks[taskCount - 1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"delete \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"LHeng1"},"content":" int taskIndex \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"LHeng1"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c taskCount) {","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"LHeng1"},"content":" Task deletedTask \u003d tasks[taskIndex];","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"LHeng1"},"content":" for (int i \u003d taskIndex; i \u003c taskCount - 1; i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"LHeng1"},"content":" tasks[i] \u003d tasks[i + 1];","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"LHeng1"},"content":" taskCount--;","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" \" + deletedTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Invalid task number to be deleted.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"LHeng1"},"content":" } catch(IllegalArgumentException e){","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"LHeng1"},"content":" System.out.println(\"☹ OOPS!!! \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"LHeng1"},"content":" scanner.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":136}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":" protected String by;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":13}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":15}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":" enum TaskType {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" return (isDone ? \"[X] \" : \"[ ] \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"LHeng1"},"content":" return getStatusIcon() + \" \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":30}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":10}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":"mark 5","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":"todo ","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":"deadline ","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":"event ","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":"ajhsf","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":"mark 8","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":"unmark 6","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":"delete 12","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":20}},{"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":"LHeng1"},"content":"java -classpath ..\\bin Avalon \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"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":{"LHeng1":1,"-":20}}] +[{"path":"src/main/data/Avalon.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"LHeng1":1}},{"path":"src/main/java/Avalon.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"import java.io.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"import java.util.List;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":"public class Avalon {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" List\u003cTask\u003e tasks \u003d loadTasks();","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" int taskCount \u003d tasks.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" //greet","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" System.out.println(","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" \" Hello! I\u0027m Arthur Pendragon.\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" );","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":" //exit","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":" if (userInput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" System.out.println(","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"LHeng1"},"content":" \" Farewell. We will meet again!\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"LHeng1"},"content":" );","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"LHeng1"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"LHeng1"},"content":" //display list","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"LHeng1"},"content":" if (taskCount \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"LHeng1"},"content":" System.out.println(","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"LHeng1"},"content":" \" You haven\u0027t added anything, my sire.\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"LHeng1"},"content":" );","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"LHeng1"},"content":" \" Here are the quests in thy list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"LHeng1"},"content":" for (int i \u003d 0; i \u003c taskCount; i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" \" + (i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"LHeng1"},"content":" //mark task","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"mark \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"LHeng1"},"content":" int taskIndex \u003d Integer.parseInt(userInput.substring(5)) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"LHeng1"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c taskCount) {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).markDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"LHeng1"},"content":" \" Very well. I have marked this task as accomplished:\\n \" + \" \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).getStatusIcon() + \" \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).description +","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"LHeng1"},"content":" \"\\n ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Invalid task number to be marked.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"LHeng1"},"content":" //unmark task","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"unmark \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"LHeng1"},"content":" int taskIndex \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"LHeng1"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c taskCount) {","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).markNotDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"LHeng1"},"content":" \" By the heavens! I have declared this task as yet to be completed:\\n \" + \" \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).getStatusIcon() + \" \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).description +","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"LHeng1"},"content":" \"\\n ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Invalid task number to be unmarked.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"LHeng1"},"content":" //create activity","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"todo \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"LHeng1"},"content":" String description \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"LHeng1"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"LHeng1"},"content":" ToDo todo \u003d new ToDo(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"LHeng1"},"content":" tasks.add(todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"LHeng1"},"content":" taskCount++;","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"LHeng1"},"content":" \" Understood. I have included this quest:\\n \" + \" \" + tasks.get(taskCount - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"deadline \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"LHeng1"},"content":" String[] parts \u003d userInput.substring(9).split(\" /by \");","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"LHeng1"},"content":" if (parts.length !\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Please provide a description and a deadline (use /by).\");","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"LHeng1"},"content":" String description \u003d parts[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"LHeng1"},"content":" String by \u003d parts[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"LHeng1"},"content":" Deadline deadline \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"LHeng1"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"LHeng1"},"content":" taskCount++;","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"LHeng1"},"content":" \" Understood. I have included this quest:\\n \" + \" \" + tasks.get(taskCount - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"event \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"LHeng1"},"content":" String[] parts \u003d userInput.substring(6).split(\" /from | /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"LHeng1"},"content":" if (parts.length !\u003d 3) {","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Please provide a description, a starting time, and an ending time (use /from and /to).\");","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"LHeng1"},"content":" String description \u003d parts[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"LHeng1"},"content":" String from \u003d parts[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"LHeng1"},"content":" String to \u003d parts[2];","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"LHeng1"},"content":" Event event \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"LHeng1"},"content":" tasks.add(event);","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"LHeng1"},"content":" taskCount++;","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"LHeng1"},"content":" \" Understood. I have included this quest:\\n \" + \" \" + tasks.get(taskCount - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"delete \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"LHeng1"},"content":" int taskIndex \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"LHeng1"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c taskCount) {","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"LHeng1"},"content":" Task deletedTask \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"LHeng1"},"content":" tasks.remove(taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"LHeng1"},"content":" taskCount--;","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Noted. I\u0027ve removed this quest:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" \" + deletedTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Invalid task number to be deleted.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":138,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":139,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"I humbly apologize, but thy words remain a mystery to me...\");","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"LHeng1"},"content":" } catch(IllegalArgumentException e){","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"LHeng1"},"content":" System.out.println(\"☹ OOPS!!! \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":144,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"LHeng1"},"content":" scanner.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"LHeng1"},"content":" saveTasks(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"LHeng1"},"content":" private static List\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"LHeng1"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"LHeng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"LHeng1"},"content":" File file \u003d new File(\"src/main/data/Avalon.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"LHeng1"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"LHeng1"},"content":" System.out.println(\"Loading...\");","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"LHeng1"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"LHeng1"},"content":" String description \u003d scanner.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"LHeng1"},"content":" Task task \u003d TaskParser.parse(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"LHeng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"LHeng1"},"content":" scanner.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"LHeng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"LHeng1"},"content":" // Handle the case where the file doesn\u0027t exist or other IO errors","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"LHeng1"},"content":" System.out.println(\"No existing tasks file found. Starting with an empty list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"LHeng1"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"LHeng1"},"content":" private static void saveTasks(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"LHeng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"LHeng1"},"content":" FileWriter writer \u003d new FileWriter(\"src/main/data/Avalon.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"LHeng1"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"LHeng1"},"content":" String taskData \u003d TaskParser.serialize(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"LHeng1"},"content":" writer.write(taskData + \"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"LHeng1"},"content":" writer.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"LHeng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"LHeng1"},"content":" System.out.println(\"An error occurred while saving tasks to the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":183,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":183}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":" protected String by;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":13}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":15}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":" enum TaskType {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" return (isDone ? \"[X] \" : \"[ ] \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"LHeng1"},"content":" return getStatusIcon() + \" \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":30}},{"path":"src/main/java/TaskParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class TaskParser {","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":" public static Task parse(String line) {","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" task \u003d new ToDo(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" task \u003d new Deadline(description, parts[3]);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" task \u003d new Event(description, parts[3], parts[4]);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":" if (isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" task.markDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" return task;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" // Serialize a Task object to a string for saving to the file","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":" public static String serialize(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"LHeng1"},"content":" String doneStatus \u003d task.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"LHeng1"},"content":" if (task instanceof ToDo) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"LHeng1"},"content":" return \"T | \" + doneStatus + \" | \" + task.description;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"LHeng1"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"LHeng1"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"LHeng1"},"content":" return \"D | \" + doneStatus + \" | \" + task.description + \" | \" + deadline.by;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"LHeng1"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"LHeng1"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"LHeng1"},"content":" return \"E | \" + doneStatus + \" | \" + task.description + \" | \" + event.from + \" | \" + event.to;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"LHeng1"},"content":" return \"Wrong formatting\";","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"LHeng1":42}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":10}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":"mark 5","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":"todo ","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":"deadline ","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":"event ","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":"ajhsf","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":"mark 8","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":"unmark 6","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":"delete 12","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":20}},{"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":"LHeng1"},"content":"java -classpath ..\\bin Avalon \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"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":{"LHeng1":1,"-":20}}] diff --git a/LHeng1_ip_master/commits.json b/LHeng1_ip_master/commits.json index 5add280f..155e9082 100644 --- a/LHeng1_ip_master/commits.json +++ b/LHeng1_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"LHeng1":[{"date":"2023-08-24","commitResults":[{"hash":"5dbae6174ddeb44f5987f86ffb2273381f88f17d","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"5d6c6b56f73e4dbdd4f92152790fd5958aec4f49","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":6}}},{"hash":"1b477e50bee2570b76826c73f99542c3e06ad7df","isMergeCommit":false,"messageTitle":"Level-2-Add-List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":17}}},{"hash":"c9c78f57fc153628d3c139391943fb46ae95a027","isMergeCommit":false,"messageTitle":"Level-3-MarkAsDone","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":6}}},{"hash":"ab578116d973c6e835f761eb989a7bfbd99377d9","isMergeCommit":false,"messageTitle":"Level-4-ToDo-Event-Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":12}}},{"hash":"f999a9101158881d9580c6de4ce3c7e3d52c4608","isMergeCommit":false,"messageTitle":"TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"437f0fbb55eeb56a270aca0ce9e5c2da5845a751","isMergeCommit":false,"messageTitle":"Level-5-HandleErrors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":1},"java":{"insertions":89,"deletions":81}}},{"hash":"c088aacc692ad5a8e341fa627ec21a4e74e20e34","isMergeCommit":false,"messageTitle":"Level-6-Delete-WO-Collections","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":20,"deletions":2}}},{"hash":"0c1126ae57cfb47941d41fa41a85b61dc6269326","isMergeCommit":false,"messageTitle":"A-Enums-UseEnums-Changeable","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"9f21b1d20b08e1b35a3ff6d82b608238207bc5a1","isMergeCommit":false,"messageTitle":"Change of Directory","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":0,"deletions":0},"bat":{"insertions":0,"deletions":0},"sh":{"insertions":0,"deletions":0},"md":{"insertions":0,"deletions":0}}},{"hash":"56afa711f1d397af2e51ddf47384222053d5a240","isMergeCommit":false,"messageTitle":"Change of directory","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":0,"deletions":0},"bat":{"insertions":0,"deletions":0},"sh":{"insertions":0,"deletions":0},"md":{"insertions":0,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"LHeng1":{"java":204,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":20}},"authorContributionVariance":{"LHeng1":17946.773},"authorDisplayNameMap":{"LHeng1":"CS2103T-W10-1 LIM ..G YI"}} +{"authorDailyContributionsMap":{"LHeng1":[{"date":"2023-08-24","commitResults":[{"hash":"5dbae6174ddeb44f5987f86ffb2273381f88f17d","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"5d6c6b56f73e4dbdd4f92152790fd5958aec4f49","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":6}}},{"hash":"1b477e50bee2570b76826c73f99542c3e06ad7df","isMergeCommit":false,"messageTitle":"Level-2-Add-List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":17}}},{"hash":"c9c78f57fc153628d3c139391943fb46ae95a027","isMergeCommit":false,"messageTitle":"Level-3-MarkAsDone","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":6}}},{"hash":"ab578116d973c6e835f761eb989a7bfbd99377d9","isMergeCommit":false,"messageTitle":"Level-4-ToDo-Event-Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":12}}},{"hash":"f999a9101158881d9580c6de4ce3c7e3d52c4608","isMergeCommit":false,"messageTitle":"TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"437f0fbb55eeb56a270aca0ce9e5c2da5845a751","isMergeCommit":false,"messageTitle":"Level-5-HandleErrors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":1},"java":{"insertions":89,"deletions":81}}},{"hash":"c088aacc692ad5a8e341fa627ec21a4e74e20e34","isMergeCommit":false,"messageTitle":"Level-6-Delete-WO-Collections","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":20,"deletions":2}}},{"hash":"0c1126ae57cfb47941d41fa41a85b61dc6269326","isMergeCommit":false,"messageTitle":"A-Enums-UseEnums-Changeable","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"9f21b1d20b08e1b35a3ff6d82b608238207bc5a1","isMergeCommit":false,"messageTitle":"Change of Directory","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":0,"deletions":0},"bat":{"insertions":0,"deletions":0},"sh":{"insertions":0,"deletions":0},"md":{"insertions":0,"deletions":0}}},{"hash":"56afa711f1d397af2e51ddf47384222053d5a240","isMergeCommit":false,"messageTitle":"Change of directory","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":0,"deletions":0},"bat":{"insertions":0,"deletions":0},"sh":{"insertions":0,"deletions":0},"md":{"insertions":0,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"fb8801fc28e421d40b69ad1ffda3f410ab97f350","isMergeCommit":false,"messageTitle":"Add save function \u0026 optimize collections","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":113,"deletions":24}}},{"hash":"0da5567b3cf697955368c70f9953040e0da11460","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"LHeng1":{"java":293,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":21}},"authorContributionVariance":{"LHeng1":11421.012},"authorDisplayNameMap":{"LHeng1":"CS2103T-W10-1 LIM ..G YI"}} diff --git a/Leb14_ip_master/authorship.json b/Leb14_ip_master/authorship.json index 6439acbd..0363b386 100644 --- a/Leb14_ip_master/authorship.json +++ b/Leb14_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"java {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" sourceCompatibility \u003d JavaVersion.VERSION_11","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" targetCompatibility \u003d JavaVersion.VERSION_11","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"-":42,"Leb14":6}},{"path":"data/TaskList.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"T | 0 | add","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"D | 0 | sleep | 23 Aug 2023 7:00PM","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"T | 0 | sleep later","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"T | 0 | read book","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"T | 1 | read and sleep","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"E | 1 | sleep again | 23 Aug 2023 9:00AM | 29 Sep 2023 3:00PM","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Leb14":6}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" * Duke class is a simple chatbot that allows users","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" * to mark down their tasks.It allows users to add,","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" * list, and manage tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" private FileHandler fileHandler; //FileHandler to read or write file.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" private TaskList task; // The list of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" private Ui ui; //The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" private static final String DATA_FILE_PATH \u003d \"data/TaskList.txt\"; //The file path of the .txt file","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * Construct a Duke instance with the specified file path.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" * @param filePath The file path to store task data.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" this.fileHandler \u003d new FileHandler(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" this.task \u003d new TaskList(FileHandler.readTasksFromFile());","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" this.ui \u003d new Ui(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" * Runs the Duke application.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * It displays a welcome message and processes user commands","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" * until the \u0027bye\u0027 command is received to terminate the program.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" c.execute(task, ui, fileHandler);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" // Handle the specific exception here","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" * The main for the Duke application.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" * Create a Duke instance to run.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" * @param args (not used in this application).","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":" new Duke(DATA_FILE_PATH).run();","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":59,"-":4}},{"path":"src/main/java/Parser/DateTime.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":" * The `DateTime` class provides methods for parsing and formatting date and time strings.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"public class DateTime {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" private DateTimeFormatter inputFormatter; //The input format of the date and time.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" private DateTimeFormatter outputFormatter; //The output format of the date and time.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" * Constructs a `DateTime` object with a date and time formatters.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" public DateTime() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" this.inputFormatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" this.outputFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * Formats a date and time string from the input format to the output format.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" * @param dateTimeStr The date and time string to be formatted.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" * @return The formatted date and time string in the output format or \"Invalid format\" if parsing fails.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" public String formatDateTime(String dateTimeStr) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(dateTimeStr, inputFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" return dateTime.format(outputFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" return \"Invalid format\";","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":37}},{"path":"src/main/java/Parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import command.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import command.AddDeadlineCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import command.AddEventCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import command.AddTodoCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"import command.ByeCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"import command.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"import command.EmptyCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"import command.ErrorCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"import command.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"import command.MiscCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"import command.UnmarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"import command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" * The `Parser` class is responsible for parsing user input commands into executable commands.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * Parses the user input string and returns the corresponding command object.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" * @param str The user input string to be parsed.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" * @return A command object representing the parsed command.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" public static Command parse (String str) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" if (str.isEmpty()) { //empty command","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" return new EmptyCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" } else if (str.startsWith(\"todo\")) { //todo command","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" String[] split \u003d str.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" if (split.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" return new AddTodoCommand(str.substring(split[0].length()).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" System.out.println(\"Hey! I think you forget to enter the todo description or leave a space after the command!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" return new ErrorCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" } else if (str.startsWith(\"deadline\")) { // deadline command","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" String[] split \u003d str.split(\"/by\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" if (str.equals(\"deadline\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please enter the task description or leave a space after the command!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" } else if (split.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please provide a deadline for your task in this format dd/MM/yyyy HHmm!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" DateTime dateTime \u003d new DateTime();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" String formattedDate \u003d dateTime.formatDateTime(split[1].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" String taskDesc \u003d split[0].trim().substring(8).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" if (formattedDate.equals(\"Invalid format\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please provide a deadline for your task in this format dd/MM/yyyy HHmm!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":" return new AddDeadlineCommand(taskDesc, formattedDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":" return new ErrorCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":" } else if (str.startsWith(\"event\")) { // event command","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" if (str.equals(\"event\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please enter the event description or leave a space after the command!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" String[] split_1 \u003d str.split(\"/from\");","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" if (split_1.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please provide a time range for your event in this format /from dd/MM/yyyy HHmm /to HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":" String[] split_2 \u003d split_1[1].split(\"/to\");","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":" if (split_2.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please provide an end time for your event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Leb14"},"content":" DateTime dateTime \u003d new DateTime();","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Leb14"},"content":" String formattedStartTime \u003d dateTime.formatDateTime(split_2[0].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Leb14"},"content":" String formattedEndTime \u003d dateTime.formatDateTime(split_2[1].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Leb14"},"content":" String taskDesc \u003d split_1[0].trim().substring(5).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Leb14"},"content":" if (formattedStartTime.equals(\"Invalid format\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please provide a time range for your event in this format /from dd/MM/yyyy HHmm /to dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Leb14"},"content":" if (formattedEndTime.equals(\"Invalid format\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please provide an end time for your event in this format dd/MM/yyyy HHmm!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Leb14"},"content":" return new AddEventCommand(taskDesc, formattedStartTime, formattedEndTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Leb14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Leb14"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Leb14"},"content":" return new ErrorCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Leb14"},"content":" } else if (str.equals(\"list\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Leb14"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Leb14"},"content":" } else if (str.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Leb14"},"content":" int index \u003d Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Leb14"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Leb14"},"content":" } else if (str.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Leb14"},"content":" int index \u003d Integer.parseInt(str.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Leb14"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Leb14"},"content":" } else if (str.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Leb14"},"content":" int index \u003d Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Leb14"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Leb14"},"content":" } else if (str.equals(\"bye\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Leb14"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Leb14"},"content":" } else if (str.startsWith(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Leb14"},"content":" String[] split \u003d str.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Leb14"},"content":" if (split.length \u003c 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please provide a keyword\");","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Leb14"},"content":" return new FindCommand(split[1].trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Leb14"},"content":" }else {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Leb14"},"content":" return new MiscCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":128}},{"path":"src/main/java/Storage/FileHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"import taskmanager.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"import taskmanager.Events;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":"import taskmanager.ToDos;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"import taskmanager.Deadlines;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * The `FileHandler` class handles reading tasks from and writing tasks to a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":"public class FileHandler {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" private static String filePath; // The file path to the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" * Constructs a `FileHandler` with the specified file path.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" * @param filePath The path to the .txt file where tasks will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" public FileHandler(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" * Reads tasks from the .txt file and returns them as a list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" * @return An ArrayList containing the tasks read from the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" public static ArrayList\u003cTasks\u003e readTasksFromFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTasks\u003e task \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" String folderPath \u003d \"data\";","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" Files.createDirectories(Paths.get(folderPath));","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" System.out.println(\"Failed to create the directory: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" Path path \u003d Paths.get(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" Files.createFile(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" System.out.println(\"Failed to create the file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" FileReader reader \u003d new FileReader(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":" Scanner scanner \u003d new Scanner(reader);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":" boolean contentCheck \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" if (!contentCheck) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" } else if (line.startsWith(\"T\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" String[] split \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":" if (split.length \u003e 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" throw new IndexOutOfBoundsException(\"There is an error in your Todos content format!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":" } if (split.length \u003c 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" throw new IndexOutOfBoundsException(\"There is missing info for your Todos content in the file!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":" ToDos newtodo \u003d new ToDos(split[2], split[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":" task.add(newtodo);","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":" contentCheck \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Leb14"},"content":" } else if (line.startsWith(\"D\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Leb14"},"content":" String[] split \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Leb14"},"content":" if (split.length \u003e 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Leb14"},"content":" throw new IndexOutOfBoundsException(\"There is an error in your Deadlines content format!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Leb14"},"content":" } if (split.length \u003c 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Leb14"},"content":" throw new IndexOutOfBoundsException(\"There is missing info for your Deadlines content in the file!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Leb14"},"content":" Deadlines newdeadline \u003d new Deadlines(split[1], split[2], split[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Leb14"},"content":" task.add(newdeadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Leb14"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Leb14"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Leb14"},"content":" contentCheck \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Leb14"},"content":" } else if (line.startsWith(\"E\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Leb14"},"content":" String[] split \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Leb14"},"content":" if (split.length \u003e 5) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Leb14"},"content":" throw new IndexOutOfBoundsException(\"There is an error in your Events content format!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Leb14"},"content":" } if (split.length \u003c 5) {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Leb14"},"content":" throw new IndexOutOfBoundsException(\"There is missing info for your Events content in the file!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Leb14"},"content":" Events newevent \u003d new Events(split[1], split[2], split[3], split[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Leb14"},"content":" task.add(newevent);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"Leb14"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Leb14"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Leb14"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Leb14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Leb14"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Leb14"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Leb14"},"content":" * Writes tasks to the specified file.","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Leb14"},"content":" * @param tasks The TaskList containing the tasks to be written.","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Leb14"},"content":" public static void writeTasksToFile(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Leb14"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Leb14"},"content":" for (Tasks t : tasks.getAllTasks()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Leb14"},"content":" writer.write(t.toFileString() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"Leb14"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"Leb14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"Leb14"},"content":" System.out.println(\"File don\u0027t exist!!!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":137}},{"path":"src/main/java/Storage/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import taskmanager.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":" * The `TaskList` class behave like an ArrayList","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * to store a list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" private ArrayList\u003cTasks\u003e task; //The array list to store all the tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" * Constructs a `TaskList` with the specified list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" * @param task The ArrayList containing tasks to initialize the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" public TaskList(ArrayList\u003cTasks\u003e task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" this.task \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" * Adds task to task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" * @param t The task to be added to the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" public void add(Tasks t) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" task.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" * Returns the number of tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" public int size() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" return this.task.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" * Checks if the task list is empty.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" * @return True if the task list is empty; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" return this.task.isEmpty();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" * Removes a task at the specified index from the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" * @param i The index of the task to be removed.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":" public void remove(int i) {this.task.remove(i);}","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" * Returns the ArrayList of tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":" * @return The ArrayList of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":" public ArrayList\u003cTasks\u003e getAllTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" return this.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":" * Retrieves a task at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" * @return The task at the index.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" public Tasks get(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":" return this.task.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":" * Compares this `TaskList` to another `TaskList` for equality.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Leb14"},"content":" * @param other The `TaskList` to compare to this one.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Leb14"},"content":" * @return True if the `TaskList` objects are equal; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Leb14"},"content":" public boolean taskListEqual(TaskList other) {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Leb14"},"content":" if (task.size() !\u003d other.task.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Leb14"},"content":" for (int i \u003d 0; i \u003c task.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Leb14"},"content":" if (!task.get(i).equals(other.task.get(i))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Leb14"},"content":" public void display() {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Leb14"},"content":" for (int i \u003d 0 ; i \u003c task.size(); i ++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Leb14"},"content":" int j \u003d i + 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + j + \". \" + task.get(i).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Leb14"},"content":" * Match the taskDesc with keyword for query.","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Leb14"},"content":" * @param str The keyword for matching.","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Leb14"},"content":" * @return A tasklist containing all the task that passed the matching.","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Leb14"},"content":" public TaskList findKeyword(String str) {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Leb14"},"content":" TaskList matchedList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Leb14"},"content":" System.out.println(\"here\");","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Leb14"},"content":" for (int i \u003d 0; i \u003c task.size(); i ++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Leb14"},"content":" if (this.task.get(i).isMatch(str)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Leb14"},"content":" matchedList.add(this.task.get(i));","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Leb14"},"content":" return matchedList;","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":127}},{"path":"src/main/java/TaskManager/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package taskmanager;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"public class Deadlines extends Tasks {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":" private String taskDesc; //task description","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" private String dueDateStr; // due date in String","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" private LocalDateTime dueDate; // due date in LocalDateTime","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" private static final DateTimeFormatter DATE_TIME_FORMATTER \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" * Constructs a new Event task with the specified description, completion status, and date-time information.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" * @param dueDateStr The due date and time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" public Deadlines(String taskDesc, String dueDateStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" this.dueDateStr \u003d dueDateStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" this.dueDate \u003d LocalDateTime.parse(dueDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" * Constructs a new Event task with the specified description, completion status, and date-time information.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" * @param completion The completion status (1 for done, 0 for not done).","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * @param dueDateStr The due date and time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" public Deadlines(String completion, String taskDesc, String dueDateStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" if (completion.equals(\"1\")){","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" this.dueDateStr \u003d dueDateStr.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" this.dueDate \u003d LocalDateTime.parse(dueDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" this.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" this.dueDateStr \u003d dueDateStr.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" this.dueDate \u003d LocalDateTime.parse(dueDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" System.out.println(\"Hey! There is an invalid todo task in the task list!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" * Checks if the Deadlines task is valid.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" * @return True if the task is valid (not null); otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" public boolean isValid() {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" return taskDesc !\u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" * Returns a string format of the Deadlines task that can be written to the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":" * @return A string format of the Deadlines task to store it into the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" String x;","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":" x \u003d \"1\";","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":" x \u003d \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" String str1 \u003d String.format(\"%s\", x);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":" return \"D | \" + str1 + \" | \" + this.taskDesc + \" | \" + this.dueDateStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":" * Generates a string representation of the Deadlines task.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Leb14"},"content":" * @return A formatted string representation for displaying to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Leb14"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Leb14"},"content":" String x;","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Leb14"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Leb14"},"content":" x \u003d \"X\";","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Leb14"},"content":" x \u003d \" \";","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Leb14"},"content":" String str1 \u003d String.format(\"[%s] \", x);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Leb14"},"content":" String str2 \u003d String.format(\" (by: %s)\", this.dueDateStr);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Leb14"},"content":" return \"[D]\" + str1 + this.taskDesc + str2 ;","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Leb14"},"content":" * Compares this Deadlines task to another object for equality.","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Leb14"},"content":" * @param o The object for comparison.","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Leb14"},"content":" * @return True if the objects are equal; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Leb14"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Leb14"},"content":" Deadlines deadlines \u003d (Deadlines) o;","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Leb14"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Leb14"},"content":" } else if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Leb14"},"content":" } else if (!taskDesc.equals(deadlines.taskDesc)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Leb14"},"content":" return dueDateStr.equals(deadlines.dueDateStr);","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Leb14"},"content":" * Match the taskDesc with keyword for query.","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Leb14"},"content":" * @param keyword The keyword for matching.","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Leb14"},"content":" * @return True if there is matching keyword; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Leb14"},"content":" public boolean isMatch(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Leb14"},"content":" String[] split \u003d taskDesc.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Leb14"},"content":" for(int i \u003d 0; i \u003c split.length; i ++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Leb14"},"content":" if (keyword.equals(split[i])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":139}},{"path":"src/main/java/TaskManager/Events.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package taskmanager;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"public class Events extends Tasks {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":" private String taskDesc; //task description","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" private String fromDateStr; //start date and time in String","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" private String toDateStr; //end date and time in String","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" private LocalDateTime fromDate; //start date and time in LocalDateTime","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" private LocalDateTime toDate; // end date and time in LocalDateTime","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" private static final DateTimeFormatter DATE_TIME_FORMATTER \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" * Constructs a new Event task with the specified user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * @param fromDateStr The starting date and time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" * @param toDateStr The ending date and time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" public Events(String taskDesc, String fromDateStr, String toDateStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" this.fromDateStr \u003d fromDateStr;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" this.toDateStr \u003d toDateStr;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" this.fromDate \u003d LocalDateTime.parse(fromDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" this.toDate \u003d LocalDateTime.parse(toDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * Constructs a new Event task with the specified description, completion status, and date-time information.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * @param completion The completion status (1 for done, 0 for not done).","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" * @param fromDateStr The starting date and time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" * @param toDateStr The ending date and time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" public Events(String completion, String taskDesc, String fromDateStr, String toDateStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" if (completion.equals(\"1\")){","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" this.fromDateStr \u003d fromDateStr.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" this.toDateStr \u003d toDateStr.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" this.fromDate \u003d LocalDateTime.parse(fromDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" this.toDate \u003d LocalDateTime.parse(toDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" this.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" this.fromDateStr \u003d fromDateStr.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" this.toDateStr \u003d toDateStr.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" this.fromDate \u003d LocalDateTime.parse(fromDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" this.toDate \u003d LocalDateTime.parse(toDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" System.out.println(\"Hey! There is an invalid todo task in the task list!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" * Checks if the Events task is valid.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":" * @return True if the task is valid (not null); otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":" public boolean isValid() {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" return taskDesc !\u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":" * Returns a string format of the Events task that can be written to the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":" * @return A string format of the Events task to store it into the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":" String x;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":" x \u003d \"1\";","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":" x \u003d \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Leb14"},"content":" String str1 \u003d String.format(\"%s\", x);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Leb14"},"content":" return \"E | \" + str1 + \" | \" + this.taskDesc + \" | \" + this.fromDateStr + \" | \" + this.toDateStr;","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Leb14"},"content":" * Generates a string representation of the Events task.","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Leb14"},"content":" * @return A formatted string representation for displaying to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Leb14"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Leb14"},"content":" String x;","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Leb14"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Leb14"},"content":" x \u003d \"X\";","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Leb14"},"content":" x \u003d \" \";","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Leb14"},"content":" String str1 \u003d String.format(\"[%s] \", x);","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Leb14"},"content":" String str2 \u003d String.format(\" (from: %s to: %s)\", this.fromDateStr, this.toDateStr);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Leb14"},"content":" return \"[E]\" + str1 + this.taskDesc + str2;","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Leb14"},"content":" * Compares this Events task to another object for equality.","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Leb14"},"content":" * @param o The object for comparison.","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Leb14"},"content":" * @return True if the objects are equal; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Leb14"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Leb14"},"content":" Events events \u003d (Events) o;","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Leb14"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Leb14"},"content":" } else if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Leb14"},"content":" } else if (!taskDesc.equals(events.taskDesc)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Leb14"},"content":" } else if (!fromDateStr.equals(events.fromDateStr)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Leb14"},"content":" } else{","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Leb14"},"content":" return toDateStr.equals(events.toDateStr);","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Leb14"},"content":" * Match the taskDesc with keyword for query.","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Leb14"},"content":" * @param keyword The keyword for matching.","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Leb14"},"content":" * @return True if there is matching keyword; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Leb14"},"content":" public boolean isMatch(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Leb14"},"content":" String[] split \u003d taskDesc.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Leb14"},"content":" for(int i \u003d 0; i \u003c split.length; i ++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Leb14"},"content":" if (keyword.equals(split[i])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":150}},{"path":"src/main/java/TaskManager/Tasks.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package taskmanager;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":" * Abstract class for few types of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"public abstract class Tasks {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":" protected boolean isDone; //completion status of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" private static int count \u003d 0; //keep track of the number of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" * Returns a string format of the task that can be written to the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" * @return A string format of the task to store it into the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" public abstract String toFileString();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * Constructs a task with an initial status of not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" public Tasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" public void markDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" * Match the keyword to task description for query.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" public abstract boolean isMatch(String keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":45}},{"path":"src/main/java/TaskManager/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package taskmanager;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":" * The tasks of type \"To-Do.\"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"public class ToDos extends Tasks {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" private String taskDesc;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" * Constructs a new To-Do task with the specified user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The description of the to-do task.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" public ToDos(String taskDesc) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * Constructs a new To-Do task with the specified description and completion status.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The description of the to-do task.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" * @param completion The completion status (1 for done, 0 for not done).","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" public ToDos(String taskDesc, String completion) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" if (completion.equals(\"1\")){","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" this.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" System.out.println(\"Hey! There is an invalid todo task in the task list!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" * Checks if the To-Do task is valid.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" * @return True if the task is valid (not null); otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" public boolean isValid() {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" return taskDesc !\u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" * Returns a string format of the To-Do task that can be written to the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" * @return A string format of the To-Do task to store it into the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" String x;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":" x \u003d \"1\";","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":" x \u003d \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":" String str1 \u003d String.format(\"%s\", x);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":" return \"T | \" + str1 + \" | \" + this.taskDesc;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" * Generates a string representation of the To-Do task.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" * @return A formatted string representation for displaying to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" String x;","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" x \u003d \"X\";","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":" x \u003d \" \";","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":" String str1 \u003d String.format(\"[%s] \", x);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":" return \"[T]\" + str1 + this.taskDesc;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Leb14"},"content":" * Compares this To-Do task to another object for equality.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Leb14"},"content":" * @param o The object for comparison.","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Leb14"},"content":" * @return True if the objects are equal; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Leb14"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Leb14"},"content":" ToDos toDos \u003d (ToDos) o;","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Leb14"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Leb14"},"content":" } else if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Leb14"},"content":" return taskDesc.equals(toDos.taskDesc);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Leb14"},"content":" * Match the taskDesc with keyword for query.","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Leb14"},"content":" * @param keyword The keyword for matching.","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Leb14"},"content":" * @return True if there is matching keyword; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Leb14"},"content":" public boolean isMatch(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Leb14"},"content":" String[] split \u003d taskDesc.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Leb14"},"content":" for(int i \u003d 0; i \u003c split.length; i ++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Leb14"},"content":" if (keyword.equals(split[i])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":118}},{"path":"src/main/java/Ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"import taskmanager.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import taskmanager.Events;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"import taskmanager.ToDos;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"import taskmanager.Deadlines;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" * The Ui class handles user interaction and displays messages to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" * It provides methods for input and output.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" private final String NAME \u003d \"Yours\"; // The name of the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" private TaskList taskList; // The list of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" private String word; //The singular or plural form of \"task\".","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * Constructs an Ui instance with a reference to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" * @param taskList The task list used for displaying tasks\u0027 information.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" public Ui (TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" if (taskList.size() \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" this.word \u003d \"task\";","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" this.word \u003d \"tasks\";","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" * Displays a welcome message.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" String logo \u003d \"____ ____ ________ ___ ___ __________ _____\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" + \"\\\\ \\\\ / / | ____ | | | | | | _____ | / ____|\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" + \" \\\\ \\\\/ / | | | | | | | | | |___| | | (___\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" + \" \\\\ / | | | | | | | | | ______| \\\\ ___ \\\\\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" + \" | | | | | | | | | | | \\\\ \\\\ | |\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" + \" | | | |____| | | | | | | | \\\\ \\\\ ____) |\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" + \" |____| |________| \\\\_________/ |__| \\\\__\\\\ |_____/\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" System.out.printf(\"Hello! I\u0027m %s%n\", NAME);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" System.out.println(logo);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" System.out.println(\"____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" * Reads a command entered by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" * @return The user\u0027s input command as a string.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":" String command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":" return command;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":" * A prompt message when a new to-do task is added to the tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" * @param newTodo The newly added ToDos task.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":" public void addedTodo(ToDos newTodo) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Help you added a new to-do.\\n \" + newTodo.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" System.out.println(\" Now you have \" + taskList.size() + String.format(\" %s in the list.\", word));","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":" * A prompt message when a new Deadlines task is added to the tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":" * @param newDeadLine The newly added Deadlines task.","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":" public void addedDeadlines(Deadlines newDeadLine) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Help you added a new deadline.\\n \" + newDeadLine.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Leb14"},"content":" System.out.println(\" Now you have \" + taskList.size() + String.format(\" %s in the list.\", word));","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Leb14"},"content":" * A prompt message when a new Events task is added to the tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Leb14"},"content":" * @param newEvent The newly added Events task.","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Leb14"},"content":" public void addedEvent(Events newEvent) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Help you added a new deadline.\\n \" + newEvent.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Leb14"},"content":" System.out.println(\" Now you have \" + taskList.size() + String.format(\" %s in the list.\", word));","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Leb14"},"content":" * Display all the task in the tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Leb14"},"content":" public void list() {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Here are the tasks in your list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Leb14"},"content":" taskList.display();","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Leb14"},"content":" * Display all the task that match the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Leb14"},"content":" * @param matchedList The list of task that matched the keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Leb14"},"content":" public void find(TaskList matchedList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Leb14"},"content":" if (matchedList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": There is no task matched with the given keyword!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Here are the tasks that matches your keyword.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Leb14"},"content":" matchedList.display();","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Leb14"},"content":" * A prompt message when a task is deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Leb14"},"content":" * @param deleted The deleted task.","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Leb14"},"content":" public void delete(Tasks deleted) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Helped you deleted this task\\n \" + deleted.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Leb14"},"content":" System.out.println(\" Now you have \" + taskList.size() + String.format(\" %s in the list.\", word));","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Leb14"},"content":" * A prompt message when a task is marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Leb14"},"content":" * @param index The index of the task marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Leb14"},"content":" public void mark(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Well done! I\u0027ve marked this task as done :\");","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + taskList.get(index - 1).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Leb14"},"content":" * A prompt message when a task is marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"Leb14"},"content":" * @param index The index of the task marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Leb14"},"content":" public void unmark(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Alright, I\u0027ve marked this task as not done yet\");","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + taskList.get(index - 1).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"Leb14"},"content":" * A goodbye message when the application exits.","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"Leb14"},"content":" public void bye() {","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"Leb14"},"content":" * A prompt message when the user enters an empty command.","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"Leb14"},"content":" public void empty() {","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Please enter something!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"Leb14"},"content":" * A prompt message when the user enters invalid command.","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"Leb14"},"content":" public void misc() {","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": I don\u0027t really understand what you mean.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"Leb14"},"content":" * Displays a message for handling an IndexOutOfBoundsException.","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"Leb14"},"content":" public void ioobExceptionMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"Leb14"},"content":" System.out.println(\"Please enter the correct task\u0027s index number.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":198}},{"path":"src/main/java/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import taskmanager.Deadlines;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" * Command to add a Deadlines task.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"public class AddDeadlineCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" private String taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" private String dueDateStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" * Constructs an `AddDeadlineCommand` object with the specified user input and due date string.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" * @param dueDateStr The due date and time in string.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" public AddDeadlineCommand(String taskDesc, String dueDateStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" this.dueDateStr \u003d dueDateStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" * Executes the command to add a Deadlines task to the task list, update the storage, and notify the user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" * @param task The task list to which the Deadlines task will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" * @param f The file handler for storing tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList task, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" Deadlines newdeadlines \u003d new Deadlines(taskDesc, dueDateStr);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" if (newdeadlines.isValid()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" task.add(newdeadlines);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" FileHandler.writeTasksToFile(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" ui.addedDeadlines(newdeadlines);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":54}},{"path":"src/main/java/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import taskmanager.Events;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" * Command to add an Events task.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"public class AddEventCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" private String taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" private String to;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" private String from;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" * Constructs an `AddEventCommand` object with the specified user input and due date string.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * @param from The start date and time in string.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * @param to The end date and time in string.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" public AddEventCommand(String taskDesc, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * Executes the command to add an Events task to the task list, update the storage, and notify the user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" * @param task The task list to which the Events task will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" * @param f The file handler for storing tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList task, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" Events newEvent \u003d new Events(taskDesc, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" if (newEvent.isValid()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" task.add(newEvent);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" FileHandler.writeTasksToFile(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" ui.addedEvent(newEvent);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":63}},{"path":"src/main/java/command/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import taskmanager.ToDos;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" * Command to add a ToDos task.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"public class AddTodoCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" private String taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" * Constructs an `AddTodoCommand` object with the specified user input and due date string.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" public AddTodoCommand(String taskDesc) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" * Executes the command to add a ToDos task to the task list, update the storage, and notify the user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" * @param task The task list to which the ToDos task will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" * @param f The file handler for storing tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList task, Ui ui, FileHandler f) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" ToDos newtodo \u003d new ToDos(taskDesc);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" if (newtodo.isValid()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" task.add(newtodo);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" f.writeTasksToFile(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" ui.addedTodo(newtodo);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":52}},{"path":"src/main/java/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * A command to exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class ByeCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" * Constructs a `ByeCommand` object.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" public ByeCommand(){","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * Executes the command to exit the application and displays a farewell message.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * @param task The task list (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" * @param f The file handler for storing tasks (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList task, Ui ui, FileHandler f) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" ui.bye();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * @return `true` because this command exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":40}},{"path":"src/main/java/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * Abstract class for few types of command that","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" * can be executed in the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" * Executes the command with the provided task list, user interface, and file handler.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" * @param t The task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" * @param f The file handler for storing tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" public abstract void execute(TaskList t, Ui ui, FileHandler f);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":30}},{"path":"src/main/java/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import taskmanager.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" * A command to delete a task from the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"public class DeleteCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" * Constructs a `DeleteCommand` object with the provided index.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" * Executes the command to delete a task from the task list and updates the file storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" * @param t The task list from which the task will be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" * @param f The file handler for storing tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" Tasks deleted \u003d t.get(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" t.remove(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" FileHandler.writeTasksToFile(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" ui.delete(deleted);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" ui.ioobExceptionMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":54}},{"path":"src/main/java/command/EmptyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * An empty command.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class EmptyCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" * Constructs an `EmptyCommand` object.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" public EmptyCommand(){","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * Executes the empty command and displays a message to ask user for input.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * @param t The task list (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" * @param f The file handler (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" ui.empty();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":40}},{"path":"src/main/java/command/ErrorCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * An error command.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class ErrorCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" * Constructs an `ErrorCommand` object.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" public ErrorCommand(){","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * Executes the error command","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * @param t The task list (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface. (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" * @param f The file handler (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":40}},{"path":"src/main/java/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * A find command to query task with a keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class FindCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" String keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" * Constructs an `FindCommand` object.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" public FindCommand(String keyword){","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * Executes the find command.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" * @param t The list of the task to match.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" * @param f The file handler (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" ui.find(t.findKeyword(keyword));","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Leb14":43}},{"path":"src/main/java/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * A command to list the tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class ListCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" * Constructs a `ListCommand` object.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" public ListCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * Executes the list command, which displays all the tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * @param t The task list to retrieve tasks from.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface to display the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" * @param f The file handler (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" ui.list();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":40}},{"path":"src/main/java/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * A command to mark a task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class MarkCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" * Constructs a `MarkCommand` object with the specified task index.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" * @param index The index of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" * Mark the specified task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" * @param t The task list containing the tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface to display the result.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" * @param f The file handler (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" t.get(index - 1).markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" FileHandler.writeTasksToFile(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" ui.mark(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" ui.ioobExceptionMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":51}},{"path":"src/main/java/command/MiscCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * Represents a miscellaneous command.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class MiscCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" * Constructs a `MiscCommand` object.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" public MiscCommand(){","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * Executes the miscellaneous command, displaying a message to the user indicating that the command is not understood.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * @param t The task list (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface to display the message.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" * @param f The file handler (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" ui.misc();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":40}},{"path":"src/main/java/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * A command to mark a task as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class UnmarkCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" * Constructs a `UnmarkCommand` object with the specified task index.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" * @param index The index of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" * Mark the specified task as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" * @param t The task list containing the tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface to display the result.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" * @param f The file handler (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" t.get(index - 1).markNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" FileHandler.writeTasksToFile(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" ui.unmark(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" ui.ioobExceptionMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":51}},{"path":"src/test/java/storage/FileHandlerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import parser.DateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import taskmanager.Deadlines;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import taskmanager.Events;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"import taskmanager.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"import taskmanager.ToDos;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":"class FileHandlerTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" void testReadAndWriteTasks() throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" // Create a temporary test file with known contents","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" Path tempFile \u003d Files.createTempFile(\"testFile\", \".txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" FileHandler fileHandler \u003d new FileHandler(tempFile.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTasks\u003e tasksToWrite \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" TaskList tasks \u003d new TaskList(tasksToWrite);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" DateTime dateTime \u003d new DateTime();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" String formattedDate \u003d dateTime.formatDateTime(\"23/08/2023 1000\");","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" ToDos newtodo \u003d new ToDos(\"TestTodo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" Deadlines newdeadline \u003d new Deadlines(\"TestDeadline\", formattedDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" Events newevent \u003d new Events(\"TestEvent\", formattedDate, formattedDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" tasks.add(newtodo);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" tasks.add(newdeadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" tasks.add(newevent);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" // Write the tasks to the test file","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" fileHandler.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" // Read tasks from the test file","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTasks\u003e tasksRead \u003d fileHandler.readTasksFromFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" TaskList taskRead \u003d new TaskList(tasksRead);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" // Perform assertions to compare the tasksToWrite and tasksRead","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" // Since you\u0027ve added a new ToDos task to tasksToWrite, make sure it\u0027s the same as tasksRead","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" assertTrue(tasks.taskListEqual(taskRead));","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" // Delete the temporary test file","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" Files.deleteIfExists(tempFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Leb14":58}},{"path":"src/test/java/storage/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import parser.DateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import taskmanager.Deadlines;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import taskmanager.Events;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import taskmanager.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"import taskmanager.ToDos;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" void testTaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTasks\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTasks\u003e taskList1 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTasks\u003e taskList2 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTasks\u003e taskList3 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTasks\u003e taskList4 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTasks\u003e taskList5 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" TaskList tasks1 \u003d new TaskList(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" TaskList tasks2 \u003d new TaskList(taskList1);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" TaskList tasks3 \u003d new TaskList(taskList2);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" TaskList tasks4 \u003d new TaskList(taskList3);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" TaskList tasks5 \u003d new TaskList(taskList4);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" TaskList tasks6 \u003d new TaskList(taskList5);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" DateTime dateTime \u003d new DateTime();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" String formattedDate \u003d dateTime.formatDateTime(\"23/08/2023 1800\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" String formattedDate1 \u003d dateTime.formatDateTime(\"23/08/2023 1830\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" String formattedDate2 \u003d dateTime.formatDateTime(\"23/08/2024 1800\");","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" ToDos newtodo \u003d new ToDos(\"TestTodo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" ToDos newtodo1 \u003d new ToDos(\"TestTodo1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" Deadlines newdeadline \u003d new Deadlines(\"TestDeadline\", formattedDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" Deadlines newdeadline1 \u003d new Deadlines(\"TestDeadline\", formattedDate1);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" Events newevent \u003d new Events(\"TestEvent\", formattedDate, formattedDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" Events newevent1 \u003d new Events(\"TestEvent\", formattedDate, formattedDate1);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" //add tasks to tasks1","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" tasks1.add(newtodo);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" tasks1.add(newdeadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" tasks1.add(newevent);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" //add tasks to tasks2","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" tasks2.add(newtodo1);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" tasks2.add(newdeadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" tasks2.add(newevent);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" //add tasks to tasks3","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" tasks3.add(newtodo);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":" tasks3.add(newdeadline1);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":" tasks3.add(newevent);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" //add tasks to tasks4","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":" tasks4.add(newtodo);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":" tasks4.add(newdeadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":" tasks4.add(newevent1);","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" //add tasks to tasks5","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" tasks5.add(newtodo);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":" tasks5.add(newdeadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" tasks5.add(newevent);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" //leave tasks6 empty","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" assertTrue(tasks1.taskListEqual(tasks1));","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":" assertFalse(tasks1.taskListEqual(tasks2));","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" assertFalse(tasks1.taskListEqual(tasks3));","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":" assertFalse(tasks1.taskListEqual(tasks4));","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":" assertTrue(tasks1.taskListEqual(tasks5));","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":" assertFalse(tasks1.taskListEqual(tasks6));","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Leb14":82}},{"path":"src/test/java/taskmanager/DeadlinesTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package taskmanager;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import parser.DateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"class DeadlinesTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" void testEvents() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" DateTime dateTime \u003d new DateTime();","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" String formattedDate \u003d dateTime.formatDateTime(\"23/08/2023 1800\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" String formattedDate1 \u003d dateTime.formatDateTime(\"23/08/2023 1801\");","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" String formattedDate2 \u003d dateTime.formatDateTime(\"23/09/2023 1800\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" Deadlines newdeadline \u003d new Deadlines(\"TestEvent\", formattedDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" Deadlines newdeadline1 \u003d new Deadlines(\"TestEvent\", formattedDate1);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" Deadlines newdeadline2 \u003d new Deadlines(\"TestEvent\", formattedDate2);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" Deadlines newdeadline3 \u003d new Deadlines(\"TestEvent3\", formattedDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" Deadlines newdeadline4 \u003d new Deadlines(\"TestEvent\", formattedDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" assertTrue(newdeadline.equals(newdeadline));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" assertFalse(newdeadline.equals(newdeadline1));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" assertFalse(newdeadline.equals(newdeadline2));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" assertFalse(newdeadline.equals(newdeadline3));","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" assertTrue(newdeadline.equals(newdeadline4));","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Leb14":37}},{"path":"src/test/java/taskmanager/EventsTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package taskmanager;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import parser.DateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"class EventsTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" void testEvents() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" DateTime dateTime \u003d new DateTime();","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" String formattedDate \u003d dateTime.formatDateTime(\"23/08/2023 1800\");","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" String formattedDate1 \u003d dateTime.formatDateTime(\"23/08/2023 1801\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" String formattedDate2 \u003d dateTime.formatDateTime(\"23/09/2023 1800\");","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" Events newevent \u003d new Events(\"TestEvent\", formattedDate, formattedDate1);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" Events newevent1 \u003d new Events(\"TestEvent1\", formattedDate, formattedDate1);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" Events newevent2 \u003d new Events(\"TestEvent\", formattedDate, formattedDate2);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" Events newevent3 \u003d new Events(\"TestEvent\", formattedDate1, formattedDate1);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" Events newevent4 \u003d new Events(\"TestEvent\", formattedDate, formattedDate1);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" assertTrue(newevent.equals(newevent));","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" assertFalse(newevent.equals(newevent1));","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" assertFalse(newevent.equals(newevent2));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" assertFalse(newevent.equals(newevent3));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" assertTrue(newevent.equals(newevent4));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Leb14":33}},{"path":"src/test/java/taskmanager/ToDosTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package taskmanager;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"class ToDosTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" void testToDos() throws IllegalArgumentException {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" ToDos newtodo \u003d new ToDos(\"TestTodo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" ToDos newtodo1 \u003d new ToDos(\"TestTodo1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" ToDos newtodo2 \u003d new ToDos(\"TestTodo2\");","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" ToDos newtodo3 \u003d new ToDos(\"TestTodo3\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" ToDos newtodo4 \u003d new ToDos(\"TestTodo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" ToDos newtodo5 \u003d new ToDos(\"TestTodo5\");","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" ToDos newtodo6 \u003d new ToDos(\"TestTodo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" assertTrue(newtodo.equals(newtodo));","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" assertFalse(newtodo.equals(newtodo1));","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" assertFalse(newtodo.equals(newtodo2));","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" assertFalse(newtodo.equals(newtodo3));","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" assertTrue(newtodo.equals(newtodo4));","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" assertFalse(newtodo.equals(newtodo5));","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" assertTrue(newtodo.equals(newtodo6));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Leb14":31}},{"path":"text-ui-test/data/TaskList.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"T | 0 | add","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":1}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"blah","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"what","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"todo","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"todo borrow book","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"deadline return book","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"event","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"event project meeting","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"event project meeting /from Mon 2pm","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"mark 2","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":"mark 3","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"unmark 3","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":"delete 2","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":"bye","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":22}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"java {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" sourceCompatibility \u003d JavaVersion.VERSION_11","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" targetCompatibility \u003d JavaVersion.VERSION_11","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"-":42,"Leb14":6}},{"path":"data/TaskList.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"T | 0 | add","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"D | 0 | sleep | 23 Aug 2023 7:00PM","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"T | 0 | sleep later","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"T | 0 | read book","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"T | 1 | read and sleep","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"E | 1 | sleep again | 23 Aug 2023 9:00AM | 29 Sep 2023 3:00PM","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Leb14":6}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" * Duke class is a simple chatbot that allows users","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" * to mark down their tasks.It allows users to add,","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" * list, and manage tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" private FileHandler fileHandler; //FileHandler to read or write file.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" private TaskList task; // The list of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" private Ui ui; //The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" private static final String DATA_FILE_PATH \u003d \"data/TaskList.txt\"; //The file path of the .txt file","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * Construct a Duke instance with the specified file path.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" * @param filePath The file path to store task data.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" this.fileHandler \u003d new FileHandler(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" this.task \u003d new TaskList(FileHandler.readTasksFromFile());","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" this.ui \u003d new Ui(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" * Runs the Duke application.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * It displays a welcome message and processes user commands","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" * until the \u0027bye\u0027 command is received to terminate the program.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" c.execute(task, ui, fileHandler);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" // Handle the specific exception here","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" * The main for the Duke application.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" * Create a Duke instance to run.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" * @param args (not used in this application).","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":" new Duke(DATA_FILE_PATH).run();","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":59,"-":4}},{"path":"src/main/java/Parser/DateTime.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":" * The `DateTime` class provides methods for parsing and formatting date and time strings.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"public class DateTime {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" private DateTimeFormatter inputFormatter; //The input format of the date and time.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" private DateTimeFormatter outputFormatter; //The output format of the date and time.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" * Constructs a `DateTime` object with a date and time formatters.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" public DateTime() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" this.inputFormatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" this.outputFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * Formats a date and time string from the input format to the output format.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" * @param dateTimeStr The date and time string to be formatted.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" * @return The formatted date and time string in the output format or \"Invalid format\" if parsing fails.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" public String formatDateTime(String dateTimeStr) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(dateTimeStr, inputFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" return dateTime.format(outputFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" return \"Invalid format\";","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":37}},{"path":"src/main/java/Parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import command.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import command.AddDeadlineCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import command.AddEventCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import command.AddTodoCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"import command.ByeCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"import command.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"import command.EmptyCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"import command.ErrorCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"import command.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"import command.MiscCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"import command.UnmarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"import command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" * The `Parser` class is responsible for parsing user input commands into executable commands.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * Parses the user input string and returns the corresponding command object.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" * @param str The user input string to be parsed.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" * @return A command object representing the parsed command.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" public static Command parse (String str) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" if (str.isEmpty()) { //empty command","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" return new EmptyCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" } else if (str.startsWith(\"todo\")) { //todo command","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" String[] split \u003d str.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" if (split.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" return new AddTodoCommand(str.substring(split[0].length()).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" System.out.println(\"Hey! I think you forget to enter the todo description or leave a space after the command!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" return new ErrorCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" } else if (str.startsWith(\"deadline\")) { // deadline command","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" String[] split \u003d str.split(\"/by\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" if (str.equals(\"deadline\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please enter the task description or leave a space after the command!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" } else if (split.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please provide a deadline for your task in this format dd/MM/yyyy HHmm!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" DateTime dateTime \u003d new DateTime();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" String formattedDate \u003d dateTime.formatDateTime(split[1].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" String taskDesc \u003d split[0].trim().substring(8).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" if (formattedDate.equals(\"Invalid format\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please provide a deadline for your task in this format dd/MM/yyyy HHmm!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":" return new AddDeadlineCommand(taskDesc, formattedDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":" return new ErrorCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":" } else if (str.startsWith(\"event\")) { // event command","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" if (str.equals(\"event\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please enter the event description or leave a space after the command!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" String[] split_1 \u003d str.split(\"/from\");","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" if (split_1.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please provide a time range for your event in this format /from dd/MM/yyyy HHmm /to HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":" String[] split_2 \u003d split_1[1].split(\"/to\");","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":" if (split_2.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please provide an end time for your event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Leb14"},"content":" DateTime dateTime \u003d new DateTime();","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Leb14"},"content":" String formattedStartTime \u003d dateTime.formatDateTime(split_2[0].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Leb14"},"content":" String formattedEndTime \u003d dateTime.formatDateTime(split_2[1].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Leb14"},"content":" String taskDesc \u003d split_1[0].trim().substring(5).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Leb14"},"content":" if (formattedStartTime.equals(\"Invalid format\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please provide a time range for your event in this format /from dd/MM/yyyy HHmm /to dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Leb14"},"content":" if (formattedEndTime.equals(\"Invalid format\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please provide an end time for your event in this format dd/MM/yyyy HHmm!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Leb14"},"content":" return new AddEventCommand(taskDesc, formattedStartTime, formattedEndTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Leb14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Leb14"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Leb14"},"content":" return new ErrorCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Leb14"},"content":" } else if (str.equals(\"list\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Leb14"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Leb14"},"content":" } else if (str.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Leb14"},"content":" int index \u003d Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Leb14"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Leb14"},"content":" } else if (str.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Leb14"},"content":" int index \u003d Integer.parseInt(str.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Leb14"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Leb14"},"content":" } else if (str.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Leb14"},"content":" int index \u003d Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Leb14"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Leb14"},"content":" } else if (str.equals(\"bye\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Leb14"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Leb14"},"content":" } else if (str.startsWith(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Leb14"},"content":" String[] split \u003d str.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Leb14"},"content":" if (split.length \u003c 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Leb14"},"content":" throw new IllegalArgumentException(\"Hey! Please provide a keyword\");","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Leb14"},"content":" return new FindCommand(split[1].trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Leb14"},"content":" }else {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Leb14"},"content":" return new MiscCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":128}},{"path":"src/main/java/Storage/FileHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"import taskmanager.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"import taskmanager.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":"import taskmanager.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"import taskmanager.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * The `FileHandler` class handles reading tasks from and writing tasks to a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":"public class FileHandler {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" private static String filePath; // The file path to the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" * Constructs a `FileHandler` with the specified file path.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" * @param filePath The path to the .txt file where tasks will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" public FileHandler(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" * Reads tasks from the .txt file and returns them as a list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" * @return An ArrayList containing the tasks read from the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" public static ArrayList\u003cTask\u003e readTasksFromFile() {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTask\u003e task \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" String folderPath \u003d \"data\";","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" Files.createDirectories(Paths.get(folderPath));","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" System.out.println(\"Failed to create the directory: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" Path path \u003d Paths.get(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" Files.createFile(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" System.out.println(\"Failed to create the file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" FileReader reader \u003d new FileReader(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":" Scanner scanner \u003d new Scanner(reader);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":" boolean contentCheck \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" if (!contentCheck) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" } else if (line.startsWith(\"T\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" String[] split \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":" if (split.length \u003e 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" throw new IndexOutOfBoundsException(\"There is an error in your Todos content format!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":" } if (split.length \u003c 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" throw new IndexOutOfBoundsException(\"There is missing info for your Todos content in the file!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":" ToDo newtodo \u003d new ToDo(split[2], split[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":" task.add(newtodo);","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":" contentCheck \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Leb14"},"content":" } else if (line.startsWith(\"D\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Leb14"},"content":" String[] split \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Leb14"},"content":" if (split.length \u003e 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Leb14"},"content":" throw new IndexOutOfBoundsException(\"There is an error in your Deadlines content format!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Leb14"},"content":" } if (split.length \u003c 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Leb14"},"content":" throw new IndexOutOfBoundsException(\"There is missing info for your Deadlines content in the file!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Leb14"},"content":" Deadline newdeadline \u003d new Deadline(split[1], split[2], split[3]);","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"Leb14"},"content":" task.add(newdeadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Leb14"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Leb14"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Leb14"},"content":" contentCheck \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Leb14"},"content":" } else if (line.startsWith(\"E\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Leb14"},"content":" String[] split \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Leb14"},"content":" if (split.length \u003e 5) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Leb14"},"content":" throw new IndexOutOfBoundsException(\"There is an error in your Events content format!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Leb14"},"content":" } if (split.length \u003c 5) {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Leb14"},"content":" throw new IndexOutOfBoundsException(\"There is missing info for your Events content in the file!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Leb14"},"content":" Event newevent \u003d new Event(split[1], split[2], split[3], split[4]);","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"Leb14"},"content":" task.add(newevent);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"Leb14"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Leb14"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Leb14"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Leb14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Leb14"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Leb14"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Leb14"},"content":" * Writes tasks to the specified file.","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Leb14"},"content":" * @param tasks The TaskList containing the tasks to be written.","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Leb14"},"content":" public static void writeTasksToFile(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Leb14"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Leb14"},"content":" for (Task t : tasks.getAllTasks()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"Leb14"},"content":" writer.write(t.toFileString() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"Leb14"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"Leb14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"Leb14"},"content":" System.out.println(\"File don\u0027t exist!!!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":137}},{"path":"src/main/java/Storage/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import taskmanager.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":" * The `TaskList` class behave like an ArrayList","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * to store a list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" private ArrayList\u003cTask\u003e task; //The array list to store all the tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" * Constructs a `TaskList` with the specified list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" * @param task The ArrayList containing tasks to initialize the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" public TaskList(ArrayList\u003cTask\u003e task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" this.task \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" * Adds task to task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" * @param t The task to be added to the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" public void add(Task t) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" task.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" * Returns the number of tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" public int size() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" return this.task.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" * Checks if the task list is empty.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" * @return True if the task list is empty; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" return this.task.isEmpty();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" * Removes a task at the specified index from the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" * @param i The index of the task to be removed.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":" public void remove(int i) {this.task.remove(i);}","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" * Returns the ArrayList of tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":" * @return The ArrayList of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" return this.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":" * Retrieves a task at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" * @return The task at the index.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":" return this.task.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":" * Compares this `TaskList` to another `TaskList` for equality.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Leb14"},"content":" * @param other The `TaskList` to compare to this one.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Leb14"},"content":" * @return True if the `TaskList` objects are equal; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Leb14"},"content":" public boolean taskListEqual(TaskList other) {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Leb14"},"content":" if (task.size() !\u003d other.task.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Leb14"},"content":" for (int i \u003d 0; i \u003c task.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Leb14"},"content":" if (!task.get(i).equals(other.task.get(i))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Leb14"},"content":" public void display() {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Leb14"},"content":" for (int i \u003d 0 ; i \u003c task.size(); i ++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Leb14"},"content":" int j \u003d i + 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + j + \". \" + task.get(i).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Leb14"},"content":" * Match the taskDesc with keyword for query.","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Leb14"},"content":" * @param str The keyword for matching.","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Leb14"},"content":" * @return A tasklist containing all the task that passed the matching.","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Leb14"},"content":" public TaskList findKeyword(String str) {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Leb14"},"content":" TaskList matchedList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Leb14"},"content":" System.out.println(\"here\");","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Leb14"},"content":" for (int i \u003d 0; i \u003c task.size(); i ++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Leb14"},"content":" if (this.task.get(i).isMatch(str)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Leb14"},"content":" matchedList.add(this.task.get(i));","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Leb14"},"content":" return matchedList;","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":127}},{"path":"src/main/java/TaskManager/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package taskmanager;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":" private String taskDesc; //task description","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" private String dueDateStr; // due date in String","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" private LocalDateTime dueDate; // due date in LocalDateTime","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" private static final DateTimeFormatter DATE_TIME_FORMATTER \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" * Constructs a new Event task with the specified description, completion status, and date-time information.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" * @param dueDateStr The due date and time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" public Deadline(String taskDesc, String dueDateStr) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" this.dueDateStr \u003d dueDateStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" this.dueDate \u003d LocalDateTime.parse(dueDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" * Constructs a new Event task with the specified description, completion status, and date-time information.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" * @param completion The completion status (1 for done, 0 for not done).","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * @param dueDateStr The due date and time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" public Deadline(String completion, String taskDesc, String dueDateStr) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" if (completion.equals(\"1\")){","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" this.dueDateStr \u003d dueDateStr.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" this.dueDate \u003d LocalDateTime.parse(dueDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" this.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" this.dueDateStr \u003d dueDateStr.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" this.dueDate \u003d LocalDateTime.parse(dueDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" System.out.println(\"Hey! There is an invalid todo task in the task list!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" * Checks if the Deadlines task is valid.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" * @return True if the task is valid (not null); otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" public boolean isValid() {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" return taskDesc !\u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" * Returns a string format of the Deadlines task that can be written to the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":" * @return A string format of the Deadlines task to store it into the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" String x;","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":" x \u003d \"1\";","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":" x \u003d \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" String str1 \u003d String.format(\"%s\", x);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":" return \"D | \" + str1 + \" | \" + this.taskDesc + \" | \" + this.dueDateStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":" * Generates a string representation of the Deadlines task.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Leb14"},"content":" * @return A formatted string representation for displaying to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Leb14"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Leb14"},"content":" String x;","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Leb14"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Leb14"},"content":" x \u003d \"X\";","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Leb14"},"content":" x \u003d \" \";","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Leb14"},"content":" String str1 \u003d String.format(\"[%s] \", x);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Leb14"},"content":" String str2 \u003d String.format(\" (by: %s)\", this.dueDateStr);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Leb14"},"content":" return \"[D]\" + str1 + this.taskDesc + str2 ;","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Leb14"},"content":" * Compares this Deadlines task to another object for equality.","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Leb14"},"content":" * @param o The object for comparison.","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Leb14"},"content":" * @return True if the objects are equal; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Leb14"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Leb14"},"content":" Deadline deadline \u003d (Deadline) o;","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Leb14"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Leb14"},"content":" } else if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Leb14"},"content":" } else if (!taskDesc.equals(deadline.taskDesc)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Leb14"},"content":" return dueDateStr.equals(deadline.dueDateStr);","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Leb14"},"content":" * Match the taskDesc with keyword for query.","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Leb14"},"content":" * @param keyword The keyword for matching.","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Leb14"},"content":" * @return True if there is matching keyword; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Leb14"},"content":" public boolean isMatch(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Leb14"},"content":" String[] split \u003d taskDesc.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Leb14"},"content":" for(int i \u003d 0; i \u003c split.length; i ++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Leb14"},"content":" if (keyword.equals(split[i])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":139}},{"path":"src/main/java/TaskManager/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package taskmanager;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":" private String taskDesc; //task description","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" private String fromDateStr; //start date and time in String","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" private String toDateStr; //end date and time in String","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" private LocalDateTime fromDate; //start date and time in LocalDateTime","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" private LocalDateTime toDate; // end date and time in LocalDateTime","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" private static final DateTimeFormatter DATE_TIME_FORMATTER \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" * Constructs a new Event task with the specified user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * @param fromDateStr The starting date and time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" * @param toDateStr The ending date and time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" public Event(String taskDesc, String fromDateStr, String toDateStr) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" this.fromDateStr \u003d fromDateStr;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" this.toDateStr \u003d toDateStr;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" this.fromDate \u003d LocalDateTime.parse(fromDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" this.toDate \u003d LocalDateTime.parse(toDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * Constructs a new Event task with the specified description, completion status, and date-time information.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * @param completion The completion status (1 for done, 0 for not done).","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" * @param fromDateStr The starting date and time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" * @param toDateStr The ending date and time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" public Event(String completion, String taskDesc, String fromDateStr, String toDateStr) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" if (completion.equals(\"1\")){","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" this.fromDateStr \u003d fromDateStr.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" this.toDateStr \u003d toDateStr.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" this.fromDate \u003d LocalDateTime.parse(fromDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" this.toDate \u003d LocalDateTime.parse(toDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" this.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" this.fromDateStr \u003d fromDateStr.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" this.toDateStr \u003d toDateStr.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" this.fromDate \u003d LocalDateTime.parse(fromDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" this.toDate \u003d LocalDateTime.parse(toDateStr, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" System.out.println(\"Hey! There is an invalid todo task in the task list!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" * Checks if the Events task is valid.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":" * @return True if the task is valid (not null); otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":" public boolean isValid() {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" return taskDesc !\u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":" * Returns a string format of the Events task that can be written to the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":" * @return A string format of the Events task to store it into the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":" String x;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":" x \u003d \"1\";","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":" x \u003d \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Leb14"},"content":" String str1 \u003d String.format(\"%s\", x);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Leb14"},"content":" return \"E | \" + str1 + \" | \" + this.taskDesc + \" | \" + this.fromDateStr + \" | \" + this.toDateStr;","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Leb14"},"content":" * Generates a string representation of the Events task.","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Leb14"},"content":" * @return A formatted string representation for displaying to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Leb14"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Leb14"},"content":" String x;","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Leb14"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Leb14"},"content":" x \u003d \"X\";","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Leb14"},"content":" x \u003d \" \";","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Leb14"},"content":" String str1 \u003d String.format(\"[%s] \", x);","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Leb14"},"content":" String str2 \u003d String.format(\" (from: %s to: %s)\", this.fromDateStr, this.toDateStr);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Leb14"},"content":" return \"[E]\" + str1 + this.taskDesc + str2;","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Leb14"},"content":" * Compares this Events task to another object for equality.","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Leb14"},"content":" * @param o The object for comparison.","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Leb14"},"content":" * @return True if the objects are equal; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Leb14"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Leb14"},"content":" Event event \u003d (Event) o;","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Leb14"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Leb14"},"content":" } else if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Leb14"},"content":" } else if (!taskDesc.equals(event.taskDesc)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Leb14"},"content":" } else if (!fromDateStr.equals(event.fromDateStr)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Leb14"},"content":" } else{","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Leb14"},"content":" return toDateStr.equals(event.toDateStr);","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Leb14"},"content":" * Match the taskDesc with keyword for query.","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Leb14"},"content":" * @param keyword The keyword for matching.","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Leb14"},"content":" * @return True if there is matching keyword; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Leb14"},"content":" public boolean isMatch(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Leb14"},"content":" String[] split \u003d taskDesc.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Leb14"},"content":" for(int i \u003d 0; i \u003c split.length; i ++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Leb14"},"content":" if (keyword.equals(split[i])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":150}},{"path":"src/main/java/TaskManager/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package taskmanager;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":" * Abstract class for few types of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":" protected boolean isDone; //completion status of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" private static int count \u003d 0; //keep track of the number of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" * Returns a string format of the task that can be written to the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" * @return A string format of the task to store it into the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" public abstract String toFileString();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * Constructs a task with an initial status of not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" public Task() {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" public void markDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" * Match the keyword to task description for query.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" public abstract boolean isMatch(String keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":45}},{"path":"src/main/java/TaskManager/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package taskmanager;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":" * The tasks of type \"To-Do.\"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":" private String taskDesc;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" * Constructs a new To-Do task with the specified user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The description of the to-do task.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" public ToDo(String taskDesc) {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * Constructs a new To-Do task with the specified description and completion status.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The description of the to-do task.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * @param completion The completion status (1 for done, 0 for not done).","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" public ToDo(String taskDesc, String completion) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" if (completion.equals(\"1\")){","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" this.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" System.out.println(\"Hey! There is an invalid todo task in the task list!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" * Checks if the To-Do task is valid.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" * @return True if the task is valid (not null); otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" public boolean isValid() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" return taskDesc !\u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" * Returns a string format of the To-Do task that can be written to the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" * @return A string format of the To-Do task to store it into the .txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" String x;","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" x \u003d \"1\";","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":" x \u003d \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":" String str1 \u003d String.format(\"%s\", x);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" return \"T | \" + str1 + \" | \" + this.taskDesc;","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":" * Generates a string representation of the To-Do task.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" * @return A formatted string representation for displaying to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" String x;","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" x \u003d \"X\";","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" x \u003d \" \";","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":" String str1 \u003d String.format(\"[%s] \", x);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":" return \"[T]\" + str1 + this.taskDesc;","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Leb14"},"content":" * Compares this To-Do task to another object for equality.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Leb14"},"content":" * @param o The object for comparison.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Leb14"},"content":" * @return True if the objects are equal; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Leb14"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Leb14"},"content":" ToDo toDo \u003d (ToDo) o;","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"Leb14"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Leb14"},"content":" } else if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Leb14"},"content":" return taskDesc.equals(toDo.taskDesc);","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Leb14"},"content":" * Match the taskDesc with keyword for query.","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Leb14"},"content":" * @param keyword The keyword for matching.","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Leb14"},"content":" * @return True if there is matching keyword; otherwise, false.","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Leb14"},"content":" public boolean isMatch(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Leb14"},"content":" String[] split \u003d taskDesc.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Leb14"},"content":" for(int i \u003d 0; i \u003c split.length; i ++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Leb14"},"content":" if (keyword.equals(split[i])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":116}},{"path":"src/main/java/Ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"import taskmanager.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import taskmanager.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"import taskmanager.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"import taskmanager.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" * The Ui class handles user interaction and displays messages to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" * It provides methods for input and output.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" private final String NAME \u003d \"Yours\"; // The name of the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" private TaskList taskList; // The list of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" private String word; //The singular or plural form of \"task\".","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * Constructs an Ui instance with a reference to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" * @param taskList The task list used for displaying tasks\u0027 information.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" public Ui (TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" if (taskList.size() \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" this.word \u003d \"task\";","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" this.word \u003d \"tasks\";","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" * Displays a welcome message.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" String logo \u003d \"____ ____ ________ ___ ___ __________ _____\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" + \"\\\\ \\\\ / / | ____ | | | | | | _____ | / ____|\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" + \" \\\\ \\\\/ / | | | | | | | | | |___| | | (___\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" + \" \\\\ / | | | | | | | | | ______| \\\\ ___ \\\\\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" + \" | | | | | | | | | | | \\\\ \\\\ | |\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" + \" | | | |____| | | | | | | | \\\\ \\\\ ____) |\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" + \" |____| |________| \\\\_________/ |__| \\\\__\\\\ |_____/\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" System.out.printf(\"Hello! I\u0027m %s%n\", NAME);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" System.out.println(logo);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" System.out.println(\"____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" * Reads a command entered by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" * @return The user\u0027s input command as a string.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":" String command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":" return command;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":" * A prompt message when a new to-do task is added to the tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" * @param newTodo The newly added ToDos task.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":" public void addedTodo(ToDo newTodo) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Help you added a new to-do.\\n \" + newTodo.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" System.out.println(\" Now you have \" + taskList.size() + String.format(\" %s in the list.\", word));","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":" * A prompt message when a new Deadlines task is added to the tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":" * @param newDeadLine The newly added Deadlines task.","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":" public void addedDeadlines(Deadline newDeadLine) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Help you added a new deadline.\\n \" + newDeadLine.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Leb14"},"content":" System.out.println(\" Now you have \" + taskList.size() + String.format(\" %s in the list.\", word));","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Leb14"},"content":" * A prompt message when a new Events task is added to the tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Leb14"},"content":" * @param newEvent The newly added Events task.","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Leb14"},"content":" public void addedEvent(Event newEvent) {","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Help you added a new deadline.\\n \" + newEvent.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Leb14"},"content":" System.out.println(\" Now you have \" + taskList.size() + String.format(\" %s in the list.\", word));","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Leb14"},"content":" * Display all the task in the tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Leb14"},"content":" public void list() {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Here are the tasks in your list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Leb14"},"content":" taskList.display();","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Leb14"},"content":" * Display all the task that match the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Leb14"},"content":" * @param matchedList The list of task that matched the keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Leb14"},"content":" public void find(TaskList matchedList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Leb14"},"content":" if (matchedList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": There is no task matched with the given keyword!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Leb14"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Here are the tasks that matches your keyword.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Leb14"},"content":" matchedList.display();","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Leb14"},"content":" * A prompt message when a task is deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Leb14"},"content":" * @param deleted The deleted task.","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Leb14"},"content":" public void delete(Task deleted) {","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Helped you deleted this task\\n \" + deleted.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Leb14"},"content":" System.out.println(\" Now you have \" + taskList.size() + String.format(\" %s in the list.\", word));","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Leb14"},"content":" * A prompt message when a task is marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Leb14"},"content":" * @param index The index of the task marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Leb14"},"content":" public void mark(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Well done! I\u0027ve marked this task as done :\");","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + taskList.get(index - 1).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Leb14"},"content":" * A prompt message when a task is marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"Leb14"},"content":" * @param index The index of the task marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Leb14"},"content":" public void unmark(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Alright, I\u0027ve marked this task as not done yet\");","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + taskList.get(index - 1).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"Leb14"},"content":" * A goodbye message when the application exits.","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"Leb14"},"content":" public void bye() {","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"Leb14"},"content":" * A prompt message when the user enters an empty command.","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"Leb14"},"content":" public void empty() {","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": Please enter something!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"Leb14"},"content":" * A prompt message when the user enters invalid command.","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"Leb14"},"content":" public void misc() {","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"Leb14"},"content":" System.out.println(\" \" + NAME + \": I don\u0027t really understand what you mean.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"Leb14"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"Leb14"},"content":" * Displays a message for handling an IndexOutOfBoundsException.","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"Leb14"},"content":" public void ioobExceptionMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"Leb14"},"content":" System.out.println(\"Please enter the correct task\u0027s index number.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":198}},{"path":"src/main/java/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import taskmanager.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" * Command to add a Deadlines task.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"public class AddDeadlineCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" private String taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" private String dueDateStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" * Constructs an `AddDeadlineCommand` object with the specified user input and due date string.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" * @param dueDateStr The due date and time in string.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" public AddDeadlineCommand(String taskDesc, String dueDateStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" this.dueDateStr \u003d dueDateStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" * Executes the command to add a Deadlines task to the task list, update the storage, and notify the user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" * @param task The task list to which the Deadlines task will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" * @param f The file handler for storing tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList task, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" Deadline newdeadlines \u003d new Deadline(taskDesc, dueDateStr);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" if (newdeadlines.isValid()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" task.add(newdeadlines);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" FileHandler.writeTasksToFile(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" ui.addedDeadlines(newdeadlines);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":54}},{"path":"src/main/java/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import taskmanager.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" * Command to add an Events task.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"public class AddEventCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" private String taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" private String to;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" private String from;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" * Constructs an `AddEventCommand` object with the specified user input and due date string.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * @param from The start date and time in string.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * @param to The end date and time in string.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" public AddEventCommand(String taskDesc, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * Executes the command to add an Events task to the task list, update the storage, and notify the user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" * @param task The task list to which the Events task will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" * @param f The file handler for storing tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList task, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" Event newEvent \u003d new Event(taskDesc, from, to);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" if (newEvent.isValid()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" task.add(newEvent);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" FileHandler.writeTasksToFile(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" ui.addedEvent(newEvent);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":63}},{"path":"src/main/java/command/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import taskmanager.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" * Command to add a ToDos task.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"public class AddTodoCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" private String taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" * Constructs an `AddTodoCommand` object with the specified user input and due date string.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" * @param taskDesc The task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" public AddTodoCommand(String taskDesc) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" this.taskDesc \u003d taskDesc;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" * Executes the command to add a ToDos task to the task list, update the storage, and notify the user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" * @param task The task list to which the ToDos task will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" * @param f The file handler for storing tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList task, Ui ui, FileHandler f) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" ToDo newtodo \u003d new ToDo(taskDesc);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" if (newtodo.isValid()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" task.add(newtodo);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" f.writeTasksToFile(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" ui.addedTodo(newtodo);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":52}},{"path":"src/main/java/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * A command to exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class ByeCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" * Constructs a `ByeCommand` object.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" public ByeCommand(){","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * Executes the command to exit the application and displays a farewell message.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * @param task The task list (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" * @param f The file handler for storing tasks (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList task, Ui ui, FileHandler f) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" ui.bye();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * @return `true` because this command exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":40}},{"path":"src/main/java/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * Abstract class for few types of command that","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" * can be executed in the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" * Executes the command with the provided task list, user interface, and file handler.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" * @param t The task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" * @param f The file handler for storing tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" public abstract void execute(TaskList t, Ui ui, FileHandler f);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":30}},{"path":"src/main/java/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import taskmanager.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" * A command to delete a task from the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"public class DeleteCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" * Constructs a `DeleteCommand` object with the provided index.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" * Executes the command to delete a task from the task list and updates the file storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" * @param t The task list from which the task will be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" * @param f The file handler for storing tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" Task deleted \u003d t.get(index - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" t.remove(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" FileHandler.writeTasksToFile(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" ui.delete(deleted);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" ui.ioobExceptionMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":54}},{"path":"src/main/java/command/EmptyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * An empty command.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class EmptyCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" * Constructs an `EmptyCommand` object.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" public EmptyCommand(){","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * Executes the empty command and displays a message to ask user for input.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * @param t The task list (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" * @param f The file handler (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" ui.empty();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":40}},{"path":"src/main/java/command/ErrorCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * An error command.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class ErrorCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" * Constructs an `ErrorCommand` object.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" public ErrorCommand(){","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * Executes the error command","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * @param t The task list (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface. (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" * @param f The file handler (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":40}},{"path":"src/main/java/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * A find command to query task with a keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class FindCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" String keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" * Constructs an `FindCommand` object.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" public FindCommand(String keyword){","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * Executes the find command.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" * @param t The list of the task to match.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" * @param f The file handler (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" ui.find(t.findKeyword(keyword));","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Leb14":43}},{"path":"src/main/java/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * A command to list the tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class ListCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" * Constructs a `ListCommand` object.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" public ListCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * Executes the list command, which displays all the tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * @param t The task list to retrieve tasks from.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface to display the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" * @param f The file handler (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" ui.list();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":40}},{"path":"src/main/java/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * A command to mark a task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class MarkCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" * Constructs a `MarkCommand` object with the specified task index.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" * @param index The index of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" * Mark the specified task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" * @param t The task list containing the tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface to display the result.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" * @param f The file handler (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" t.get(index - 1).markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" FileHandler.writeTasksToFile(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" ui.mark(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" ui.ioobExceptionMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":51}},{"path":"src/main/java/command/MiscCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * Represents a miscellaneous command.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class MiscCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" * Constructs a `MiscCommand` object.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" public MiscCommand(){","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" * Executes the miscellaneous command, displaying a message to the user indicating that the command is not understood.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" * @param t The task list (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface to display the message.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" * @param f The file handler (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" ui.misc();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":40}},{"path":"src/main/java/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import storage.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import storage.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" * A command to mark a task as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"public class UnmarkCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" * Constructs a `UnmarkCommand` object with the specified task index.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" * @param index The index of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" * Mark the specified task as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" * @param t The task list containing the tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" * @param ui The user interface to display the result.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" * @param f The file handler (not used in this command).","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" public void execute(TaskList t, Ui ui, FileHandler f) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" t.get(index - 1).markNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" FileHandler.writeTasksToFile(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" ui.unmark(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" ui.ioobExceptionMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" * Check whether the command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" * @return `false` because this command does not exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":51}},{"path":"src/test/java/storage/FileHandlerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import parser.DateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import taskmanager.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import taskmanager.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"import taskmanager.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"import taskmanager.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":"class FileHandlerTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" void testReadAndWriteTasks() throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" // Create a temporary test file with known contents","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" Path tempFile \u003d Files.createTempFile(\"testFile\", \".txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" FileHandler fileHandler \u003d new FileHandler(tempFile.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTask\u003e taskToWrite \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" TaskList tasks \u003d new TaskList(taskToWrite);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" DateTime dateTime \u003d new DateTime();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" String formattedDate \u003d dateTime.formatDateTime(\"23/08/2023 1000\");","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" ToDo newtodo \u003d new ToDo(\"TestTodo\");","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":" Deadline newdeadline \u003d new Deadline(\"TestDeadline\", formattedDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" Event newevent \u003d new Event(\"TestEvent\", formattedDate, formattedDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":" tasks.add(newtodo);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" tasks.add(newdeadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" tasks.add(newevent);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" // Write the tasks to the test file","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":" fileHandler.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" // Read tasks from the test file","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTask\u003e tasksRead \u003d fileHandler.readTasksFromFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" TaskList taskRead \u003d new TaskList(tasksRead);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":" // Perform assertions to compare the tasksToWrite and tasksRead","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" // Since you\u0027ve added a new ToDos task to tasksToWrite, make sure it\u0027s the same as tasksRead","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" assertTrue(tasks.taskListEqual(taskRead));","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" // Delete the temporary test file","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":" Files.deleteIfExists(tempFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Leb14":58}},{"path":"src/test/java/storage/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import parser.DateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import taskmanager.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import taskmanager.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import taskmanager.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"import taskmanager.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" void testTaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTask\u003e taskList1 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTask\u003e taskList2 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTask\u003e taskList3 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTask\u003e taskList4 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" ArrayList\u003cTask\u003e taskList5 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" TaskList tasks1 \u003d new TaskList(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" TaskList tasks2 \u003d new TaskList(taskList1);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" TaskList tasks3 \u003d new TaskList(taskList2);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" TaskList tasks4 \u003d new TaskList(taskList3);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" TaskList tasks5 \u003d new TaskList(taskList4);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" TaskList tasks6 \u003d new TaskList(taskList5);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":" DateTime dateTime \u003d new DateTime();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":" String formattedDate \u003d dateTime.formatDateTime(\"23/08/2023 1800\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":" String formattedDate1 \u003d dateTime.formatDateTime(\"23/08/2023 1830\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" String formattedDate2 \u003d dateTime.formatDateTime(\"23/08/2024 1800\");","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":" ToDo newtodo \u003d new ToDo(\"TestTodo\");","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Leb14"},"content":" ToDo newtodo1 \u003d new ToDo(\"TestTodo1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Leb14"},"content":" Deadline newdeadline \u003d new Deadline(\"TestDeadline\", formattedDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Leb14"},"content":" Deadline newdeadline1 \u003d new Deadline(\"TestDeadline\", formattedDate1);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Leb14"},"content":" Event newevent \u003d new Event(\"TestEvent\", formattedDate, formattedDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Leb14"},"content":" Event newevent1 \u003d new Event(\"TestEvent\", formattedDate, formattedDate1);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Leb14"},"content":" //add tasks to tasks1","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Leb14"},"content":" tasks1.add(newtodo);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Leb14"},"content":" tasks1.add(newdeadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Leb14"},"content":" tasks1.add(newevent);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Leb14"},"content":" //add tasks to tasks2","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Leb14"},"content":" tasks2.add(newtodo1);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Leb14"},"content":" tasks2.add(newdeadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Leb14"},"content":" tasks2.add(newevent);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Leb14"},"content":" //add tasks to tasks3","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Leb14"},"content":" tasks3.add(newtodo);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Leb14"},"content":" tasks3.add(newdeadline1);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Leb14"},"content":" tasks3.add(newevent);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Leb14"},"content":" //add tasks to tasks4","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Leb14"},"content":" tasks4.add(newtodo);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Leb14"},"content":" tasks4.add(newdeadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Leb14"},"content":" tasks4.add(newevent1);","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Leb14"},"content":" //add tasks to tasks5","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Leb14"},"content":" tasks5.add(newtodo);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Leb14"},"content":" tasks5.add(newdeadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Leb14"},"content":" tasks5.add(newevent);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Leb14"},"content":" //leave tasks6 empty","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Leb14"},"content":" assertTrue(tasks1.taskListEqual(tasks1));","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Leb14"},"content":" assertFalse(tasks1.taskListEqual(tasks2));","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Leb14"},"content":" assertFalse(tasks1.taskListEqual(tasks3));","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Leb14"},"content":" assertFalse(tasks1.taskListEqual(tasks4));","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Leb14"},"content":" assertTrue(tasks1.taskListEqual(tasks5));","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Leb14"},"content":" assertFalse(tasks1.taskListEqual(tasks6));","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Leb14":82}},{"path":"src/test/java/taskmanager/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package taskmanager;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import parser.DateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"class DeadlineTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" void testEvents() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" DateTime dateTime \u003d new DateTime();","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" String formattedDate \u003d dateTime.formatDateTime(\"23/08/2023 1800\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" String formattedDate1 \u003d dateTime.formatDateTime(\"23/08/2023 1801\");","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" String formattedDate2 \u003d dateTime.formatDateTime(\"23/09/2023 1800\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" Deadline newdeadline \u003d new Deadline(\"TestEvent\", formattedDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" Deadline newdeadline1 \u003d new Deadline(\"TestEvent\", formattedDate1);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" Deadline newdeadline2 \u003d new Deadline(\"TestEvent\", formattedDate2);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" Deadline newdeadline3 \u003d new Deadline(\"TestEvent3\", formattedDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" Deadline newdeadline4 \u003d new Deadline(\"TestEvent\", formattedDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" assertTrue(newdeadline.equals(newdeadline));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" assertFalse(newdeadline.equals(newdeadline1));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" assertFalse(newdeadline.equals(newdeadline2));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":" assertFalse(newdeadline.equals(newdeadline3));","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" assertTrue(newdeadline.equals(newdeadline4));","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Leb14":37}},{"path":"src/test/java/taskmanager/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package taskmanager;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"import parser.DateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"class EventTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" void testEvents() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":" DateTime dateTime \u003d new DateTime();","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" String formattedDate \u003d dateTime.formatDateTime(\"23/08/2023 1800\");","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" String formattedDate1 \u003d dateTime.formatDateTime(\"23/08/2023 1801\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" String formattedDate2 \u003d dateTime.formatDateTime(\"23/09/2023 1800\");","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" Event newevent \u003d new Event(\"TestEvent\", formattedDate, formattedDate1);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" Event newevent1 \u003d new Event(\"TestEvent1\", formattedDate, formattedDate1);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" Event newevent2 \u003d new Event(\"TestEvent\", formattedDate, formattedDate2);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":" Event newevent3 \u003d new Event(\"TestEvent\", formattedDate1, formattedDate1);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" Event newevent4 \u003d new Event(\"TestEvent\", formattedDate, formattedDate1);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" assertTrue(newevent.equals(newevent));","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" assertFalse(newevent.equals(newevent1));","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" assertFalse(newevent.equals(newevent2));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":" assertFalse(newevent.equals(newevent3));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" assertTrue(newevent.equals(newevent4));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Leb14":33}},{"path":"src/test/java/taskmanager/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"package taskmanager;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"class ToDoTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":" void testToDos() throws IllegalArgumentException {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":" ToDo newtodo \u003d new ToDo(\"TestTodo\");","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":" ToDo newtodo1 \u003d new ToDo(\"TestTodo1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":" ToDo newtodo2 \u003d new ToDo(\"TestTodo2\");","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":" ToDo newtodo3 \u003d new ToDo(\"TestTodo3\");","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":" ToDo newtodo4 \u003d new ToDo(\"TestTodo\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":" ToDo newtodo5 \u003d new ToDo(\"TestTodo5\");","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":" ToDo newtodo6 \u003d new ToDo(\"TestTodo\");","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":" assertTrue(newtodo.equals(newtodo));","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":" assertFalse(newtodo.equals(newtodo1));","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Leb14"},"content":" assertFalse(newtodo.equals(newtodo2));","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Leb14"},"content":" assertFalse(newtodo.equals(newtodo3));","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Leb14"},"content":" assertTrue(newtodo.equals(newtodo4));","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Leb14"},"content":" assertFalse(newtodo.equals(newtodo5));","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Leb14"},"content":" assertTrue(newtodo.equals(newtodo6));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Leb14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Leb14"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Leb14":31}},{"path":"text-ui-test/data/TaskList.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"T | 0 | add","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":1}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Leb14"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Leb14"},"content":"blah","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Leb14"},"content":"what","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Leb14"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Leb14"},"content":"todo","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Leb14"},"content":"todo borrow book","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Leb14"},"content":"deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Leb14"},"content":"deadline return book","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Leb14"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Leb14"},"content":"event","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Leb14"},"content":"event project meeting","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Leb14"},"content":"event project meeting /from Mon 2pm","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Leb14"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Leb14"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Leb14"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Leb14"},"content":"mark 2","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Leb14"},"content":"mark 3","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Leb14"},"content":"unmark 3","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Leb14"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Leb14"},"content":"delete 2","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Leb14"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Leb14"},"content":"bye","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Leb14":22}}] diff --git a/Leb14_ip_master/commits.json b/Leb14_ip_master/commits.json index 602c8bc7..20c304a3 100644 --- a/Leb14_ip_master/commits.json +++ b/Leb14_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Leb14":[{"date":"2023-08-23","commitResults":[{"hash":"df306c174739a081d9dda53d195bc94f902eb138","isMergeCommit":false,"messageTitle":"Level - 0","messageBody":"Level - 0 increment\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":6}}},{"hash":"b1c09ef70da2ad43c697da3552b8a2e6a9af4dbb","isMergeCommit":false,"messageTitle":"Level - 1","messageBody":"Level - 1 increment\n","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":2}}},{"hash":"ba8f9fdb9f44e249623288717643fe58d1aff3e0","isMergeCommit":false,"messageTitle":"Revert \"Level - 1\"","messageBody":"This reverts commit b1c09ef70da2ad43c697da3552b8a2e6a9af4dbb.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":25}}},{"hash":"75fd0b03c4c1ff3d598a336136d5c004250779be","isMergeCommit":false,"messageTitle":"Level - 1","messageBody":"Level - 1 increment\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"06e88a1b3e441cc3a06cbc622a14e222298ca248","isMergeCommit":false,"messageTitle":"Level - 3","messageBody":"Level 3 increment\n","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":3}}},{"hash":"13f955413cdbcb795149ce46d63b50f481aa5c27","isMergeCommit":false,"messageTitle":"Revert \"Level - 3\"","messageBody":"This reverts commit 06e88a1b3e441cc3a06cbc622a14e222298ca248.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":62}}},{"hash":"88f206847442eefc27776c4cfd8823675a640f3e","isMergeCommit":false,"messageTitle":"Level - 2","messageBody":"Level - 2 increment\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":3}}},{"hash":"06522ffad910f84b2a895f4ca5d5e289c3082756","isMergeCommit":false,"messageTitle":"Level - 3","messageBody":"Level - 3 increment\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"6a97adb72e2be78733f701ab199ba2699e186557","isMergeCommit":false,"messageTitle":"Level - 4","messageBody":"Level 4 increment\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":33}}},{"hash":"4b287ffdc4e618a8a9376c9d6716498b4e76e094","isMergeCommit":false,"messageTitle":"A - TextUiTesting","messageBody":"A - TextUiTesting\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-25","commitResults":[{"hash":"be60e345522e90bd478e01553ba9880f3bed36f6","isMergeCommit":false,"messageTitle":"Level - 5","messageBody":"Level 5 increment\n","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":106,"deletions":35}}},{"hash":"271dfd2ffd088c443cf317c28a137813f1350073","isMergeCommit":false,"messageTitle":"Level - 6","messageBody":"Level 6 increment\n","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":12,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"80db0ba35d6e51b2341afe4de19dbece99dc98b7","isMergeCommit":false,"messageTitle":"Level - 7","messageBody":"Level - 7 increment\n","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":2},"java":{"insertions":218,"deletions":12}}},{"hash":"d42bed5f0f9615ea1992cb8682378c779e91e5a6","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Leb14/branch-level-7","messageBody":"Level - 7","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"d50641a963e561b9684037ad1a5647d8efa58c24","isMergeCommit":false,"messageTitle":"Level - 8","messageBody":"Level 8 increment\n","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":64,"deletions":10}}},{"hash":"3ca80dea5d53b47b7757ce0a25a837b7f0a090a1","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Leb14/branch-level-8","messageBody":"Level - 8","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"9f0cadd832d316939767e2c2a40e308e6bd06e18","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"A MoreOOP increment\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":9},"java":{"insertions":552,"deletions":204}}},{"hash":"80a512c993c7814970891bc966c46519e9ce0945","isMergeCommit":true,"messageTitle":"Merge pull request #3 from Leb14/add-gradle-support","messageBody":"Add gradle support","fileTypesAndContributionMap":{}},{"hash":"1429e73a21f780404ab3e8140af919a1ca46ca4b","isMergeCommit":false,"messageTitle":"Revert \"Merge pull request #3 from Leb14/add-gradle-support\"","messageBody":"This reverts commit 80a512c993c7814970891bc966c46519e9ce0945, reversing\nchanges made to 9f0cadd832d316939767e2c2a40e308e6bd06e18.\n","fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":42},"sh":{"insertions":0,"deletions":0}}},{"hash":"ae31ae6cdd6c822918b47ad533a935c688196ed6","isMergeCommit":false,"messageTitle":"A-packages","messageBody":"A packages increment\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":927,"deletions":1}}},{"hash":"401731fd3b163805c6c7ef3653c90d2cd0a58d83","isMergeCommit":false,"messageTitle":"Revert \"A-packages\"","messageBody":"This reverts commit ae31ae6cdd6c822918b47ad533a935c688196ed6.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":1,"deletions":927}}},{"hash":"de6046304635c0b88b590f86978760580b109df7","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"A-Packages increment\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":99,"deletions":5}}},{"hash":"dd21484746ae78104e97da0ee43e9e0d3b3ecf57","isMergeCommit":true,"messageTitle":"Merge pull request #4 from Leb14/master","messageBody":"add gradle support","fileTypesAndContributionMap":{}},{"hash":"5722b6782addd2dbb82f7a8751c42640a9bef839","isMergeCommit":false,"messageTitle":"Revert \"Merge pull request #4 from Leb14/master\"","messageBody":"This reverts commit dd21484746ae78104e97da0ee43e9e0d3b3ecf57, reversing\nchanges made to ed6d4d25bd4e34461919ffe785a6f10f4c087552.\n","fileTypesAndContributionMap":{"gradle":{"insertions":42,"deletions":0},"txt":{"insertions":0,"deletions":33},"java":{"insertions":6,"deletions":955},"sh":{"insertions":0,"deletions":0}}},{"hash":"5c822510e0c6685130c0dea9cf65d188caaecee9","isMergeCommit":true,"messageTitle":"Merge pull request #5 from Leb14/add-gradle-support","messageBody":"Add gradle support","fileTypesAndContributionMap":{}},{"hash":"e7c2e2da9e5f02afc8049104acf84bef066ca7f9","isMergeCommit":false,"messageTitle":"Revert \"Merge pull request #5 from Leb14/add-gradle-support\"","messageBody":"This reverts commit 5c822510e0c6685130c0dea9cf65d188caaecee9, reversing\nchanges made to de6046304635c0b88b590f86978760580b109df7.\n","fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":42},"txt":{"insertions":33,"deletions":0},"java":{"insertions":955,"deletions":6},"sh":{"insertions":0,"deletions":0}}},{"hash":"9512f1ec764faaf7f9fa760d06eda3f53fa06445","isMergeCommit":false,"messageTitle":"Revert \"Merge pull request #4 from Leb14/master\"","messageBody":"This reverts commit dd21484746ae78104e97da0ee43e9e0d3b3ecf57, reversing\nchanges made to ed6d4d25bd4e34461919ffe785a6f10f4c087552.\n","fileTypesAndContributionMap":{"gradle":{"insertions":42,"deletions":0},"txt":{"insertions":0,"deletions":33},"java":{"insertions":6,"deletions":955},"sh":{"insertions":0,"deletions":0}}},{"hash":"e325a1d307b0f6f91bda7cfc21c8baa417dcfac4","isMergeCommit":false,"messageTitle":"Revert \"Merge pull request #5 from Leb14/add-gradle-support\"","messageBody":"This reverts commit 5c822510e0c6685130c0dea9cf65d188caaecee9, reversing\nchanges made to de6046304635c0b88b590f86978760580b109df7.\n","fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":42},"txt":{"insertions":33,"deletions":0},"java":{"insertions":955,"deletions":6},"sh":{"insertions":0,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"2952ba69b2f117497cc776f90927b62b45ef7620","isMergeCommit":false,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":42,"deletions":0}}},{"hash":"e2a9b455ecc5b1355d260cafee7d493dec125fba","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"A-Junit increment\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":0},"txt":{"insertions":3,"deletions":10},"java":{"insertions":294,"deletions":0}}}]},{"date":"2023-09-02","commitResults":[{"hash":"bc4891c9b415a3950629a1a1007ad73f634f3923","isMergeCommit":false,"messageTitle":"Amend FileHandler","messageBody":"Amend FileHandler\n","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":6},"txt":{"insertions":1,"deletions":0},"java":{"insertions":15,"deletions":4}}},{"hash":"f4d9365f8d9dd0c1f463d48524b68d0b1a0c5f32","isMergeCommit":false,"messageTitle":"Add Java Doc and Enhance Parser for Index Handling","messageBody":"add Java Doc\n\nEnhance Parser to handle index numbers for delete, mark, and unmark commands to improve code structure and maintainability.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":609,"deletions":79}}},{"hash":"8e78dcdf885ec52966acafc01cb79a9d5bcfdf4b","isMergeCommit":true,"messageTitle":"Merge pull request #7 from Leb14/branch-A-JavaDoc","messageBody":"Add Java Doc and Enhance Parser for Index Handling","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"69c6019719ec04d31351a12f810cf70251ac4584","isMergeCommit":false,"messageTitle":"Add Coding Standard and Fix some bugs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":5},"java":{"insertions":260,"deletions":223}}},{"hash":"f2c5a579c1c73509be984005d65d6afc7283ab9e","isMergeCommit":true,"messageTitle":"Merge pull request #8 from Leb14/branch-A-CodingStandard","messageBody":"Add Coding Standard and Fix some bugs","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"c5f5377d33d8fdc21876164178c554b01818719d","isMergeCommit":false,"messageTitle":"Add task search functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":169,"deletions":19}}},{"hash":"01b42ff39ac999b425a5371fb88594883932b9a6","isMergeCommit":true,"messageTitle":"Merge pull request #9 from Leb14/branch-level-9","messageBody":"Add task search functionality","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Leb14":{"java":1977,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":6,"txt":29}},"authorContributionVariance":{"Leb14":2849338.8},"authorDisplayNameMap":{"Leb14":"CS2103T-W12-2 CHEN.. HAO"}} +{"authorDailyContributionsMap":{"Leb14":[{"date":"2023-08-23","commitResults":[{"hash":"df306c174739a081d9dda53d195bc94f902eb138","isMergeCommit":false,"messageTitle":"Level - 0","messageBody":"Level - 0 increment\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":6}}},{"hash":"b1c09ef70da2ad43c697da3552b8a2e6a9af4dbb","isMergeCommit":false,"messageTitle":"Level - 1","messageBody":"Level - 1 increment\n","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":2}}},{"hash":"ba8f9fdb9f44e249623288717643fe58d1aff3e0","isMergeCommit":false,"messageTitle":"Revert \"Level - 1\"","messageBody":"This reverts commit b1c09ef70da2ad43c697da3552b8a2e6a9af4dbb.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":25}}},{"hash":"75fd0b03c4c1ff3d598a336136d5c004250779be","isMergeCommit":false,"messageTitle":"Level - 1","messageBody":"Level - 1 increment\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"06e88a1b3e441cc3a06cbc622a14e222298ca248","isMergeCommit":false,"messageTitle":"Level - 3","messageBody":"Level 3 increment\n","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":3}}},{"hash":"13f955413cdbcb795149ce46d63b50f481aa5c27","isMergeCommit":false,"messageTitle":"Revert \"Level - 3\"","messageBody":"This reverts commit 06e88a1b3e441cc3a06cbc622a14e222298ca248.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":62}}},{"hash":"88f206847442eefc27776c4cfd8823675a640f3e","isMergeCommit":false,"messageTitle":"Level - 2","messageBody":"Level - 2 increment\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":3}}},{"hash":"06522ffad910f84b2a895f4ca5d5e289c3082756","isMergeCommit":false,"messageTitle":"Level - 3","messageBody":"Level - 3 increment\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"6a97adb72e2be78733f701ab199ba2699e186557","isMergeCommit":false,"messageTitle":"Level - 4","messageBody":"Level 4 increment\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":33}}},{"hash":"4b287ffdc4e618a8a9376c9d6716498b4e76e094","isMergeCommit":false,"messageTitle":"A - TextUiTesting","messageBody":"A - TextUiTesting\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-25","commitResults":[{"hash":"be60e345522e90bd478e01553ba9880f3bed36f6","isMergeCommit":false,"messageTitle":"Level - 5","messageBody":"Level 5 increment\n","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":106,"deletions":35}}},{"hash":"271dfd2ffd088c443cf317c28a137813f1350073","isMergeCommit":false,"messageTitle":"Level - 6","messageBody":"Level 6 increment\n","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":12,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"80db0ba35d6e51b2341afe4de19dbece99dc98b7","isMergeCommit":false,"messageTitle":"Level - 7","messageBody":"Level - 7 increment\n","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":2},"java":{"insertions":218,"deletions":12}}},{"hash":"d42bed5f0f9615ea1992cb8682378c779e91e5a6","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Leb14/branch-level-7","messageBody":"Level - 7","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"d50641a963e561b9684037ad1a5647d8efa58c24","isMergeCommit":false,"messageTitle":"Level - 8","messageBody":"Level 8 increment\n","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":64,"deletions":10}}},{"hash":"3ca80dea5d53b47b7757ce0a25a837b7f0a090a1","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Leb14/branch-level-8","messageBody":"Level - 8","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"9f0cadd832d316939767e2c2a40e308e6bd06e18","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"A MoreOOP increment\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":9},"java":{"insertions":552,"deletions":204}}},{"hash":"80a512c993c7814970891bc966c46519e9ce0945","isMergeCommit":true,"messageTitle":"Merge pull request #3 from Leb14/add-gradle-support","messageBody":"Add gradle support","fileTypesAndContributionMap":{}},{"hash":"1429e73a21f780404ab3e8140af919a1ca46ca4b","isMergeCommit":false,"messageTitle":"Revert \"Merge pull request #3 from Leb14/add-gradle-support\"","messageBody":"This reverts commit 80a512c993c7814970891bc966c46519e9ce0945, reversing\nchanges made to 9f0cadd832d316939767e2c2a40e308e6bd06e18.\n","fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":42},"sh":{"insertions":0,"deletions":0}}},{"hash":"ae31ae6cdd6c822918b47ad533a935c688196ed6","isMergeCommit":false,"messageTitle":"A-packages","messageBody":"A packages increment\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":927,"deletions":1}}},{"hash":"401731fd3b163805c6c7ef3653c90d2cd0a58d83","isMergeCommit":false,"messageTitle":"Revert \"A-packages\"","messageBody":"This reverts commit ae31ae6cdd6c822918b47ad533a935c688196ed6.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":1,"deletions":927}}},{"hash":"de6046304635c0b88b590f86978760580b109df7","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"A-Packages increment\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":99,"deletions":5}}},{"hash":"dd21484746ae78104e97da0ee43e9e0d3b3ecf57","isMergeCommit":true,"messageTitle":"Merge pull request #4 from Leb14/master","messageBody":"add gradle support","fileTypesAndContributionMap":{}},{"hash":"5722b6782addd2dbb82f7a8751c42640a9bef839","isMergeCommit":false,"messageTitle":"Revert \"Merge pull request #4 from Leb14/master\"","messageBody":"This reverts commit dd21484746ae78104e97da0ee43e9e0d3b3ecf57, reversing\nchanges made to ed6d4d25bd4e34461919ffe785a6f10f4c087552.\n","fileTypesAndContributionMap":{"gradle":{"insertions":42,"deletions":0},"txt":{"insertions":0,"deletions":33},"java":{"insertions":6,"deletions":955},"sh":{"insertions":0,"deletions":0}}},{"hash":"5c822510e0c6685130c0dea9cf65d188caaecee9","isMergeCommit":true,"messageTitle":"Merge pull request #5 from Leb14/add-gradle-support","messageBody":"Add gradle support","fileTypesAndContributionMap":{}},{"hash":"e7c2e2da9e5f02afc8049104acf84bef066ca7f9","isMergeCommit":false,"messageTitle":"Revert \"Merge pull request #5 from Leb14/add-gradle-support\"","messageBody":"This reverts commit 5c822510e0c6685130c0dea9cf65d188caaecee9, reversing\nchanges made to de6046304635c0b88b590f86978760580b109df7.\n","fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":42},"txt":{"insertions":33,"deletions":0},"java":{"insertions":955,"deletions":6},"sh":{"insertions":0,"deletions":0}}},{"hash":"9512f1ec764faaf7f9fa760d06eda3f53fa06445","isMergeCommit":false,"messageTitle":"Revert \"Merge pull request #4 from Leb14/master\"","messageBody":"This reverts commit dd21484746ae78104e97da0ee43e9e0d3b3ecf57, reversing\nchanges made to ed6d4d25bd4e34461919ffe785a6f10f4c087552.\n","fileTypesAndContributionMap":{"gradle":{"insertions":42,"deletions":0},"txt":{"insertions":0,"deletions":33},"java":{"insertions":6,"deletions":955},"sh":{"insertions":0,"deletions":0}}},{"hash":"e325a1d307b0f6f91bda7cfc21c8baa417dcfac4","isMergeCommit":false,"messageTitle":"Revert \"Merge pull request #5 from Leb14/add-gradle-support\"","messageBody":"This reverts commit 5c822510e0c6685130c0dea9cf65d188caaecee9, reversing\nchanges made to de6046304635c0b88b590f86978760580b109df7.\n","fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":42},"txt":{"insertions":33,"deletions":0},"java":{"insertions":955,"deletions":6},"sh":{"insertions":0,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"2952ba69b2f117497cc776f90927b62b45ef7620","isMergeCommit":false,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":42,"deletions":0}}},{"hash":"e2a9b455ecc5b1355d260cafee7d493dec125fba","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"A-Junit increment\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":0},"txt":{"insertions":3,"deletions":10},"java":{"insertions":294,"deletions":0}}}]},{"date":"2023-09-02","commitResults":[{"hash":"bc4891c9b415a3950629a1a1007ad73f634f3923","isMergeCommit":false,"messageTitle":"Amend FileHandler","messageBody":"Amend FileHandler\n","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":6},"txt":{"insertions":1,"deletions":0},"java":{"insertions":15,"deletions":4}}},{"hash":"f4d9365f8d9dd0c1f463d48524b68d0b1a0c5f32","isMergeCommit":false,"messageTitle":"Add Java Doc and Enhance Parser for Index Handling","messageBody":"add Java Doc\n\nEnhance Parser to handle index numbers for delete, mark, and unmark commands to improve code structure and maintainability.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":609,"deletions":79}}},{"hash":"8e78dcdf885ec52966acafc01cb79a9d5bcfdf4b","isMergeCommit":true,"messageTitle":"Merge pull request #7 from Leb14/branch-A-JavaDoc","messageBody":"Add Java Doc and Enhance Parser for Index Handling","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"69c6019719ec04d31351a12f810cf70251ac4584","isMergeCommit":false,"messageTitle":"Add Coding Standard and Fix some bugs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":5},"java":{"insertions":260,"deletions":223}}},{"hash":"f2c5a579c1c73509be984005d65d6afc7283ab9e","isMergeCommit":true,"messageTitle":"Merge pull request #8 from Leb14/branch-A-CodingStandard","messageBody":"Add Coding Standard and Fix some bugs","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"c5f5377d33d8fdc21876164178c554b01818719d","isMergeCommit":false,"messageTitle":"Add task search functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":169,"deletions":19}}},{"hash":"01b42ff39ac999b425a5371fb88594883932b9a6","isMergeCommit":true,"messageTitle":"Merge pull request #9 from Leb14/branch-level-9","messageBody":"Add task search functionality","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"d902a8b212abd0a94efbe4dc5ee3292f17e13fb6","isMergeCommit":false,"messageTitle":"Rename Tasks, ToDos, Events and Deadlines class.","messageBody":"Tasks class to Task\nToDos class to ToDo\nEvents class to Event\nDeadlines class to Deadline\n","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":100}}}]}]},"authorFileTypeContributionMap":{"Leb14":{"java":1975,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":6,"txt":29}},"authorContributionVariance":{"Leb14":2438947.8},"authorDisplayNameMap":{"Leb14":"CS2103T-W12-2 CHEN.. HAO"}} diff --git a/LoMaply_ip_master/authorship.json b/LoMaply_ip_master/authorship.json index 0a499ebf..4729d9d4 100644 --- a/LoMaply_ip_master/authorship.json +++ b/LoMaply_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":"LoMaply"},"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":"-"},"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":"LoMaply"},"content":" mainClass.set(\"Duke\")","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" archiveBaseName \u003d \"jyuuni\"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" archiveVersion \u003d \"v0.1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":42,"LoMaply":6}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" * Class to initialise and run the chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" * Constructor for a chatbot instance.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" * @param fileDirectory Directory to store chatbot data.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" public Duke(String fileDirectory) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" storage \u003d new Storage(fileDirectory);","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" * Initialises chatbot by loading data from file, queries user for decision when file cannot be read.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" public void initialise() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" if (!storage.loadData(taskList)) { // Error with loading data file, prompts for user input for next step","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" boolean isUnresolved \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" Scanner userInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" while (isUnresolved) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" String input \u003d userInput.nextLine().toUpperCase();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" switch (input) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" case \"Y\":","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" this.runJyuuni();","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" isUnresolved \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" case \"N\":","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" isUnresolved \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Exiting program... Restore or delete the data file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Please reply with Y/N only\");","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" userInput.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" } else { // No error with reading data","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" this.runJyuuni();","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" * Runs chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" private void runJyuuni() {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" boolean isRun \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" Scanner userInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Hey its Jyuuni, your helpful assistant.\\n How can I help you?\");","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" // Requests user input until program is instructed to end.","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" while (isRun) {","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" String input \u003d userInput.nextLine();","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" isRun \u003d Parser.parseCommand(input, taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" storage.writeToFile(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" userInput.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" new Duke(\"./data\").initialise();","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":4,"LoMaply":70}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import taskutil.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"import taskutil.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"import taskutil.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"import taskutil.Todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" * Contains methods to read commands and dates from user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" // Format of date to be received as user input, saved to or read from data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" private static final DateTimeFormatter DATE_FORMAT \u003d DateTimeFormatter.ofPattern(\"dd.MM.yyyy HHmm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" * Parses Date from string to LocalDateTime object.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" * @param dateString String in the DATE_FORMAT form.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" * @return LocalDateTime object.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" * @throws DateTimeParseException To be handled in parseUserInput().","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" public static LocalDateTime parseDate(String dateString) throws DateTimeParseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" return LocalDateTime.parse(dateString, DATE_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" * Converts LocalDateTime object to String for storing in data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" * @param dateTime LocalDateTime object to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" * @return String in the DATE_FORMAT form.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" public static String formatDate(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" return dateTime.format(DATE_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" * Parses and acts on user input for chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" * @param userInput String to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" * @param taskList TaskList to be modified based on command used.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" * @return boolean to determine if chatbot should wait for next command.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" public static boolean parseCommand(String userInput, TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" String[] splitInput \u003d userInput.split(\" \", 2); // Limit 2 to only separate out command word.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" switch (splitInput[0]) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" case \"mark\":","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" int index \u003d Integer.parseInt(splitInput[1]) - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" taskList.changeStatusIndex(index, true);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" } catch (NumberFormatException e) { // If argument of \"mark\" is not a number.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"You need to provide a valid number\");","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" int index \u003d Integer.parseInt(splitInput[1]) - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" taskList.changeStatusIndex(index, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" } catch (NumberFormatException e) { // If argument of \"unmark\" is not a number.","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"You need to provide a valid number\");","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" case \"delete\":","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" int index \u003d Integer.parseInt(splitInput[1]) - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" taskList.deleteTask(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" } catch (NumberFormatException e) { // If argument of \"delete\" is not a number.","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"You need to provide a valid number:\\n\" + \" eg. delete 1\");","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" case \"todo\":","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" if (splitInput.length !\u003d 2) { // Checks for description before creating task.","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" + \" todo [DESCRIPTION]\");","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":" Task todo \u003d new Todo(splitInput[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(todo, true);","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"LoMaply"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"LoMaply"},"content":" String[] deadVar \u003d splitInput[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"LoMaply"},"content":" Task deadline \u003d new Deadline(deadVar[0], parseDate(deadVar[1]));","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(deadline, true);","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"LoMaply"},"content":" } catch (ArrayIndexOutOfBoundsException e) { // String not split due to improper format","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"LoMaply"},"content":" + \" deadline [DESCRIPTION] /by [dd.mm.yyyy]\");","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"LoMaply"},"content":" } catch (DateTimeParseException e) { // Date not formatted properly","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Try the date format [dd.mm.yyyy tttt]:\"","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"LoMaply"},"content":" + \"\\n eg. [05.08.2020 1500] for 5 Aug 2020, 3PM\");","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"LoMaply"},"content":" case \"event\":","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"LoMaply"},"content":" // Using 1 split statement that splits by /(from|to) allows wrong combos like \"/to x /from x\".","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"LoMaply"},"content":" String[] eventVar \u003d splitInput[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"LoMaply"},"content":" String[] times \u003d eventVar[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"LoMaply"},"content":" LocalDateTime start \u003d parseDate(times[0]);","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"LoMaply"},"content":" LocalDateTime end \u003d parseDate(times[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"LoMaply"},"content":" if (start.isAfter(end)) { // Checks that event start \u003c\u003d end","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"An event cannot end before it starts... might wanna check your dates\");","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"LoMaply"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"LoMaply"},"content":" Task event \u003d new Event(eventVar[0], start, end);","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(event, true);","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"LoMaply"},"content":" } catch (ArrayIndexOutOfBoundsException e) { // String not split due to improper format","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"LoMaply"},"content":" + \" event [DESCRIPTION] /from [dd.mm.yyyy] /to [dd.mm.yyyy]\");","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"LoMaply"},"content":" } catch (DateTimeParseException e) { // Date not formatted properly","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Try the date format [dd.mm.yyyy tttt]:\"","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"LoMaply"},"content":" + \"\\n eg. [05.08.2020 1500] for 5 Aug 2020, 3PM\");","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"LoMaply"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"LoMaply"},"content":" Ui.output(taskList.queryList(splitInput[1]));","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"LoMaply"},"content":" case \"list\":","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"LoMaply"},"content":" Ui.output(taskList.listToString());","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"LoMaply"},"content":" case \"end\":","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Come back if you need anything else!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"LoMaply"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"LoMaply"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Sorry, I don\u0027t recognise this comment :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"LoMaply"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LoMaply":131}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import taskutil.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":" * Contains methods to format text output for chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" * Formats chatbot output with borders, first line indentation and new line character at the end.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" * @param message Formatted message to be displayed to user.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" public static void output(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" String line \u003d \" ____________________________________________________________\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" String template \u003d line + \" %s\\n\" + line;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" System.out.printf((template) + \"%n\", message);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" * Formats chatbot output specifically for adding/removing tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" public static void taskOutput(Task task, String action, int size) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" String taskMessage \u003d \"I\u0027ve %s the following task as requested:\\n %s\\n \"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" + \"There are currently %d tasks in your list.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" Ui.output(String.format(taskMessage, action, task.toString(), size));","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LoMaply":29}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"import taskutil.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"import taskutil.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"import taskutil.Todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" * Contains methods to create and edit file directory for storing and loading chatbot data.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" private static final String FILE_NAME \u003d \"TaskData.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" private final String fileDirectory;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" private final String fileLocation;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" * Constructor for Storage object, containing location of data tile.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" * @param fileDirectory File location of data file.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" public Storage(String fileDirectory) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" this.fileDirectory \u003d fileDirectory;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" this.fileLocation \u003d fileDirectory + \"/\" + FILE_NAME;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" * Creates directory and txt file for storing task data if they do not exist.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" * @return True if directory and txt file exist/created successfully.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" private boolean openFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" File directory \u003d new File(fileDirectory);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" File dataFile \u003d new File(fileDirectory + \"/\" + FILE_NAME);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" if (directory.mkdir() \u0026\u0026 dataFile.createNewFile()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"File to store task data have been created and stored at:\\n \"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" + fileDirectory + \"/\" + FILE_NAME);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" * Write data from ArrayList of tasks to a file.","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" * @param taskList An ArrayList of tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" public void writeToFile(TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" FileWriter file \u003d new FileWriter(fileLocation);","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" file.write(taskList.listToStringData());","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" file.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" * Loads task data from txt file to chatbot.","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":" * @return True when file data loaded to chatbot successfully.","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" public boolean loadData(TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" if (!this.openFile()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"An error occured where the file cannot be read\");","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":" File dataFile \u003d new File(fileLocation);","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"LoMaply"},"content":" Scanner reader \u003d new Scanner(dataFile);","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"LoMaply"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"LoMaply"},"content":" String data \u003d reader.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"LoMaply"},"content":" String[] splitInput \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"LoMaply"},"content":" boolean isDone \u003d splitInput[1].equals(\"X\");","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"LoMaply"},"content":" // Data is in format [type, isDone, title, from/by, to], from/by/to are only present depending on type.","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"LoMaply"},"content":" switch(splitInput[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"LoMaply"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"LoMaply"},"content":" Todo todo \u003d new Todo(splitInput[2]);","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"LoMaply"},"content":" todo.changeStatus(isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(todo, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"LoMaply"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"LoMaply"},"content":" Deadline deadline \u003d new Deadline(splitInput[2], Parser.parseDate(splitInput[3]));","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"LoMaply"},"content":" deadline.changeStatus(isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(deadline, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"LoMaply"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"LoMaply"},"content":" LocalDateTime start \u003d Parser.parseDate(splitInput[3]);","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"LoMaply"},"content":" LocalDateTime end \u003d Parser.parseDate(splitInput[4]);","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"LoMaply"},"content":" Event event \u003d new Event(splitInput[2], start, end);","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"LoMaply"},"content":" event.changeStatus(isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(event, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"LoMaply"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"LoMaply"},"content":" Ui.output(String.format(\"Unknown symbol [%s] detected\", splitInput[0]));","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"LoMaply"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"LoMaply"},"content":" } catch (ArrayIndexOutOfBoundsException e) { // File formatted with wrong no. of \" | \" dividers for task types.","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"There seems to be a problem with reading in data from:\\n [\" + fileLocation","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"LoMaply"},"content":" + \"]\\n\\n Proceeding will overwrite the current data file [Y/N]:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"LoMaply"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"LoMaply"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"LoMaply":120}},{"path":"src/main/java/taskutil/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" * Class for Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" protected LocalDateTime limit;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" * Constructor for Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" * @param limit Deadline of task as a LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" public Deadline(String title, LocalDateTime limit) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" super(title);","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" this.limit \u003d limit;","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" String time \u003d String.format(\" (by: %s)\", limit.format(DISPLAY_FORMAT));","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" return \"[D]\" + super.toString() + time;","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" * Convert Deadline task to a string for storing in data file.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string with data for Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" return \"D\" + super.toFileString() + \" | \" + Parser.formatDate(limit);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":38}},{"path":"src/main/java/taskutil/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" * Class for Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" * Constructor for Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" * @param start Start of Event as LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" * @param end End of Event as LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" public Event(String title, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" super(title);","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" String from \u003d start.format(DISPLAY_FORMAT);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" String to \u003d end.format(DISPLAY_FORMAT);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" String time \u003d String.format(\" (from: %s to: %s)\", from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" return \"[E]\" + super.toString() + time;","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" * Convert Event task to a string for storing in data file.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string with data for Event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" String period \u003d String.format(\" | %s | %s\", Parser.formatDate(start), Parser.formatDate(end));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" return \"E\" + super.toFileString() + period;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":44}},{"path":"src/main/java/taskutil/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":" * Class for Task objects and methods to modify.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" // Format of date to be displayed to user.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" protected static final DateTimeFormatter DISPLAY_FORMAT \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy, hh:mm a\");","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" protected String title;","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" protected Boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" * Constructor for general Task object, called in subclasses.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" public Task(String title) {","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" this.title \u003d title;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" * Get completed status of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" * @return X if task is completed, a blank space otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" public String getStatus() {","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" * Modify status of current task.","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" * @param isCompleted New status of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" public void changeStatus(boolean isCompleted) {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" this.isDone \u003d isCompleted;","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" * Checks if task title contains input query.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" * @return True if task contains query.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" public boolean contains(String query) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" return this.title.contains(query);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" * Converts a task to a formatted string.","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" * @return Status and title of task in string.","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" return String.format(\"[%s] %s\", this.getStatus(), title);","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" * Returns a base string to be used for storing in data file.","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string, to be further modified by overriding methods in child classes.","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" return String.format(\" | %s | %s\", this.getStatus(), title);","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"LoMaply":65}},{"path":"src/main/java/taskutil/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" * Class for a list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" * Constructor for TaskList using ArrayList.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" taskList \u003d new ArrayList\u003c\u003e(1);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" * Modify status of task based on index.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" * @param index ArrayList index of task to be modified.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" * @param isCompleted New status of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" public void changeStatusIndex(int index, boolean isCompleted) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" Task pendingTask \u003d taskList.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" pendingTask.isDone \u003d isCompleted;","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Task updated as requested:\\n \" + pendingTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" } catch (IndexOutOfBoundsException e) { // When index falls outside ArrayList.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"I can\u0027t modify a task that doesn\u0027t exist...\\n Try a number from the list\");","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" * Add task to taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" * @param task Task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" * @param printMessage Determines whether to show task added message.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" public void addTask(Task task, boolean printMessage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" if (printMessage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" Ui.taskOutput(task, \"added\", taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" * Delete task from taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" * @param index ArrayList index of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" Task delete \u003d taskList.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" Ui.taskOutput(delete, \"removed\", taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" } catch (IndexOutOfBoundsException e) { // When index falls outside ArrayList.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"I can\u0027t remove a task that doesn\u0027t exist...\\n Try a number from the list\");","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" * Returns list of all tasks matching input query.","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" * @param query String to match tasks with.","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" * @return Numbered list of all tasks matching query.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" public String queryList(String query) {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" StringBuilder allTasks \u003d new StringBuilder(\"These tasks match your query:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" for (Task task: taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" if (task.contains(query)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":" allTasks.append(String.format(\"\\n %d.%s\", i++, task));","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" return allTasks.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":" * Converts ArrayList of tasks to a formatted string suited for storing in data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string of tasks to store in data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"LoMaply"},"content":" public String listToStringData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"LoMaply"},"content":" StringBuilder fileData \u003d new StringBuilder();","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"LoMaply"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"LoMaply"},"content":" String taskString \u003d task.toFileString() + \"\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"LoMaply"},"content":" fileData.append(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"LoMaply"},"content":" return fileData.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"LoMaply"},"content":" * Converts ArrayList of tasks to a string as a numbered list for chatbot output.","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"LoMaply"},"content":" * @return List of all tasks, formatted as numbered list.","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"LoMaply"},"content":" public String listToString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"LoMaply"},"content":" StringBuilder allTasks \u003d new StringBuilder(\"Here are your tasks:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"LoMaply"},"content":" int taskNo \u003d taskList.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"LoMaply"},"content":" for (int i \u003d 0; i \u003c taskNo; i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"LoMaply"},"content":" allTasks.append(String.format(\"\\n %d.%s\", (i + 1), taskList.get(i).toString()));","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"LoMaply"},"content":" return allTasks.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LoMaply":102}},{"path":"src/main/java/taskutil/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":" * Class for To-do task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" * Constructor for To-do object, using super constructor.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" public Todo(String title) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" super(title);","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" * Convert To-do task to a string for storing in data file.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string with data for To-do task.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" return \"T\" + super.toFileString();","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":29}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" public void parseDate_exceptionThrown_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" Parser.parseDate(\"idk\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"Text \u0027idk\u0027 could not be parsed at index 0\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":19}},{"path":"src/test/java/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" private final Storage storage \u003d new Storage(\"./data\");","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" public void loadData_openFile_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" Assertions.assertTrue(storage.loadData(new TaskList()));","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":15}},{"path":"src/test/java/taskutil/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" private final DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"dd.MM.yyyy HHmm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" private final LocalDateTime dateTime \u003d LocalDateTime.parse(\"12.04.2020 1530\", format);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" private final Deadline task2 \u003d new Deadline(\"Finish homework\", dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" private final Event task3 \u003d new Event(\"3 Japan trip\", dateTime, dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" private final Todo task1 \u003d new Todo(\"Buy food bring home\");","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" public void addTask_deleteTask_success() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task2, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"D | | Finish homework | 12.04.2020 1530\\n\", tasks.listToStringData());","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" tasks.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"\", tasks.listToStringData());","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" public void changeStatus_listToStringData_correctOutput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" task1.changeStatus(true);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task1, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task2, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task3, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" String expected \u003d \"T | X | Buy food bring home\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" + \"D | | Finish homework | 12.04.2020 1530\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" + \"E | | 3 Japan trip | 12.04.2020 1530 | 12.04.2020 1530\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(expected, tasks.listToStringData());","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" public void queryList_correctOutput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task1, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task2, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task3, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" String expected1 \u003d \"These tasks match your query:\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" + \" 1.[E][ ] 3 Japan trip (from: 12 Apr 2020, 03:30 PM to: 12 Apr 2020, 03:30 PM)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" String expected2 \u003d \"These tasks match your query:\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" + \" 1.[T][ ] Buy food bring home\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" + \" 2.[D][ ] Finish homework (by: 12 Apr 2020, 03:30 PM)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(expected1, tasks.queryList(\"3\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(expected2, tasks.queryList(\"home\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":61}},{"path":"src/test/java/taskutil/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" private final DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"dd.MM.yyyy HHmm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" private final LocalDateTime dateTime \u003d LocalDateTime.parse(\"12.04.2020 1530\", format);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" private final Deadline task2 \u003d new Deadline(\"Finish homework\", dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" private final Event task3 \u003d new Event(\"Japan trip\", dateTime, dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" private final Todo task1 \u003d new Todo(\"Buy food\");","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" public void changeStatus_toString_correctStatus() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" task2.changeStatus(true);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" task3.changeStatus(true);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"[T][ ] Buy food\", task1.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"[D][X] Finish homework (by: 12 Apr 2020, 03:30 PM)\", task2.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"[E][X] Japan trip (from: 12 Apr 2020, 03:30 PM to: 12 Apr 2020, 03:30 PM)\",","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" task3.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"todo buy 2 groceries","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"deadline eat lunch /by 1st june mon","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"deadline eat lunch /by 01.06.2024 1500","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"event holiday /to july","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"event japan holiday trip /from 08.07.2023 0000 /to 07.07.2023 1930","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"event japan holiday trip /from 06.07.2023 0000 /to 07.07.2023 1930","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"deadline stuff /by 01 June 25 4am","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"hello","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"mark 4","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"unmark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":"unmark three","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"find h","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":"delete task 1","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":"delete 2","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":"delete 3","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":"delete 1","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":"delete 1","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":"end","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":25}}] +[{"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":"LoMaply"},"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":"-"},"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":"LoMaply"},"content":" mainClass.set(\"Duke\")","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" archiveBaseName \u003d \"jyuuni\"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" archiveVersion \u003d \"v0.1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":42,"LoMaply":6}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" * Class to initialise and run the chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" * Constructor for a chatbot instance.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" * @param fileDirectory Directory to store chatbot data.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" public Duke(String fileDirectory) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" storage \u003d new Storage(fileDirectory);","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" * Initialises chatbot by loading data from file, queries user for decision when file cannot be read.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" public void initialise() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" if (!storage.loadData(taskList)) { // Error with loading data file, prompts for user input for next step","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" boolean isUnresolved \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" Scanner userInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" while (isUnresolved) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" String input \u003d userInput.nextLine().toUpperCase();","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" switch (input) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" case \"Y\":","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" this.runJyuuni();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" isUnresolved \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" case \"N\":","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" isUnresolved \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Exiting program... Restore or delete the data file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Please reply with Y/N only\");","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" userInput.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" } else { // No error with reading data","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" this.runJyuuni();","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" * Runs chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" private void runJyuuni() {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" boolean isRun \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" Scanner userInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Hey its Jyuuni, your helpful assistant.\\n How can I help you?\");","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" // Requests user input until program is instructed to end.","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" while (isRun) {","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" String input \u003d userInput.nextLine();","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" isRun \u003d Parser.parseCommand(input, taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" storage.writeToFile(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" userInput.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" * Main method to run program.","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" * @param args Unused arguments.","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":" new Duke(\"./data\").initialise();","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":4,"LoMaply":76}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import taskutil.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"import taskutil.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"import taskutil.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"import taskutil.Todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" * Contains methods to read commands and dates from user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" // Format of date to be received as user input, saved to or read from data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" private static final DateTimeFormatter DATE_FORMAT \u003d DateTimeFormatter.ofPattern(\"dd.MM.yyyy HHmm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" * Parses Date from string to LocalDateTime object.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" * @param dateString String in the DATE_FORMAT form.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" * @return LocalDateTime object.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" * @throws DateTimeParseException To be handled in parseUserInput().","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" public static LocalDateTime parseDate(String dateString) throws DateTimeParseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" return LocalDateTime.parse(dateString, DATE_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" * Converts LocalDateTime object to String for storing in data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" * @param dateTime LocalDateTime object to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" * @return String in the DATE_FORMAT form.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" public static String formatDate(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" return dateTime.format(DATE_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" * Parses and acts on user input for chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" * @param userInput String to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" * @param taskList TaskList to be modified based on command used.","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" * @return boolean to determine if chatbot should wait for next command.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" public static boolean parseCommand(String userInput, TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" String[] splitInput \u003d userInput.split(\" \", 2); // Limit 2 to only separate out command word.","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" switch (splitInput[0]) {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" case \"mark\":","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" int index \u003d Integer.parseInt(splitInput[1]) - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" taskList.changeStatusByIndex(index, true);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" } catch (NumberFormatException e) { // If argument of \"mark\" is not a number.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"You need to provide a valid number\");","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" int index \u003d Integer.parseInt(splitInput[1]) - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" taskList.changeStatusByIndex(index, false);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" } catch (NumberFormatException e) { // If argument of \"unmark\" is not a number.","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"You need to provide a valid number\");","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" case \"delete\":","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" int index \u003d Integer.parseInt(splitInput[1]) - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":" taskList.deleteTask(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" } catch (NumberFormatException e) { // If argument of \"delete\" is not a number.","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"You need to provide a valid number:\\n\" + \" eg. delete 1\");","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" case \"todo\":","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":" if (splitInput.length !\u003d 2) { // Checks for description before creating task.","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" + \" todo [DESCRIPTION]\");","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"LoMaply"},"content":" Task todo \u003d new Todo(splitInput[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(todo, true);","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"LoMaply"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"LoMaply"},"content":" String[] deadVar \u003d splitInput[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"LoMaply"},"content":" Task deadline \u003d new Deadline(deadVar[0], parseDate(deadVar[1]));","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(deadline, true);","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"LoMaply"},"content":" } catch (ArrayIndexOutOfBoundsException e) { // String not split due to improper format","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"LoMaply"},"content":" + \" deadline [DESCRIPTION] /by [dd.mm.yyyy]\");","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"LoMaply"},"content":" } catch (DateTimeParseException e) { // Date not formatted properly","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Try the date format [dd.mm.yyyy tttt]:\"","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"LoMaply"},"content":" + \"\\n eg. [05.08.2020 1500] for 5 Aug 2020, 3PM\");","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"LoMaply"},"content":" case \"event\":","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"LoMaply"},"content":" // Using 1 split statement that splits by /(from|to) allows wrong combos like \"/to x /from x\".","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"LoMaply"},"content":" String[] eventVar \u003d splitInput[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"LoMaply"},"content":" String[] times \u003d eventVar[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"LoMaply"},"content":" LocalDateTime start \u003d parseDate(times[0]);","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"LoMaply"},"content":" LocalDateTime end \u003d parseDate(times[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"LoMaply"},"content":" if (start.isAfter(end)) { // Checks that event start \u003c\u003d end","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"An event cannot end before it starts... might wanna check your dates\");","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"LoMaply"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"LoMaply"},"content":" Task event \u003d new Event(eventVar[0], start, end);","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(event, true);","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"LoMaply"},"content":" } catch (ArrayIndexOutOfBoundsException e) { // String not split due to improper format","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"LoMaply"},"content":" + \" event [DESCRIPTION] /from [dd.mm.yyyy] /to [dd.mm.yyyy]\");","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"LoMaply"},"content":" } catch (DateTimeParseException e) { // Date not formatted properly","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Try the date format [dd.mm.yyyy tttt]:\"","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"LoMaply"},"content":" + \"\\n eg. [05.08.2020 1500] for 5 Aug 2020, 3PM\");","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"LoMaply"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"LoMaply"},"content":" Ui.output(taskList.queryList(splitInput[1]));","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"LoMaply"},"content":" case \"list\":","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"LoMaply"},"content":" Ui.output(taskList.listToString());","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"LoMaply"},"content":" case \"end\":","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Come back if you need anything else!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"LoMaply"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"LoMaply"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Sorry, I don\u0027t recognise this comment :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"LoMaply"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LoMaply":134}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import taskutil.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":" * Contains methods to format text output for chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" * Formats chatbot output with borders, first line indentation and new line character at the end.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" * @param message Formatted message to be displayed to user.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" public static void output(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" String line \u003d \" ____________________________________________________________\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" String template \u003d line + \" %s\\n\" + line;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" System.out.printf((template) + \"%n\", message);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" * Formats chatbot output specifically for adding/removing tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" public static void taskOutput(Task task, Action action, int size) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" String taskMessage \u003d \"I\u0027ve %s the following task as requested:\\n %s\\n \"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" + \"There are currently %d tasks in your list.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" if (action \u003d\u003d Action.ADD) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" Ui.output(String.format(taskMessage, \"added\", task.toString(), size));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" } else if (action \u003d\u003d Action.REMOVE) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" Ui.output(String.format(taskMessage, \"removed\", task.toString(), size));","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" public enum Action {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" ADD,","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" REMOVE","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LoMaply":40}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"import taskutil.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"import taskutil.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"import taskutil.Todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" * Contains methods to create and edit file directory for storing and loading chatbot data.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" private static final String FILE_NAME \u003d \"TaskData.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" private final String fileDirectory;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" private final String fileLocation; // fileLocation concatenates fileDirectory and FILE_NAME.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" * Constructor for Storage object, containing location of data tile.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" * @param fileDirectory File location of data file.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" public Storage(String fileDirectory) {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" this.fileDirectory \u003d fileDirectory;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" this.fileLocation \u003d fileDirectory + \"/\" + FILE_NAME;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" * Creates directory and txt file for storing task data if they do not exist.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" * @return True if directory and txt file exist/created successfully.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" private boolean openFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" File directory \u003d new File(fileDirectory);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" File dataFile \u003d new File(fileDirectory + \"/\" + FILE_NAME);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" if (directory.mkdir() \u0026\u0026 dataFile.createNewFile()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"File to store task data have been created and stored at:\\n \"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" + fileDirectory + \"/\" + FILE_NAME);","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" * Write data from ArrayList of tasks to a file.","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" * @param taskList An ArrayList of tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" public void writeToFile(TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" FileWriter file \u003d new FileWriter(fileLocation);","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" file.write(taskList.listToStringData());","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" file.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" * Loads task data from txt file to chatbot.","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" * @return True when file data loaded to chatbot successfully.","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":" public boolean loadData(TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":" if (!this.openFile()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"An error occured where the file cannot be read\");","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"LoMaply"},"content":" File dataFile \u003d new File(fileLocation);","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"LoMaply"},"content":" Scanner reader \u003d new Scanner(dataFile);","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"LoMaply"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"LoMaply"},"content":" String data \u003d reader.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"LoMaply"},"content":" String[] splitInput \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"LoMaply"},"content":" boolean isDone \u003d splitInput[1].equals(\"X\");","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"LoMaply"},"content":" // Data is in format [type, isDone, title, from/by, to], from/by/to are only present depending on type.","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"LoMaply"},"content":" switch(splitInput[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"LoMaply"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"LoMaply"},"content":" Todo todo \u003d new Todo(splitInput[2]);","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"LoMaply"},"content":" todo.changeStatus(isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(todo, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"LoMaply"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"LoMaply"},"content":" Deadline deadline \u003d new Deadline(splitInput[2], Parser.parseDate(splitInput[3]));","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"LoMaply"},"content":" deadline.changeStatus(isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(deadline, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"LoMaply"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"LoMaply"},"content":" LocalDateTime start \u003d Parser.parseDate(splitInput[3]);","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"LoMaply"},"content":" LocalDateTime end \u003d Parser.parseDate(splitInput[4]);","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"LoMaply"},"content":" Event event \u003d new Event(splitInput[2], start, end);","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"LoMaply"},"content":" event.changeStatus(isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(event, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"LoMaply"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"LoMaply"},"content":" Ui.output(String.format(\"Unknown symbol [%s] detected\", splitInput[0]));","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"LoMaply"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"LoMaply"},"content":" } catch (ArrayIndexOutOfBoundsException e) { // File formatted with wrong no. of \" | \" dividers for task types.","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"There seems to be a problem with reading in data from:\\n [\" + fileLocation","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"LoMaply"},"content":" + \"]\\n\\n Proceeding will overwrite the current data file [Y/N]:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"LoMaply"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"LoMaply"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"LoMaply":124}},{"path":"src/main/java/taskutil/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" * Class for Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" protected LocalDateTime limit;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" * Constructor for Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" * @param limit Deadline of task as a LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" public Deadline(String title, LocalDateTime limit) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" super(title);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" this.limit \u003d limit;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" String time \u003d String.format(\" (by: %s)\", limit.format(DISPLAY_FORMAT));","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" return \"[D]\" + super.toString() + time;","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" * Converts Deadline task to a string for storing in data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string with data for Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" return \"D\" + super.toFileString() + \" | \" + Parser.formatDate(limit);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":40}},{"path":"src/main/java/taskutil/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" * Class for Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" * Constructor for Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" * @param start Start of Event as LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" * @param end End of Event as LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" public Event(String title, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" super(title);","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" String from \u003d start.format(DISPLAY_FORMAT);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" String to \u003d end.format(DISPLAY_FORMAT);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" String time \u003d String.format(\" (from: %s to: %s)\", from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" return \"[E]\" + super.toString() + time;","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" * Converts Event task to a string for storing in data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string with data for Event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" String period \u003d String.format(\" | %s | %s\", Parser.formatDate(start), Parser.formatDate(end));","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" return \"E\" + super.toFileString() + period;","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":46}},{"path":"src/main/java/taskutil/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":" * Class for Task objects and methods to modify.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" // Format of date to be displayed to user.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" protected static final DateTimeFormatter DISPLAY_FORMAT \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy, hh:mm a\");","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" protected String title;","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" protected Boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" * Constructor for general Task object, called in subclasses.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" public Task(String title) {","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" this.title \u003d title;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" * Gets completed status of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" * @return X if task is completed, a blank space otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" public String getStatus() {","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" * Modifies status of current task.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" * @param isCompleted New status of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" public void changeStatus(boolean isCompleted) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" this.isDone \u003d isCompleted;","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" * Checks if task title contains input query.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" * @return True if task contains query.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" public boolean contains(String query) {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" return this.title.contains(query);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" * Converts a task to a formatted string.","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" * @return Status and title of task in string.","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" return String.format(\"[%s] %s\", this.getStatus(), title);","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" * Returns a base string to be used for storing in data file.","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string, to be further modified by overriding methods in child classes.","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" return String.format(\" | %s | %s\", this.getStatus(), title);","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"LoMaply":71}},{"path":"src/main/java/taskutil/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" * Class for a list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" * Constructor for TaskList using ArrayList.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" taskList \u003d new ArrayList\u003c\u003e(1);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" * Modifies status of task based on index.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" * @param index ArrayList index of task to be modified.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" * @param isCompleted New status of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" public void changeStatusByIndex(int index, boolean isCompleted) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" Task pendingTask \u003d taskList.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" pendingTask.isDone \u003d isCompleted;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"Task updated as requested:\\n \" + pendingTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" } catch (IndexOutOfBoundsException e) { // When index falls outside ArrayList.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"I can\u0027t modify a task that doesn\u0027t exist...\\n Try a number from the list\");","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" * Adds task to taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" * @param task Task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" * @param printMessage Determines whether to show task added message.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" public void addTask(Task task, boolean printMessage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" if (printMessage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" Ui.taskOutput(task, Ui.Action.ADD, taskList.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" * Deletes task from taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" * @param index ArrayList index of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" Task delete \u003d taskList.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" Ui.taskOutput(delete, Ui.Action.REMOVE, taskList.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" } catch (IndexOutOfBoundsException e) { // When index falls outside ArrayList.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" Ui.output(\"I can\u0027t remove a task that doesn\u0027t exist...\\n Try a number from the list\");","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" * Returns list of all tasks matching input query.","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" * @param query String to match tasks with.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" * @return Numbered list of all tasks matching query.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" public String queryList(String query) {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":" StringBuilder allTasks \u003d new StringBuilder(\"These tasks match your query:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" for (Task task: taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" if (task.contains(query)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" allTasks.append(String.format(\"\\n %d.%s\", i++, task));","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":" return allTasks.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"LoMaply"},"content":" * Converts ArrayList of tasks to a formatted string suited for storing in data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string of tasks to store in data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"LoMaply"},"content":" public String listToStringData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"LoMaply"},"content":" StringBuilder fileData \u003d new StringBuilder();","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"LoMaply"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"LoMaply"},"content":" String taskString \u003d task.toFileString() + \"\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"LoMaply"},"content":" fileData.append(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"LoMaply"},"content":" return fileData.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"LoMaply"},"content":" * Converts ArrayList of tasks to a string as a numbered list for chatbot output.","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"LoMaply"},"content":" * @return List of all tasks, formatted as numbered list.","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"LoMaply"},"content":" public String listToString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"LoMaply"},"content":" StringBuilder allTasks \u003d new StringBuilder(\"Here are your tasks:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"LoMaply"},"content":" int taskNo \u003d taskList.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"LoMaply"},"content":" for (int i \u003d 0; i \u003c taskNo; i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"LoMaply"},"content":" allTasks.append(String.format(\"\\n %d.%s\", (i + 1), taskList.get(i).toString()));","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"LoMaply"},"content":" return allTasks.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LoMaply":108}},{"path":"src/main/java/taskutil/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":" * Class for To-do task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" * Constructor for To-do object, using super constructor.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" public Todo(String title) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" super(title);","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" * Converts To-do task to a string for storing in data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string with data for To-do task.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" return \"T\" + super.toFileString();","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":31}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" public void parseDate_exceptionThrown_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" Parser.parseDate(\"idk\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"Text \u0027idk\u0027 could not be parsed at index 0\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":19}},{"path":"src/test/java/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" private final Storage storage \u003d new Storage(\"./data\");","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" public void loadData_openFile_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" Assertions.assertTrue(storage.loadData(new TaskList()));","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":15}},{"path":"src/test/java/taskutil/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" private final DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"dd.MM.yyyy HHmm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" private final LocalDateTime dateTime \u003d LocalDateTime.parse(\"12.04.2020 1530\", format);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" private final Deadline task2 \u003d new Deadline(\"Finish homework\", dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" private final Event task3 \u003d new Event(\"3 Japan trip\", dateTime, dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" private final Todo task1 \u003d new Todo(\"Buy food bring home\");","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" public void addTask_deleteTask_success() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task2, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"D | | Finish homework | 12.04.2020 1530\\n\", tasks.listToStringData());","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" tasks.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"\", tasks.listToStringData());","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" public void changeStatus_listToStringData_correctOutput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" task1.changeStatus(true);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task1, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task2, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task3, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" String expected \u003d \"T | X | Buy food bring home\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" + \"D | | Finish homework | 12.04.2020 1530\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" + \"E | | 3 Japan trip | 12.04.2020 1530 | 12.04.2020 1530\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(expected, tasks.listToStringData());","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" public void queryList_correctOutput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task1, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task2, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task3, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" String expected1 \u003d \"These tasks match your query:\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" + \" 1.[E][ ] 3 Japan trip (from: 12 Apr 2020, 03:30 PM to: 12 Apr 2020, 03:30 PM)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" String expected2 \u003d \"These tasks match your query:\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" + \" 1.[T][ ] Buy food bring home\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" + \" 2.[D][ ] Finish homework (by: 12 Apr 2020, 03:30 PM)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(expected1, tasks.queryList(\"3\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(expected2, tasks.queryList(\"home\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":61}},{"path":"src/test/java/taskutil/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" private final DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"dd.MM.yyyy HHmm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" private final LocalDateTime dateTime \u003d LocalDateTime.parse(\"12.04.2020 1530\", format);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" private final Deadline task2 \u003d new Deadline(\"Finish homework\", dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" private final Event task3 \u003d new Event(\"Japan trip\", dateTime, dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" private final Todo task1 \u003d new Todo(\"Buy food\");","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" public void changeStatus_toString_correctStatus() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" task2.changeStatus(true);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" task3.changeStatus(true);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"[T][ ] Buy food\", task1.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"[D][X] Finish homework (by: 12 Apr 2020, 03:30 PM)\", task2.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"[E][X] Japan trip (from: 12 Apr 2020, 03:30 PM to: 12 Apr 2020, 03:30 PM)\",","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" task3.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"todo buy 2 groceries","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"deadline eat lunch /by 1st june mon","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"deadline eat lunch /by 01.06.2024 1500","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"event holiday /to july","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"event japan holiday trip /from 08.07.2023 0000 /to 07.07.2023 1930","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"event japan holiday trip /from 06.07.2023 0000 /to 07.07.2023 1930","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"deadline stuff /by 01 June 25 4am","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"hello","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"mark 4","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"unmark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":"unmark three","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"find h","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":"delete task 1","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":"delete 2","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":"delete 3","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":"delete 1","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":"delete 1","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":"end","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":25}}] diff --git a/LoMaply_ip_master/commits.json b/LoMaply_ip_master/commits.json index 9b20a515..c4cbf4a7 100644 --- a/LoMaply_ip_master/commits.json +++ b/LoMaply_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"LoMaply":[{"date":"2023-08-20","commitResults":[{"hash":"63291ed9b73ad8ea8af3c0520e527069be7adb9a","isMergeCommit":false,"messageTitle":"Add greeting","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"5ffa380033bf4fd3537def7eb97a34924ac9cb35","isMergeCommit":false,"messageTitle":"Add end command, chatbot repeats user input","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":4}}},{"hash":"82ebe45d2e86df08b0edd9ddfc04784709364e9b","isMergeCommit":false,"messageTitle":"Add list command, other user inputs are added to task list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":3}}},{"hash":"487b7d0166e41002c2eeef65d0c3fb8b1e5a329f","isMergeCommit":false,"messageTitle":"Add mark/unmark commands, Task class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":17}}}]},{"date":"2023-08-21","commitResults":[{"hash":"f4d782dd99081a5508cbc2cf9d5b47b91e7d4315","isMergeCommit":false,"messageTitle":"Add todo, deadline, event classes for task types","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":7}}},{"hash":"0260cc6ede862bad4d76cb2ce6886b36059226f6","isMergeCommit":false,"messageTitle":"Add automated UI test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":13,"deletions":2}}},{"hash":"1e9af84bcb0288f1d2f6812a64da01145a7b3df7","isMergeCommit":false,"messageTitle":"Add error handling for wrong user input","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":57,"deletions":21}}}]},{"date":"2023-08-22","commitResults":[{"hash":"17839e9a7b86155ed75598e143c961f8708a12c5","isMergeCommit":false,"messageTitle":"Add delete command, modify task array to use ArrayList","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":49,"deletions":33}}}]},{"date":"2023-08-26","commitResults":[{"hash":"19a6fd47b8cbb5d9a5503133646cd2a52036a918","isMergeCommit":false,"messageTitle":"Add minor style changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":90}}},{"hash":"b3a0af9239340f44ea4d419c97d46649b18fff7a","isMergeCommit":false,"messageTitle":"Add Storage class to read/write task data into file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":224,"deletions":58}}}]},{"date":"2023-08-27","commitResults":[{"hash":"ce7f3be7fc7a2aefd7dc5dd9547a424c7c7215dc","isMergeCommit":false,"messageTitle":"Add error checking for loadData in Storage class, chatbot prompt for file error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":9}}},{"hash":"f3c1096cd88d7709bcb0212c11ac9baa99075301","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"f506f1b9f06de1face8d8ffb354a31f0ff8f1588","isMergeCommit":false,"messageTitle":"Add support for LocalDateTime in Deadline/Event types, Update test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":2},"java":{"insertions":78,"deletions":36}}},{"hash":"3df2faca72e0b55ece63d2714742cb47415e7536","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"7438d02fc9d02ca19c9ba7b32f89c2a29aad9a20","isMergeCommit":false,"messageTitle":"Refactor code for additional OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":278,"deletions":235}}},{"hash":"2d3d73c3e7291b8e85929336bc60bbf327b11dfc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"65373c991aa17702be445fd9439c0dce4b18c873","isMergeCommit":false,"messageTitle":"Add class packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":61,"deletions":15}}},{"hash":"a99c816631145369263f98dc9433f46951481356","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c0ebc6e720fc7d3dfb47b5f288cde958ee3ac6a0","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"22c7aaa15d61e9c99204b0d478901ecc2c300f44","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":105,"deletions":0}}},{"hash":"f95e02b14008118ddc71f76fa544e8a59339d0d4","isMergeCommit":false,"messageTitle":"Add additional Javadocs","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":60,"deletions":1}}},{"hash":"a018c6d7f7bc078145a78b4b0d30680dc3411036","isMergeCommit":false,"messageTitle":"Add additional code formatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":13}}},{"hash":"42afdd367a35dc859760ed8ef2bdc2cd0ad73ab7","isMergeCommit":false,"messageTitle":"Add find command to Parser class, add test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":50,"deletions":5}}},{"hash":"2a718bd7216ae67c94467a879d9f5e3002ad38e1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["branch-A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"767c4dd41da1de7364724401505b83d3f05e17a9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["branch-A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"75eb13339a62f401a310efb9d5d41460f45863f3","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"41c441ad358a780d3a62556da6f4f5d44cbe8da1","isMergeCommit":false,"messageTitle":"Add gradle checkstyle and fix all style issues","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":0,"deletions":1},"java":{"insertions":65,"deletions":68}}},{"hash":"d0f1d7de90b8501469f4859a5efc8b24cebd9940","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-CheckStyle\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"LoMaply":{"java":749,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":6,"txt":25}},"authorContributionVariance":{"LoMaply":28652.33},"authorDisplayNameMap":{"LoMaply":"CS2103T-F12-4 LINU.. LEE"}} +{"authorDailyContributionsMap":{"LoMaply":[{"date":"2023-08-20","commitResults":[{"hash":"63291ed9b73ad8ea8af3c0520e527069be7adb9a","isMergeCommit":false,"messageTitle":"Add greeting","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"5ffa380033bf4fd3537def7eb97a34924ac9cb35","isMergeCommit":false,"messageTitle":"Add end command, chatbot repeats user input","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":4}}},{"hash":"82ebe45d2e86df08b0edd9ddfc04784709364e9b","isMergeCommit":false,"messageTitle":"Add list command, other user inputs are added to task list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":3}}},{"hash":"487b7d0166e41002c2eeef65d0c3fb8b1e5a329f","isMergeCommit":false,"messageTitle":"Add mark/unmark commands, Task class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":17}}}]},{"date":"2023-08-21","commitResults":[{"hash":"f4d782dd99081a5508cbc2cf9d5b47b91e7d4315","isMergeCommit":false,"messageTitle":"Add todo, deadline, event classes for task types","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":7}}},{"hash":"0260cc6ede862bad4d76cb2ce6886b36059226f6","isMergeCommit":false,"messageTitle":"Add automated UI test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":13,"deletions":2}}},{"hash":"1e9af84bcb0288f1d2f6812a64da01145a7b3df7","isMergeCommit":false,"messageTitle":"Add error handling for wrong user input","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":57,"deletions":21}}}]},{"date":"2023-08-22","commitResults":[{"hash":"17839e9a7b86155ed75598e143c961f8708a12c5","isMergeCommit":false,"messageTitle":"Add delete command, modify task array to use ArrayList","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":49,"deletions":33}}}]},{"date":"2023-08-26","commitResults":[{"hash":"19a6fd47b8cbb5d9a5503133646cd2a52036a918","isMergeCommit":false,"messageTitle":"Add minor style changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":90}}},{"hash":"b3a0af9239340f44ea4d419c97d46649b18fff7a","isMergeCommit":false,"messageTitle":"Add Storage class to read/write task data into file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":224,"deletions":58}}}]},{"date":"2023-08-27","commitResults":[{"hash":"ce7f3be7fc7a2aefd7dc5dd9547a424c7c7215dc","isMergeCommit":false,"messageTitle":"Add error checking for loadData in Storage class, chatbot prompt for file error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":9}}},{"hash":"f3c1096cd88d7709bcb0212c11ac9baa99075301","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"f506f1b9f06de1face8d8ffb354a31f0ff8f1588","isMergeCommit":false,"messageTitle":"Add support for LocalDateTime in Deadline/Event types, Update test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":2},"java":{"insertions":78,"deletions":36}}},{"hash":"3df2faca72e0b55ece63d2714742cb47415e7536","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"7438d02fc9d02ca19c9ba7b32f89c2a29aad9a20","isMergeCommit":false,"messageTitle":"Refactor code for additional OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":278,"deletions":235}}},{"hash":"2d3d73c3e7291b8e85929336bc60bbf327b11dfc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"65373c991aa17702be445fd9439c0dce4b18c873","isMergeCommit":false,"messageTitle":"Add class packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":61,"deletions":15}}},{"hash":"a99c816631145369263f98dc9433f46951481356","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c0ebc6e720fc7d3dfb47b5f288cde958ee3ac6a0","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"22c7aaa15d61e9c99204b0d478901ecc2c300f44","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":105,"deletions":0}}},{"hash":"f95e02b14008118ddc71f76fa544e8a59339d0d4","isMergeCommit":false,"messageTitle":"Add additional Javadocs","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":60,"deletions":1}}},{"hash":"a018c6d7f7bc078145a78b4b0d30680dc3411036","isMergeCommit":false,"messageTitle":"Add additional code formatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":13}}},{"hash":"42afdd367a35dc859760ed8ef2bdc2cd0ad73ab7","isMergeCommit":false,"messageTitle":"Add find command to Parser class, add test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":50,"deletions":5}}},{"hash":"2a718bd7216ae67c94467a879d9f5e3002ad38e1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["branch-A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"767c4dd41da1de7364724401505b83d3f05e17a9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["branch-A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"75eb13339a62f401a310efb9d5d41460f45863f3","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"41c441ad358a780d3a62556da6f4f5d44cbe8da1","isMergeCommit":false,"messageTitle":"Add gradle checkstyle and fix all style issues","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":0,"deletions":1},"java":{"insertions":65,"deletions":68}}},{"hash":"d0f1d7de90b8501469f4859a5efc8b24cebd9940","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-CheckStyle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3c8f94c2da5936036a9bd1cde4e3ff8500937f93","isMergeCommit":false,"messageTitle":"Add enum for Ui and fix some javadoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":10}}},{"hash":"18b1284d3c0109c521e5425dbf9be50d05b5a8b5","isMergeCommit":false,"messageTitle":"Fix additional javadocs comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}}]}]},"authorFileTypeContributionMap":{"LoMaply":{"java":791,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":6,"txt":25}},"authorContributionVariance":{"LoMaply":29150.688},"authorDisplayNameMap":{"LoMaply":"CS2103T-F12-4 LINU.. LEE"}} diff --git a/RSXIX_ip_master/authorship.json b/RSXIX_ip_master/authorship.json index 322f465c..0e1e1133 100644 --- a/RSXIX_ip_master/authorship.json +++ b/RSXIX_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"[E] | [X] | hw | Dec 13 2023 0100 - Dec 13 2023 0100","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"RSXIX":1}},{"path":"src/main/java/Duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" Ui.printWelcome();","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" Ui iu \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" Parser her \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" boolean running \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" while (running) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" String entry \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" running \u003d her.inputs(entry, tasks, iu);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":18,"-":2}},{"path":"src/main/java/Duke/Exceptions/IncompleteInput.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"public class IncompleteInput extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" public IncompleteInput(String x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" super(x);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":7}},{"path":"src/main/java/Duke/Exceptions/InvalidInput.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"public class InvalidInput extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" public InvalidInput(String x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" super(x);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":7}},{"path":"src/main/java/Duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" public Parser() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" public boolean inputs(String input, TaskList tasks, Ui iu) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" String[] listOfWords \u003d input.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" String prefix \u003d listOfWords[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" boolean future \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" Storage.saveTasks(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" Ui.printBye();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" future \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" iu.printList(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(listOfWords[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" if (index \u003c 1 || index \u003e tasks.numOfItems()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"False Index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" tasks.checkItem(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" iu.printMarked(tasks, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(listOfWords[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" if (index \u003c 1 || index \u003e tasks.numOfItems()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"False Index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" tasks.notDoneItem(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" iu.printUnmarked(tasks, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(listOfWords[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" if (index \u003c 1 || index \u003e tasks.numOfItems()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"False Index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" iu.printDelete(tasks, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" tasks.deleteIndex(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" boolean exceptionOccured \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" tasks.input(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" } catch (IncompleteInput e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" exceptionOccured \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" iu.printTaskWithoutDescription();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" } catch (InvalidInput e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" exceptionOccured \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" iu.printNonsense();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":" if (!exceptionOccured) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" iu.printAddedToList(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" } catch (InvalidInput e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" iu.printWrongIndex();","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" return future;","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":" public String formatTime(String time) throws DateTimeParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":" String formattedStringOutput \u003d dateTime.format(outputFormatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":" return formattedStringOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"RSXIX"},"content":" public static String dateToString(String time) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"RSXIX"},"content":" Parser dud \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"RSXIX"},"content":" String formattedStringOutput \u003d dud.formatTime(time);","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"RSXIX"},"content":" return formattedStringOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"RSXIX"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"RSXIX"},"content":" return time;","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":98}},{"path":"src/main/java/Duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.io.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" private static final String path \u003d \"./data/data.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" public static void saveTasks(TaskList x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" PrintWriter writer \u003d new PrintWriter(new FileWriter(file));","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" x.saveToFile(writer);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" writer.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"IO\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" public static ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(path));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" String line \u003d reader.readLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" List\u003cString\u003e splitsy \u003d new ArrayList\u003c\u003e(Arrays.asList(line.split(\"\\\\| \")));","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" if (splitsy.size() \u003c 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" splitsy.add(\"hi\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" tasks.add(Storage.correctTask(splitsy.get(0), splitsy.get(1), splitsy.get(2), splitsy.get(3)));","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" line \u003d reader.readLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"File\");","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"IO\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" public static Task correctTask(String type, String completion, String item, String deadline) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" if (type.equals(\"[T] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new ToDoTask(item);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" } else if (type.equals(\"[E] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" String from \u003d deadline.split(\"-\")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" String to \u003d deadline.split(\"-\")[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new EventTask(item.trim() + \" /from \" + from.trim() + \" /to \" + to.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new DeadlineTask(item.trim() + \" /by \" + deadline.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":84}},{"path":"src/main/java/Duke/Tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import Duke.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" private String by;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" String str;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" String deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" public DeadlineTask(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" String[] strArr \u003d task.split(\"/\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" str \u003d strArr[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" deadline \u003d strArr[1].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" return String.format(\"[D] | %s | %s | %s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" this.isDone() ? \"[X]\" : \"[ ]\",","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" str, Parser.dateToString(deadline));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":26}},{"path":"src/main/java/Duke/Tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import Duke.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" private String event;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" private String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" private String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" public EventTask(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" String[] splitsy \u003d task.split(\"/\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" event \u003d splitsy[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" from \u003d splitsy[1].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" to \u003d splitsy[2].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" return String.format(\"[E] | %s | %s | %s - %s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" this.isDone() ? \"[X]\" : \"[ ]\",","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" event, Parser.dateToString(from.trim()), Parser.dateToString(to.trim()));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":24}},{"path":"src/main/java/Duke/Tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" private Boolean done \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" private String task;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" public Task(String input) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" task \u003d input;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" private String type;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" private String desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" private String checkBox;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" private String deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" done \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" protected boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" return done;","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" if (done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" return \"[X] \" + \"| \" + task;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" return \"[ ] \" +\"| \" + task;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":44}},{"path":"src/main/java/Duke/Tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.io.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import Duke.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" private ArrayList\u003cTask\u003e storagePile;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" storagePile \u003d Storage.loadTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" int leng \u003d storagePile.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" String listed \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" for (int i \u003d 1; i \u003c\u003d leng; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" listed +\u003d String.format(\"%s - %s\",","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" i, storagePile.get(i-1)) +\" \\n\" ;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" return listed;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" public void checkItem(int x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" storagePile.get(x-1).markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" public void notDoneItem(int x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" storagePile.get(x-1).markUndone();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" public void deleteIndex(int x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" storagePile.remove(x-1);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" public Task getTask(int x) { return storagePile.get(x-1); }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" public int numOfItems() {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" return storagePile.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" public void input(String item) throws InvalidInput, IncompleteInput {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" String firstWord \u003d item.split(\" \")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" if (item.split(\" \").length \u003d\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" if (firstWord.equals(\"todo\") || firstWord.equals(\"deadline\") || firstWord.equals(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" throw new IncompleteInput(\"Not finished\");","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"Invalid\");","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" } else if (firstWord.equals(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new ToDoTask(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" } else if (firstWord.equals(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new DeadlineTask(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new EventTask(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" public void saveToFile(PrintWriter pw) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" for (Task item : storagePile) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" String str \u003d item.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" pw.println(str);","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":74}},{"path":"src/main/java/Duke/Tasks/ToDoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"public class ToDoTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" public ToDoTask(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" return \"[T] \" + \"| \" + super.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":12}},{"path":"src/main/java/Duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" private final String upper \u003d \"_______________ \\n\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" private final String lower \u003d \"_______________ \\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" public static void printWelcome() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" String logo \u003d \"_______________ \\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" + \"Eh, I\u0027m Scarlet \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" + \"No, I don\u0027t really want to know who you are \\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" + \"_______________ \\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" System.out.println(logo);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" public static void printBye() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" String logo \u003d \"_______________ \\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" + \"finally. \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" + \"_______________ \\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" System.out.println(logo);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" public void printList(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" String condemn \u003d upper","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" + \"What a terrible day to be alive. \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" + String.format(\"%s \\n_______________ \\n\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" System.out.println(condemn);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" public void printMarked(TaskList tasks, int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" System.out.println( upper","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" + \"A proud moment of your life I am sure... \\n \"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(index) + \" \\n\" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" public void printUnmarked(TaskList tasks, int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" + \"I\u0027m not juding at all... \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(index) + \" \\n\" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" public void printDelete(TaskList tasks, int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" System.out.println( upper","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" + \"Not another mistake I hope... \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(index) + \" \\n\\n\" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" public void printTaskWithoutDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper +","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" \"Come on now... don\u0027t be shy, go on \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" public void printNonsense() {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper +","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" \"Someone should have paid attention in school... try again \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" public void printAddedToList(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" + \"I\u0027m totally not judging... \"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(tasks.numOfItems())","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" + \" ... added to the list \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" + \"I wonder how you\u0027ll mess up this... \" + tasks.numOfItems() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" public void printWrongIndex() {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":" + \"1 mama and 1 papa made 2 dummies \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":84}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":1}}] +[{"path":"data/data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"[E] | [X] | hw | Dec 13 2023 0100 - Dec 13 2023 0100","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"RSXIX":1}},{"path":"src/main/java/Duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" Ui.printWelcome();","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" Ui iu \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" Parser her \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" boolean running \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" while (running) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" String entry \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" running \u003d her.inputs(entry, tasks, iu);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":18,"-":2}},{"path":"src/main/java/Duke/Exceptions/IncompleteInput.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"public class IncompleteInput extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" public IncompleteInput(String x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" super(x);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":7}},{"path":"src/main/java/Duke/Exceptions/InvalidInput.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"public class InvalidInput extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" public InvalidInput(String x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" super(x);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":7}},{"path":"src/main/java/Duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" public Parser() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" public boolean inputs(String input, TaskList tasks, Ui iu) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" String[] listOfWords \u003d input.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" String prefix \u003d listOfWords[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" boolean future \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" Storage.saveTasks(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" Ui.printBye();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" future \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" iu.printList(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(listOfWords[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" if (index \u003c 1 || index \u003e tasks.numOfItems()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"False Index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" tasks.checkItem(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" iu.printMarked(tasks, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(listOfWords[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" if (index \u003c 1 || index \u003e tasks.numOfItems()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"False Index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" tasks.notDoneItem(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" iu.printUnmarked(tasks, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(listOfWords[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" if (index \u003c 1 || index \u003e tasks.numOfItems()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"False Index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" iu.printDelete(tasks, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" tasks.deleteIndex(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" boolean exceptionOccured \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" tasks.input(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" } catch (IncompleteInput e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" exceptionOccured \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" iu.printTaskWithoutDescription();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" } catch (InvalidInput e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" exceptionOccured \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" iu.printNonsense();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":" if (!exceptionOccured) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" iu.printAddedToList(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" } catch (InvalidInput e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" iu.printWrongIndex();","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" return future;","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":" public String formatTime(String time) throws DateTimeParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":" String formattedStringOutput \u003d dateTime.format(outputFormatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":" return formattedStringOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"RSXIX"},"content":" public static String dateToString(String time) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"RSXIX"},"content":" Parser dud \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"RSXIX"},"content":" String formattedStringOutput \u003d dud.formatTime(time);","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"RSXIX"},"content":" return formattedStringOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"RSXIX"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"RSXIX"},"content":" return time;","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":98}},{"path":"src/main/java/Duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.io.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" private static final String path \u003d \"./data/data.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" public static void saveTasks(TaskList x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" PrintWriter writer \u003d new PrintWriter(new FileWriter(file));","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" x.saveToFile(writer);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" writer.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"IO\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" public static ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(path));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" String line \u003d reader.readLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" List\u003cString\u003e splitsy \u003d new ArrayList\u003c\u003e(Arrays.asList(line.split(\"\\\\| \")));","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" if (splitsy.size() \u003c 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" splitsy.add(\"hi\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" tasks.add(Storage.correctTask(splitsy.get(0), splitsy.get(1), splitsy.get(2), splitsy.get(3)));","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" line \u003d reader.readLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"File\");","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"IO\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" public static Task correctTask(String type, String completion, String item, String deadline) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" if (type.equals(\"[T] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new ToDoTask(item);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" } else if (type.equals(\"[E] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" String from \u003d deadline.split(\"-\")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" String to \u003d deadline.split(\"-\")[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new EventTask(item.trim() + \" /from \" + from.trim() + \" /to \" + to.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new DeadlineTask(item.trim() + \" /by \" + deadline.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":84}},{"path":"src/main/java/Duke/Tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import Duke.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" private String by;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" String str;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" String deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" public DeadlineTask(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" String[] strArr \u003d task.split(\"/\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" str \u003d strArr[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" deadline \u003d strArr[1].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" return String.format(\"[D] | %s | %s | %s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" this.isDone() ? \"[X]\" : \"[ ]\",","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" str, Parser.dateToString(deadline));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":26}},{"path":"src/main/java/Duke/Tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import Duke.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" private String event;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" private String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" private String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" public EventTask(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" String[] splitsy \u003d task.split(\"/\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" event \u003d splitsy[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" from \u003d splitsy[1].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" to \u003d splitsy[2].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" return String.format(\"[E] | %s | %s | %s - %s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" this.isDone() ? \"[X]\" : \"[ ]\",","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" event, Parser.dateToString(from.trim()), Parser.dateToString(to.trim()));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":24}},{"path":"src/main/java/Duke/Tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" private Boolean done \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" private String task;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" public Task(String input) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" task \u003d input;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" private String type;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" private String desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" private String checkBox;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" private String deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" done \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" protected boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" return done;","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" if (done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" return \"[X] \" + \"| \" + task;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" return \"[ ] \" +\"| \" + task;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":44}},{"path":"src/main/java/Duke/Tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.io.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import Duke.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" private ArrayList\u003cTask\u003e storagePile;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" storagePile \u003d Storage.loadTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" int leng \u003d storagePile.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" String listed \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" for (int i \u003d 1; i \u003c\u003d leng; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" listed +\u003d String.format(\"%s - %s\",","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" i, storagePile.get(i-1)) +\" \\n\" ;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" return listed;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" public void checkItem(int x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" storagePile.get(x-1).markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" public void notDoneItem(int x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" storagePile.get(x-1).markUndone();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" public void deleteIndex(int x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" storagePile.remove(x-1);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" public Task getTask(int x) { return storagePile.get(x-1); }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" public int numOfItems() {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" return storagePile.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" public void input(String item) throws InvalidInput, IncompleteInput {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" String firstWord \u003d item.split(\" \")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" if (item.split(\" \").length \u003d\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" if (firstWord.equals(\"todo\") || firstWord.equals(\"deadline\") || firstWord.equals(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" throw new IncompleteInput(\"Not finished\");","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"Invalid\");","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" } else if (firstWord.equals(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new ToDoTask(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" } else if (firstWord.equals(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new DeadlineTask(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new EventTask(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" public void saveToFile(PrintWriter pw) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" for (Task item : storagePile) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" String str \u003d item.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" pw.println(str);","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":74}},{"path":"src/main/java/Duke/Tasks/ToDoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"public class ToDoTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" public ToDoTask(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" return \"[T] \" + \"| \" + super.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":12}},{"path":"src/main/java/Duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" private final String upper \u003d \"_______________ \\n\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" private final String lower \u003d \"_______________ \\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" public static void printWelcome() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" String logo \u003d \"_______________ \\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" + \"Eh, I\u0027m Scarlet \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" + \"No, I don\u0027t really want to know who you are \\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" + \"_______________ \\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" System.out.println(logo);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" public static void printBye() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" String logo \u003d \"_______________ \\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" + \"finally. \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" + \"_______________ \\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" System.out.println(logo);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" public void printList(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" String condemn \u003d upper","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" + \"What a terrible day to be alive. \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" + String.format(\"%s \\n_______________ \\n\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" System.out.println(condemn);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" public void printMarked(TaskList tasks, int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" System.out.println( upper","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" + \"A proud moment of your life I am sure... \\n \"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(index) + \" \\n\" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" public void printUnmarked(TaskList tasks, int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" + \"I\u0027m not juding at all... \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(index) + \" \\n\" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" public void printDelete(TaskList tasks, int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" System.out.println( upper","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" + \"Not another mistake I hope... \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(index) + \" \\n\\n\" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" public void printTaskWithoutDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper +","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" \"Come on now... don\u0027t be shy, go on \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" public void printNonsense() {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper +","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" \"Someone should have paid attention in school... try again \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" public void printAddedToList(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" + \"I\u0027m totally not judging... \"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(tasks.numOfItems())","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" + \" ... added to the list \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" + \"I wonder how you\u0027ll mess up this... \" + tasks.numOfItems() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" public void printWrongIndex() {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":" + \"1 mama and 1 papa made 2 dummies \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":84}},{"path":"src/test/java/Duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RSXIX":9}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":1}}] diff --git a/RSXIX_ip_master/commits.json b/RSXIX_ip_master/commits.json index c285edde..dd6badfb 100644 --- a/RSXIX_ip_master/commits.json +++ b/RSXIX_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"RSXIX":[{"date":"2023-08-24","commitResults":[{"hash":"9e71e15ea7a2140d0a8952b731b749afeb1b197d","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"2f16bcfcb77a8bb8ac93bf4d0832a60f59aac9ad","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":4}}},{"hash":"34da41e81236a8c024a38f2f8b52fa9926b7e56d","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["List-2","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":7}}},{"hash":"fbb31c32d0b5214fe3858b9a3f77be0dbe248e06","isMergeCommit":false,"messageTitle":"Completed Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":4}}},{"hash":"9155d05b58ef4bb9b5b5b5866c886cf402851643","isMergeCommit":false,"messageTitle":"Completed Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":13}}},{"hash":"f09c6d482d8eadbe853c614a40788ee676c2c4c5","isMergeCommit":false,"messageTitle":"Completed Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":67,"deletions":31}}},{"hash":"e6273cab7af97fe7507a0dfb59bad2946e6425bd","isMergeCommit":false,"messageTitle":"Completed Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"baafd366496e4341bb94a408811e58d6b8370909","isMergeCommit":false,"messageTitle":"Logically seems fine to me but not saving yet....","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":10}}},{"hash":"b44b6eabd1dae880049b2ccfb4f23579874589a9","isMergeCommit":false,"messageTitle":"Finished Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":28}}},{"hash":"f0982afb694c6c27fbc24b7c50d20b0fcdaa3e29","isMergeCommit":false,"messageTitle":"Merged with Level-7 Branch having Completed Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"7e1e7e241228c3cbacb05da9fd65abe6a7821f3a","isMergeCommit":false,"messageTitle":"Revert \"Merged with Level-7 Branch having Completed Level-7\"","messageBody":"This reverts commit f0982afb694c6c27fbc24b7c50d20b0fcdaa3e29.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3}}}]},{"date":"2023-09-01","commitResults":[{"hash":"36685defb34d2880bbb721fcf07a63f40f917afc","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Merged with Level-7 Branch having Completed Level-7\"\"","messageBody":"This reverts commit 7e1e7e241228c3cbacb05da9fd65abe6a7821f3a.\n\nMade a mistake\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"ca411b2d804038e501e723f2c4b02c2d0b7598f8","isMergeCommit":true,"messageTitle":"Before Merge","messageBody":"","tags":["“Level-7”"],"fileTypesAndContributionMap":{}},{"hash":"7ca9565bfaaeb5e2808cc42065232b692ae9066b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-7","messageBody":"Seemed to be an issue\n","fileTypesAndContributionMap":{}},{"hash":"785e258ecb31c30a70d8a39341f75a4479d15768","isMergeCommit":false,"messageTitle":"Completed Level-8","messageBody":"","tags":["Merge-Level-8","Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":25,"deletions":4}}}]},{"date":"2023-09-03","commitResults":[{"hash":"70f02a214db05a8b5f7cc0512e9f6c3de5422f03","isMergeCommit":false,"messageTitle":"Completed A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":326,"deletions":228}}},{"hash":"d5d5edc2d3fe132cafa4f6efe01110678b68c551","isMergeCommit":false,"messageTitle":"Completed A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":45,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"RSXIX":{"java":478,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":2}},"authorContributionVariance":{"RSXIX":25748.697},"authorDisplayNameMap":{"RSXIX":"CS2103T-W16-3 ROHA..APRA"}} +{"authorDailyContributionsMap":{"RSXIX":[{"date":"2023-08-24","commitResults":[{"hash":"9e71e15ea7a2140d0a8952b731b749afeb1b197d","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"2f16bcfcb77a8bb8ac93bf4d0832a60f59aac9ad","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":4}}},{"hash":"34da41e81236a8c024a38f2f8b52fa9926b7e56d","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["List-2","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":7}}},{"hash":"fbb31c32d0b5214fe3858b9a3f77be0dbe248e06","isMergeCommit":false,"messageTitle":"Completed Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":4}}},{"hash":"9155d05b58ef4bb9b5b5b5866c886cf402851643","isMergeCommit":false,"messageTitle":"Completed Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":13}}},{"hash":"f09c6d482d8eadbe853c614a40788ee676c2c4c5","isMergeCommit":false,"messageTitle":"Completed Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":67,"deletions":31}}},{"hash":"e6273cab7af97fe7507a0dfb59bad2946e6425bd","isMergeCommit":false,"messageTitle":"Completed Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"baafd366496e4341bb94a408811e58d6b8370909","isMergeCommit":false,"messageTitle":"Logically seems fine to me but not saving yet....","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":10}}},{"hash":"b44b6eabd1dae880049b2ccfb4f23579874589a9","isMergeCommit":false,"messageTitle":"Finished Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":28}}},{"hash":"f0982afb694c6c27fbc24b7c50d20b0fcdaa3e29","isMergeCommit":false,"messageTitle":"Merged with Level-7 Branch having Completed Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"7e1e7e241228c3cbacb05da9fd65abe6a7821f3a","isMergeCommit":false,"messageTitle":"Revert \"Merged with Level-7 Branch having Completed Level-7\"","messageBody":"This reverts commit f0982afb694c6c27fbc24b7c50d20b0fcdaa3e29.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3}}}]},{"date":"2023-09-01","commitResults":[{"hash":"36685defb34d2880bbb721fcf07a63f40f917afc","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Merged with Level-7 Branch having Completed Level-7\"\"","messageBody":"This reverts commit 7e1e7e241228c3cbacb05da9fd65abe6a7821f3a.\n\nMade a mistake\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"ca411b2d804038e501e723f2c4b02c2d0b7598f8","isMergeCommit":true,"messageTitle":"Before Merge","messageBody":"","tags":["“Level-7”"],"fileTypesAndContributionMap":{}},{"hash":"7ca9565bfaaeb5e2808cc42065232b692ae9066b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-7","messageBody":"Seemed to be an issue\n","fileTypesAndContributionMap":{}},{"hash":"785e258ecb31c30a70d8a39341f75a4479d15768","isMergeCommit":false,"messageTitle":"Completed Level-8","messageBody":"","tags":["Merge-Level-8","Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":25,"deletions":4}}}]},{"date":"2023-09-03","commitResults":[{"hash":"70f02a214db05a8b5f7cc0512e9f6c3de5422f03","isMergeCommit":false,"messageTitle":"Completed A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":326,"deletions":228}}},{"hash":"d5d5edc2d3fe132cafa4f6efe01110678b68c551","isMergeCommit":false,"messageTitle":"Completed A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":45,"deletions":2}}}]},{"date":"2023-09-04","commitResults":[{"hash":"5ba8eb518f8ec547b7878808eab9f9aa1f5b0705","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into A-Gradle","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"59318fe803b7b016f27a746bb4258d1b0b2da916","isMergeCommit":false,"messageTitle":"Added JUnit File Structure","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"RSXIX":{"java":487,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":2}},"authorContributionVariance":{"RSXIX":23424.443},"authorDisplayNameMap":{"RSXIX":"CS2103T-W16-3 ROHA..APRA"}} diff --git a/RiyaMehta2211_ip_master/authorship.json b/RiyaMehta2211_ip_master/authorship.json index d4d5ee75..de5bd0ee 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":"src/data/Duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"D|1|hw |2023-12-12T23:59","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"E|0|fireside chat |2023-12-12T18:00|2023-12-12T19:30","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"T|0|go on a trip","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":3}},{"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.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"//This class has a chatbot which will generate a list based on a set of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"//that have been input by the user. These tasks include deadlines, events and ToDos","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"//The user input will be parsed to extract the date and time of the events and deadlines","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" //System.out.println(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printHello();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList tasks \u003d storage.loadTasks(\"src/data/Duke.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" while (!str.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" parser.chat(str, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" str \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" storage.saveTasks(\"src/data/Duke.txt\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" scanner.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printBye();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":24,"-":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":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-09-03"},{"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":"public class Parser implements Serializable {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" public Parser() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" //empty constructor to initialize class objects","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" public void chat(String str, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" if (str.startsWith(\"mark \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1; //index for task list","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.markDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" Task done \u003d tasks.getTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printDone(done);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"unmark \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(7);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1; //index for task list","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.markNotDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" Task notDone \u003d tasks.getTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printNotDone(notDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"delete \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(7);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" Task toBeDeleted \u003d tasks.removeTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printDelete(toBeDeleted, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" if (str.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" String todo \u003d str.substring(4);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" //remove any leading and trailing whitespace characters and","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" //check whether there is a task after the instruction","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" if (todo.trim().isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" //this would mean the instruction is incomplete","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" throw new ToDoCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" String string \u003d str.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new ToDo(string);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.contains(\"/by \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" throw new DeadlineCommandUseException(str); //needs to check for /by","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" String byWhen \u003d \"/by \";","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d str.indexOf(byWhen);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" String deadline \u003d str.substring(index + 4); //remove /by from the substring","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":" if (deadline.trim().isEmpty()) { //needs to check whether there is anything after /by","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":" throw new DeadlineCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"RiyaMehta2211"},"content":" String workToDo \u003d str.substring(9, index);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new Deadline(workToDo, LocalDateTime.parse(deadline, formatter));","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.contains(\"from\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"RiyaMehta2211"},"content":" String fromMarker \u003d \"/from \"; //mark the /from index of the string","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"RiyaMehta2211"},"content":" int firstIndex \u003d str.indexOf(fromMarker);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"RiyaMehta2211"},"content":" int secondIndex;","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"RiyaMehta2211"},"content":" String fromWhen;","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"RiyaMehta2211"},"content":" String toWhen;","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"RiyaMehta2211"},"content":" String workToDo \u003d str.substring(6, firstIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"RiyaMehta2211"},"content":" String afterFirstIndex \u003d str.substring(firstIndex + 6);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"RiyaMehta2211"},"content":" if (!afterFirstIndex.contains(\"/to \")) { //to check the input of /to after /from","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"RiyaMehta2211"},"content":" String toMarker \u003d \"/to \"; //mark the /to index of the string","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"RiyaMehta2211"},"content":" secondIndex \u003d afterFirstIndex.indexOf(toMarker); //to make sure we get the /to after the /from","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"RiyaMehta2211"},"content":" fromWhen \u003d afterFirstIndex.substring(0, secondIndex).trim(); //get the from timing","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"RiyaMehta2211"},"content":" toWhen \u003d afterFirstIndex.substring(secondIndex + 3).trim(); //get the to timing","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"RiyaMehta2211"},"content":" if (fromWhen.trim().isEmpty() ||","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"RiyaMehta2211"},"content":" toWhen.trim().isEmpty()) { //needs to check whether there is anything after /by","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new Event(workToDo, LocalDateTime.parse(fromWhen, formatter),","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime.parse(toWhen, formatter));","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"RiyaMehta2211"},"content":" ui.listTasks(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (java.time.format.DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"RiyaMehta2211"},"content":" //detect inputs that don\u0027t follow the yyyy-MM-dd HHmm format","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printException();","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (InvalidInputException | EventCommandUseException |","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"RiyaMehta2211"},"content":" DeadlineCommandUseException | ToDoCommandUseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printException(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RiyaMehta2211":126}},{"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.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.FileSystems;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"//The duke.Storage class is in charge of writing and reading the tasklists","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"//from the duke.Duke.txt file","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":"public class Storage implements Serializable{","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" private static final long serialVersionUID \u003d 3017522968017487738L;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" void saveTasks(String filePath, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" createDirectoryIfNotExists(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d tasks.getTask(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" String taskData \u003d formatTaskData(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.write(taskData);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.close(); // Don\u0027t forget to close the FileWriter when done.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" String formatTaskData(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" // Customize this method based on your Task class structure.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d task.saveTaskString();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" return str;","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList loadTasks(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" createDirectoryIfNotExists(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(filePath));","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" String line;","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" String[] components \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" String taskType \u003d components[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" boolean isDone \u003d components[1].equals(\"1\");","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" String description \u003d components[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" if (\"T\".equals(taskType)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new ToDo(description, isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (\"D\".equals(taskType)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime by \u003d LocalDateTime.parse(components[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new Deadline(description, isDone, by));","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (\"E\".equals(components[0])) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime from \u003d LocalDateTime.parse(components[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime to \u003d LocalDateTime.parse(components[4]);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new Event(description, isDone, from, to));","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" reader.close(); // Close the reader when done.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"File not found: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Error loading tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" return taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" private void createDirectoryIfNotExists(String filePath) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" Path path \u003d FileSystems.getDefault().getPath(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":" if (!Files.exists(path.getParent())) {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":" Files.createDirectories(path.getParent());","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":81}},{"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":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"public class TaskList{","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" private List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" public TaskList(){","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" public void addTask(Task task){","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" public Task removeTask(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" return this.tasks.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" public Task getTask(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" public void markDone(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" public void markNotDone(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" public int getSize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" return tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":33}},{"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":"import java.io.Serializable;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"public class Ui implements Serializable{","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" String name \u003d \"Harry Potter\";","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" String question \u003d \"Introducing the Wizarding World Organizer: Your Trusted Guide\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" \" to Efficient \u0026 Effective Magical Planning\";","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" String hello \u003d \"Hello muggle! I\u0027m \" + name + \"\\n\" + question;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" String bye \u003d \"\\t\" + \"Expelliarmus! Hope to see you again muggle! :D\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" public void printHello() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(hello);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" public void printBye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(bye);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" public void printDone(Task done) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"\\t\" + \"Nice! I\u0027ve marked this task \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" \"as done:\" + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\t \" + done.taskString());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" public void printNotDone(Task notDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"\\t\" + \"OK, I\u0027ve marked this task \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" \"as not done yet:\" + \"\\n\" + \"\\t\" + \" \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" notDone.taskString());","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" public void printDelete(Task toBeDeleted, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"\\tNoted. I\u0027ve removed this task:\\n\\t \" + toBeDeleted.taskString()","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" + \"\\n\\tNow you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" public void printAddTask(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" int len \u003d tasks.getSize();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d \"\\tGot it. I\u0027ve added this task:\\n\\t\\t\"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" + task.taskString();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" String listLength \u003d len \u003d\u003d 1 ? \"Now you have \" + len + \" task in the list.\" :","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" \"Now you have \" + len + \" tasks in the list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(output","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" + \"\\n\\t\" + listLength);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" public void printException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" public void printException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Accio error! I don\u0027t understand what the input means D:\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" \" Please input a valid date in the format yyyy-MM-dd HHmm \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" \"(the time in the 24-hour format).\");","lastModifiedDate":"2023-09-02"},{"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":" public void listTasks(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.print(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" for (int j \u003d 0; j \u003c tasks.getSize(); j++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.print(\"\\t\" + i + \".\" + tasks.getTask(j).taskString());","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" i++;","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println();","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RiyaMehta2211":71}},{"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":"public class DeadlineCommandUseException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" public DeadlineCommandUseException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"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":6,"author":{"gitId":"RiyaMehta2211"},"content":" \"and a time specified after \u0027/by\u0027 \");","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":8}},{"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":"public class EventCommandUseException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" public EventCommandUseException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \"\\n\\tAccio error! Invalid input as when the event starts \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" \"must be specified after /from. When the event ends must also be specified after /to.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":8}},{"path":"src/main/java/duke/exception/EventDateTimeException.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":"public class EventDateTimeException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" public EventDateTimeException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \"\\n\\tAccio error! I don\u0027t know what that means D: Please provide valid date inputs for events\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" \"in the yyyy-MM-dd HHmm format, and ensure that the start date \u0026 time of the \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" \"event does not occur after the end date \u0026 time of the event.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"RiyaMehta2211":9}},{"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":"public class InvalidInputException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" public InvalidInputException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \"\\n\\tAccio error! I don\u0027t know what the input means D: Please enter valid inputs. Below are the valid\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" \" inputs I can take\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\t1. list \\n\\t2. todo \\n\\t3. deadline \" +","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\n\\t4. event \\n\\t5. mark \\n\\t6. unmark \\n\\t7. bye\");","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":11}},{"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":"public class ToDoCommandUseException extends Exception{","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDoCommandUseException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"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":6,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":7}},{"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":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" protected LocalDateTime date;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" //included serialVersionUID indicated as the Task implements Serializable Interface","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" public Deadline(String description, LocalDateTime date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" public Deadline(String description, boolean isDone, LocalDateTime date) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" return \"[D]\" + super.taskString() + \"(by: \" + date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" return \"D\" + \"|\" + status + \"|\" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" + \"|\" + this.date;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":28}},{"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":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" //Introducing LocalDateTime to parse the string inputs given by the user","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" //for the relevant date and time","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" public Event(String description, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" public Event(String description, boolean isDone, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" return \"[E]\" + super.taskString() + \"(from: \" + startDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" + \" to: \" + endDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" return \"E\" + \"|\" + status + \"|\" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" + \"|\" + this.startDate + \"|\" + this.endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":33}},{"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-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"//The duke.task.Task class is in charge of creating task objects","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"//which can be of different types: ToDos, Deadlines and Events","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"public abstract class Task{","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" public String getTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d this.isDone ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d str + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" return output;","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" public abstract String saveTaskString();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":34}},{"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":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDo(String todo) {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" super(todo);","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDo(String todo, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" super(todo, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d \"[T]\" + super.taskString();","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" return output;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" return \"T\" + \"|\" + status + \"|\" + this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":25}},{"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":"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.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"//This class has a chatbot which will generate a list based on a set of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"//that have been input by the user. These tasks include deadlines, events and ToDos","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"//The user input will be parsed to extract the date and time of the events and deadlines","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" //System.out.println(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printHello();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList tasks \u003d storage.loadTasks(\"src/data/Duke.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" while (!str.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" parser.chat(str, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" str \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" storage.saveTasks(\"src/data/Duke.txt\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" scanner.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printBye();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":24,"-":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":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" public Parser() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" //empty constructor to initialize class objects","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" public void chat(String str, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" if (str.startsWith(\"mark \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1; //index for task list","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.markDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" Task done \u003d tasks.getTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printDone(done);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"unmark \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(7);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1; //index for task list","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.markNotDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" Task notDone \u003d tasks.getTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printNotDone(notDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"delete \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(7);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" Task toBeDeleted \u003d tasks.removeTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printDelete(toBeDeleted, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" if (str.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" String todo \u003d str.substring(4);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" //remove any leading and trailing whitespace characters and","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" //check whether there is a task after the instruction","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" if (todo.trim().isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" //this would mean the instruction is incomplete","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" throw new ToDoCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" String string \u003d str.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new ToDo(string);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.contains(\"/by \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" throw new DeadlineCommandUseException(str); //needs to check for /by","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" String byWhen \u003d \"/by \";","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d str.indexOf(byWhen);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" String deadline \u003d str.substring(index + 4); //remove /by from the substring","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" if (deadline.trim().isEmpty()) { //needs to check whether there is anything after /by","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" throw new DeadlineCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":" String workToDo \u003d str.substring(9, index);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new Deadline(workToDo, LocalDateTime.parse(deadline, formatter));","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.contains(\"from\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"RiyaMehta2211"},"content":" String fromMarker \u003d \"/from \"; //mark the /from index of the string","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"RiyaMehta2211"},"content":" int firstIndex \u003d str.indexOf(fromMarker);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"RiyaMehta2211"},"content":" int secondIndex;","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"RiyaMehta2211"},"content":" String fromWhen;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"RiyaMehta2211"},"content":" String toWhen;","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"RiyaMehta2211"},"content":" String workToDo \u003d str.substring(6, firstIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"RiyaMehta2211"},"content":" String afterFirstIndex \u003d str.substring(firstIndex + 6);","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"RiyaMehta2211"},"content":" if (!afterFirstIndex.contains(\"/to \")) { //to check the input of /to after /from","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"RiyaMehta2211"},"content":" String toMarker \u003d \"/to \"; //mark the /to index of the string","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"RiyaMehta2211"},"content":" secondIndex \u003d afterFirstIndex.indexOf(toMarker); //to make sure we get the /to after the /from","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"RiyaMehta2211"},"content":" fromWhen \u003d afterFirstIndex.substring(0, secondIndex).trim(); //get the from timing","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"RiyaMehta2211"},"content":" toWhen \u003d afterFirstIndex.substring(secondIndex + 3).trim(); //get the to timing","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"RiyaMehta2211"},"content":" if (fromWhen.trim().isEmpty() ||","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"RiyaMehta2211"},"content":" toWhen.trim().isEmpty()) { //needs to check whether there is anything after /by","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new Event(workToDo, LocalDateTime.parse(fromWhen, formatter),","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime.parse(toWhen, formatter));","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"RiyaMehta2211"},"content":" ui.listTasks(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (java.time.format.DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"RiyaMehta2211"},"content":" //detect inputs that don\u0027t follow the yyyy-MM-dd HHmm format","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printException();","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (InvalidInputException | EventCommandUseException |","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"RiyaMehta2211"},"content":" DeadlineCommandUseException | ToDoCommandUseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printException(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RiyaMehta2211":124}},{"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.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.FileSystems;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"//The duke.Storage class is in charge of writing and reading the tasklists","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"//from the duke.Duke.txt file","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":"public class Storage{","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" void saveTasks(String filePath, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" createDirectoryIfNotExists(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d tasks.getTask(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" String taskData \u003d formatTaskData(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.write(taskData);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.close(); // Don\u0027t forget to close the FileWriter when done.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" String formatTaskData(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" // Customize this method based on your Task class structure.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d task.saveTaskString();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" return str;","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList loadTasks(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" createDirectoryIfNotExists(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(filePath));","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" String line;","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" String[] components \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" String taskType \u003d components[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" boolean isDone \u003d components[1].equals(\"1\");","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" String description \u003d components[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" if (\"T\".equals(taskType)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new ToDo(description, isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (\"D\".equals(taskType)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime by \u003d LocalDateTime.parse(components[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new Deadline(description, isDone, by));","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (\"E\".equals(components[0])) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime from \u003d LocalDateTime.parse(components[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime to \u003d LocalDateTime.parse(components[4]);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new Event(description, isDone, from, to));","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" reader.close(); // Close the reader when done.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"File not found: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Error loading tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" return taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" private void createDirectoryIfNotExists(String filePath) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":" Path path \u003d FileSystems.getDefault().getPath(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":" Path parentDir \u003d path.getParent();","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"RiyaMehta2211"},"content":" if (parentDir !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"RiyaMehta2211"},"content":" if (!Files.exists(parentDir)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"RiyaMehta2211"},"content":" Files.createDirectories(parentDir);","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"RiyaMehta2211"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"RiyaMehta2211"},"content":" Files.createFile(path);","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":91}},{"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":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"public class TaskList{","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" private List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" public TaskList(){","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" public void addTask(Task task){","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" public Task removeTask(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" return this.tasks.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" public Task getTask(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" public void markDone(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" public void markNotDone(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" public int getSize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" return tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":33}},{"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":"import java.io.Serializable;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"public class Ui implements Serializable{","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" String name \u003d \"Harry Potter\";","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" String question \u003d \"Introducing the Wizarding World Organizer: Your Trusted Guide\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" \" to Efficient \u0026 Effective Magical Planning\";","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" String hello \u003d \"Hello muggle! I\u0027m \" + name + \"\\n\" + question;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" String bye \u003d \"\\t\" + \"Expelliarmus! Hope to see you again muggle! :D\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" public void printHello() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(hello);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" public void printBye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(bye);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" public void printDone(Task done) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"\\t\" + \"Nice! I\u0027ve marked this task \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" \"as done:\" + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\t \" + done.taskString());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" public void printNotDone(Task notDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"\\t\" + \"OK, I\u0027ve marked this task \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" \"as not done yet:\" + \"\\n\" + \"\\t\" + \" \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" notDone.taskString());","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" public void printDelete(Task toBeDeleted, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"\\tNoted. I\u0027ve removed this task:\\n\\t \" + toBeDeleted.taskString()","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" + \"\\n\\tNow you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" public void printAddTask(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" int len \u003d tasks.getSize();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d \"\\tGot it. I\u0027ve added this task:\\n\\t\\t\"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" + task.taskString();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" String listLength \u003d len \u003d\u003d 1 ? \"Now you have \" + len + \" task in the list.\" :","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" \"Now you have \" + len + \" tasks in the list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(output","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" + \"\\n\\t\" + listLength);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" public void printException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" public void printException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Accio error! I don\u0027t understand what the input means D:\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" \" Please input a valid date in the format yyyy-MM-dd HHmm \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" \"(the time in the 24-hour format).\");","lastModifiedDate":"2023-09-02"},{"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":" public void listTasks(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.print(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" for (int j \u003d 0; j \u003c tasks.getSize(); j++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.print(\"\\t\" + i + \".\" + tasks.getTask(j).taskString());","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" i++;","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println();","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RiyaMehta2211":71}},{"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":"public class DeadlineCommandUseException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" public DeadlineCommandUseException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"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":6,"author":{"gitId":"RiyaMehta2211"},"content":" \"and a time specified after \u0027/by\u0027 \");","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":8}},{"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":"public class EventCommandUseException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" public EventCommandUseException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \"\\n\\tAccio error! Invalid input as when the event starts \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" \"must be specified after /from. When the event ends must also be specified after /to.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":8}},{"path":"src/main/java/duke/exception/EventDateTimeException.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":"public class EventDateTimeException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" public EventDateTimeException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \"\\n\\tAccio error! I don\u0027t know what that means D: Please provide valid date inputs for events\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" \"in the yyyy-MM-dd HHmm format, and ensure that the start date \u0026 time of the \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" \"event does not occur after the end date \u0026 time of the event.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"RiyaMehta2211":9}},{"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":"public class InvalidInputException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" public InvalidInputException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \"\\n\\tAccio error! I don\u0027t know what the input means D: Please enter valid inputs. Below are the valid\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" \" inputs I can take\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\t1. list \\n\\t2. todo \\n\\t3. deadline \" +","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\n\\t4. event \\n\\t5. mark \\n\\t6. unmark \\n\\t7. bye\");","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":11}},{"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":"public class ToDoCommandUseException extends Exception{","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDoCommandUseException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"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":6,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":7}},{"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":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" protected LocalDateTime date;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" //included serialVersionUID indicated as the Task implements Serializable Interface","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" public Deadline(String description, LocalDateTime date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" public Deadline(String description, boolean isDone, LocalDateTime date) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" return \"[D]\" + super.taskString() + \"(by: \" + date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" return \"D\" + \"|\" + status + \"|\" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" + \"|\" + this.date;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":28}},{"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":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" //Introducing LocalDateTime to parse the string inputs given by the user","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" //for the relevant date and time","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" public Event(String description, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" public Event(String description, boolean isDone, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" return \"[E]\" + super.taskString() + \"(from: \" + startDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" + \" to: \" + endDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" return \"E\" + \"|\" + status + \"|\" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" + \"|\" + this.startDate + \"|\" + this.endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":33}},{"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-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"//The duke.task.Task class is in charge of creating task objects","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"//which can be of different types: ToDos, Deadlines and Events","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"public abstract class Task{","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" public String getTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d this.isDone ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d str + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" return output;","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" public abstract String saveTaskString();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":34}},{"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":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDo(String todo) {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" super(todo);","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDo(String todo, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" super(todo, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d \"[T]\" + super.taskString();","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" return output;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" return \"T\" + \"|\" + status + \"|\" + this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":25}},{"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 2d27691a..83f8c1d0 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":{}}]}]},"authorFileTypeContributionMap":{"RiyaMehta2211":{"java":498,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":18}},"authorContributionVariance":{"RiyaMehta2211":32450.977},"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}}}]}]},"authorFileTypeContributionMap":{"RiyaMehta2211":{"java":506,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":15}},"authorContributionVariance":{"RiyaMehta2211":31021.428},"authorDisplayNameMap":{"RiyaMehta2211":"CS2103T-T14-2 MEHT..BHAI"}} diff --git a/Sebtey_ip_master/commits.json b/Sebtey_ip_master/commits.json index 1c8d1640..f234cf25 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":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Sebtey":{"java":1222,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":9,"txt":7}},"authorContributionVariance":{"Sebtey":68275.766},"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":{}}]}]},"authorFileTypeContributionMap":{"Sebtey":{"java":1222,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":9,"txt":7}},"authorContributionVariance":{"Sebtey":68275.766},"authorDisplayNameMap":{"Sebtey":"CS2103T-T17-1 SEBA.. XUN"}} diff --git a/SelwynAng_ip_master/authorship.json b/SelwynAng_ip_master/authorship.json index 8b2375a9..d03c927b 100644 --- a/SelwynAng_ip_master/authorship.json +++ b/SelwynAng_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"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":"SelwynAng"},"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":{"SelwynAng":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":"SelwynAng"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"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":{"SelwynAng":1,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" * The Duke class represents a task management application. It provides functionality","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * to interact with the user, manage tasks, and store task information.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" /** Name of chatbot */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" private static final String NAME \u003d \"Duke Prince\";","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" /** Task list associated with this duke.Duke object */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" /** Storage associated with this Duke object */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" /** UI associated with this Duke object */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" /** Parser associated with this Duke object */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" private Parser parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Duke object with the specified file path to initialize the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" * @param filePath The file path where task data is stored.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" ui \u003d new Ui(NAME);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" String[] dirAndFilePathArr \u003d filePath.split(\"/\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" String dirPath \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c dirAndFilePathArr.length - 1; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" dirPath +\u003d dirAndFilePathArr[i];","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" dirPath +\u003d \"/\";","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" System.out.println(dirPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" storage \u003d new Storage(dirPath, dirAndFilePathArr[dirAndFilePathArr.length - 1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" taskList \u003d new TaskList(storage.retrieveTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" ui.printError(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" * Starts the Duke application by displaying a greeting and processing user commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":" ui.greet();","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" boolean exitProgram \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" String userInput;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" while (!exitProgram) {","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" userInput \u003d ui.readCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":" Command c \u003d this.parser.parseCommand(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" exitProgram \u003d c.isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" ui.printError(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" } finally {","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" * The main method to launch the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":" * @param args Command-line arguments (not used in this context).","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":84,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"SelwynAng":81,"-":3}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":" * The DukeException class represents an exception specific to the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * Constructs a DukeException object with the specified error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @param message The error message to be associated with the exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":17}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.command.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" * The Parser class is responsible for parsing user input and generating the corresponding commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * Parses the user input to generate the appropriate command.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" * @param userInput The input provided by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" * @return A Command object representing the parsed command.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the input cannot be parsed into a valid command.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" public Command parseCommand(String userInput) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" String userCommand, args;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" String[] parsedCommand \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" userCommand \u003d parsedCommand[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" args \u003d parsedCommand.length \u003e 1 ? parsedCommand[1] : \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" switch (userCommand) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" return new AddCommand(TaskType.TODO, args);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" return new AddCommand(TaskType.DEADLINE, args);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" return new AddCommand(TaskType.EVENT, args);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" return new MarkCommand(args, true);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" return new MarkCommand(args, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" return new DeleteCommand(args);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" return new FindCommand(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"I don\u0027t understand what you are saying!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" + \"Available commands are list, todo, deadline, event, mark, unmark, delete, bye.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":49}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * The Storage class handles file operations for saving and retrieving tasks to/from a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" * @author Selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" /** The file used for storage. */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" private File file;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" /** The full path of the file. */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" private String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Storage object with the specified directory path and file name.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * @param directoryPath The directory path where the file should be stored.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * @param fileName The name of the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" public Storage(String directoryPath, String fileName) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" this.filePath \u003d directoryPath + fileName;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" if (new File(directoryPath).mkdirs()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Directories are created.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Directories already exist.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" if (this.file.createNewFile()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"File is created: \" + this.file.getName());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"File already exists.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" * Saves the given list of tasks to the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" * @param tasks The list of tasks to be saved.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" FileWriter fileWriter \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" fileWriter.write(tasks.get(i).toString() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":" * Retrieves tasks from the file and returns them as an ArrayList.","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" * @return An ArrayList of Task objects retrieved from the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue with file retrieval or if the file is corrupted.","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter dateTimeFormat \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"SelwynAng"},"content":" Scanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"SelwynAng"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"SelwynAng"},"content":" String taskDesc \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"SelwynAng"},"content":" String[] taskDescArr \u003d taskDesc.split(\" \", 3);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"SelwynAng"},"content":" String taskTitle \u003d taskDescArr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"SelwynAng"},"content":" String taskDoneStatus \u003d taskDescArr[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"SelwynAng"},"content":" String taskDetails \u003d taskDescArr[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"SelwynAng"},"content":" Task taskToAdd;","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"SelwynAng"},"content":" switch(taskTitle) {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"SelwynAng"},"content":" case(\"[T]\"):","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"SelwynAng"},"content":" taskToAdd \u003d new Todo(taskDetails);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"SelwynAng"},"content":" if (taskDoneStatus.equals(\"[X]\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"SelwynAng"},"content":" taskToAdd.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"SelwynAng"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"SelwynAng"},"content":" case(\"[D]\"):","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"SelwynAng"},"content":" String[] taskDetailsArr \u003d taskDetails.split(\"\\\\(by:\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"SelwynAng"},"content":" taskToAdd \u003d new Deadline(taskDetailsArr[0].trim(),","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime.parse(taskDetailsArr[1].split(\"\\\\)\")[0].trim(),","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"SelwynAng"},"content":" dateTimeFormat));","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"SelwynAng"},"content":" if (taskDoneStatus.equals(\"[X]\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"SelwynAng"},"content":" taskToAdd.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"SelwynAng"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"SelwynAng"},"content":" case(\"[E]\"):","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"SelwynAng"},"content":" String[] taskDetailsArrOne \u003d taskDetails.split(\"\\\\(from:\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"SelwynAng"},"content":" String taskDetailsForEvent \u003d taskDetailsArrOne[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"SelwynAng"},"content":" String[] taskDetailsArrTwo \u003d taskDetailsArrOne[1].split(\"to:\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"SelwynAng"},"content":" taskToAdd \u003d new Event(taskDetailsForEvent.trim(),","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime.parse(taskDetailsArrTwo[0].trim(), dateTimeFormat),","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime.parse(taskDetailsArrTwo[1].split(\"\\\\)\")[0].trim(),","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"SelwynAng"},"content":" dateTimeFormat));","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"SelwynAng"},"content":" if (taskDoneStatus.equals(\"[X]\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"SelwynAng"},"content":" taskToAdd.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"SelwynAng"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"SelwynAng"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"File is corrupted!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"SelwynAng"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"File cannot be found!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"SelwynAng"},"content":" return taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":139}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * The Ui class handles interactions with the user interface, providing methods to read input,","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * display messages, and print various types of information.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /** Name of the chatbot */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private static String name;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Constructs an Ui object with the specified name to be used in greetings and messages.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param name The name of the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" public Ui(String name) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" * Reads a command input from the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" * @return The command input provided by the user as a string.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" return userInput;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" * Prints the task list to the console.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The task list to be displayed.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" * @param isMatching Determines which statements to print (true for matching tasks, false for all tasks)","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" public void printTaskList(TaskList taskList, boolean isMatching) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" taskList.displayTaskList(isMatching);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" * Prints a message indicating that a task has been added, along with the new task\u0027s details.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" * @param addedTask The task that was added.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" * @param noOfTasksAfterAdding The number of tasks after adding the new task.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" public void printAddedTask(Task addedTask, int noOfTasksAfterAdding) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":" System.out.println(addedTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" if (noOfTasksAfterAdding \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Now you have \" + noOfTasksAfterAdding + \" task in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Now you have \" + noOfTasksAfterAdding + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" * Prints a message indicating the change in task done status.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" * @param taskToChange The task for which the status changed.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" * @param isDone Whether the task is marked as done or not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" public void printChangeTaskDoneStatus(Task taskToChange, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":" if (isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Nice! I\u0027ve marked this task done:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":" System.out.println(taskToChange.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"SelwynAng"},"content":" * Prints a message indicating that a task has been deleted, along with the remaining tasks count.","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"SelwynAng"},"content":" * @param deletedTask The task that was deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"SelwynAng"},"content":" * @param numOfTasksLeft The number of tasks remaining after deletion.","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"SelwynAng"},"content":" public void printDeletedTask(Task deletedTask, int numOfTasksLeft) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"SelwynAng"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"SelwynAng"},"content":" System.out.println(deletedTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"SelwynAng"},"content":" if (numOfTasksLeft \u003d\u003d 1 || numOfTasksLeft \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Now you have \" + numOfTasksLeft + \" task in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Now you have \" + numOfTasksLeft + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"SelwynAng"},"content":" * Prints a greeting message to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"SelwynAng"},"content":" public void greet() {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"SelwynAng"},"content":" this.printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Hello! I\u0027m \" + name);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"SelwynAng"},"content":" this.printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"SelwynAng"},"content":" * Prints a farewell message to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"SelwynAng"},"content":" public void printExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"SelwynAng"},"content":" * Prints a horizontal line for visual separation.","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"SelwynAng"},"content":" public void printHorizontalLine() {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"SelwynAng"},"content":" int width \u003d 50;","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c width; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"SelwynAng"},"content":" System.out.print(\"-\");","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"SelwynAng"},"content":" * Prints an error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"SelwynAng"},"content":" * @param errorMsg The error message to be displayed.","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"SelwynAng"},"content":" public void printError(String errorMsg) {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"OOPS! \" + errorMsg);","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":136}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" * The AddCommand class represents a command to add a new task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" /** The type of task to be added. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" private TaskType taskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" /** The details for creating the duke.task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" private String addCommandDetails;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * Constructs an AddCommand object with the specified task type and details.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" * @param taskType The type of task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" * @param args The arguments for creating the duke.task.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" public AddCommand(TaskType taskType, String args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" this.addCommandDetails \u003d args;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" * Executes the AddCommand by adding a new task to the task list and updating the storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue adding the task or updating storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" Task addedTask \u003d taskList.addTask(this.taskType, this.addCommandDetails);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" ui.printAddedTask(addedTask, taskList.getNumTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":51}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * The Command class represents a command that can be executed in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" /** Indicates whether the command triggers an exit from the application. */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * Executes the command using the provided TaskList, Ui, and Storage objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue executing the duke.command.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" * Toggles the exit status of the duke.command.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" public void changeExitStatus() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" this.isExit \u003d !this.isExit;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" * Checks whether the command triggers an exit from the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @return True if the command triggers an exit, false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" return this.isExit;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":42}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * The DeleteCommand class represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /** The details of the task to be deleted. */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private String taskToDeleteDetails;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Constructs a DeleteCommand object with the specified details of the task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param args The arguments specifying the task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" public DeleteCommand(String args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" this.taskToDeleteDetails \u003d args;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" * Executes the DeleteCommand by removing a task from the task list and updating the storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue deleting the task or updating storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" Task deletedTask \u003d taskList.deleteTask(taskToDeleteDetails);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" int numOfTasksLeft \u003d taskList.getNumTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" ui.printDeletedTask(deletedTask, numOfTasksLeft);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":46}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * The ExitCommand class represents a command to exit the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" * Executes the ExitCommand by changing the exit status and displaying an exit message.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" super.changeExitStatus();","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" ui.printExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":25}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"public class FindCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" private String taskToFindDetails;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public FindCommand(String args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" this.taskToFindDetails \u003d args;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d taskList.findTasks(taskToFindDetails);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" TaskList taskListWithFoundTasks \u003d new TaskList(foundTasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" ui.printTaskList(taskListWithFoundTasks, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"SelwynAng":24}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * The ListCommand class represents a command to list all tasks in the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" * Executes the ListCommand by displaying the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" ui.printTaskList(taskList, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":25}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * The MarkCommand class represents a command to mark or unmark a task as done in the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /** Indicates whether to mark the task as done or not. */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private boolean toMark;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /** The details of the task to be marked. */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" private String taskToMarkDetails;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" * Constructs a MarkCommand object with the specified details of the task to be marked and the marking status.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" * @param args The arguments specifying the task to be marked.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" * @param toMark True if the task should be marked as done, false if it should be marked as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" public MarkCommand(String args, boolean toMark) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" this.taskToMarkDetails \u003d args;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" this.toMark \u003d toMark;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * Executes the MarkCommand by marking or unmarking a task as done and updating the storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue marking or unmarking the task or updating storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" Task taskToChange \u003d taskList.changeTaskDoneStatus(this.taskToMarkDetails, this.toMark);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" ui.printChangeTaskDoneStatus(taskToChange, this.toMark);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":50}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * The Deadline class represents a task with a specific end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" /** The end date and time of the deadline. */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" private LocalDateTime endDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Deadline object with the specified description and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * @param detail The description of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * @param endDateTime The end date and time of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" public Deadline(String detail, LocalDateTime endDateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" super(detail);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Deadline object, including its completion status, description,","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" * and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" return \"[D] \" + super.toString() + \" (by: \" + super.getDisplayDateTime(this.endDateTime) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":35}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * The Event class represents a task that occurs during a specified time range.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" * It extends the Task class and includes information about the start and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" /** Start date and time of the event */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" private LocalDateTime startDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /** End date and time of the event */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private LocalDateTime endDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Constructs an Event object with the specified details, start date and time, and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param detail The details of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" * @param startDateTime The start date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * @param endDateTime The end date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" public Event(String detail, LocalDateTime startDateTime, LocalDateTime endDateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" super(detail);","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Event object, including its details and time range.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Event object.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" return \"[E] \" + super.toString() + \" (from: \" + super.getDisplayDateTime(this.startDateTime)","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" + \" to: \" + super.getDisplayDateTime(this.endDateTime) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":41}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" * The Task class represents a task with a description and completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" /** The description of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" private String detail;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /** The completion status of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Task object with the specified description and sets its completion status to false.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param detail The description of the duke.task.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" public Task(String detail) {","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" this.detail \u003d detail;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" * Returns a formatted display string of the provided LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" * @param dateTime The LocalDateTime object to be formatted.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * @return A formatted date and time string.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" public String getDisplayDateTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter displayFormat \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" return dateTime.format(displayFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Task object, including its completion status and description.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" return \"[X] \" + this.detail;","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" return \"[-] \" + this.detail;","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" * Marks the task as done by setting its completion status to true.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" public void markDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" * Marks the task as undone by setting its completion status to false.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" * Returns the done status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" * @return A boolean value that corresponds to whether the task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":" return this.isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":75}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" * The TaskList class manages a list of tasks and provides methods for adding, creating, deleting, and modifying tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"public class TaskList {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" /** The list of tasks. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" /** The number of tasks in the list. */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" private int numTasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * Constructs a TaskList object with the specified list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" * @param tasks The list of tasks to be managed.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks){","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" this.numTasks \u003d tasks.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * Adds a new task of the specified type with the given arguments to the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" * @param taskType The type of task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" * @param args The arguments for creating the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @return The added Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue with task creation or task type is unsupported.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" public Task addTask(TaskType taskType, String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" case TODO:","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" newTask \u003d createTodo(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" newTask \u003d createDeadline(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" case EVENT:","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" newTask \u003d createEvent(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" default:","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"I can\u0027t create this task type!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" this.tasks.add(newTask);","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" this.numTasks++;","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" return newTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" * Creates a new Todo task with the given description.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" * @param args The description for the Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" * @return The created Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the description is missing.","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":" public Todo createTodo(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" if (args \u003d\u003d null || args.isEmpty()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Todo tasks should be created in this format: todo [name]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" return new Todo(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":" * Creates a new Deadline task with the given description and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"SelwynAng"},"content":" * @param args The description and end date/time for the Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"SelwynAng"},"content":" * @return The created Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the format is incorrect or the end date/time is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"SelwynAng"},"content":" public Deadline createDeadline(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter dateTimeFormat \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"SelwynAng"},"content":" String[] detailsAndDeadline \u003d args.split(\"/by\", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":91,"author":{"gitId":"SelwynAng"},"content":" if (detailsAndDeadline.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Deadline tasks should be created in this format: deadline [name] /by [date]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":94,"author":{"gitId":"SelwynAng"},"content":" String details \u003d detailsAndDeadline[0].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":95,"author":{"gitId":"SelwynAng"},"content":" String endDateTime \u003d detailsAndDeadline[1].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":96,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime formattedEndDateTime \u003d LocalDateTime.parse(endDateTime, dateTimeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"SelwynAng"},"content":" return new Deadline(details, formattedEndDateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"SelwynAng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Invalid deadline time format. Please use dd-MM-yyyy HHmm format!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":102,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":104,"author":{"gitId":"SelwynAng"},"content":" * Creates a new Event task with the given description and start/end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"SelwynAng"},"content":" * @param args The description and start/end date/time for the Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"SelwynAng"},"content":" * @return The created Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the format is incorrect or the date/time is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"SelwynAng"},"content":" public Event createEvent(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter dateTimeFormat \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"SelwynAng"},"content":" String eventMsg \u003d \"Event tasks should be created in this format: \" +","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"SelwynAng"},"content":" \"event [name] /from [start time] /to [end time]\";","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"SelwynAng"},"content":" String[] detailsAndStartEnd \u003d args.split(\"/from\", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":117,"author":{"gitId":"SelwynAng"},"content":" if (detailsAndStartEnd.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":118,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(eventMsg);","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":120,"author":{"gitId":"SelwynAng"},"content":" String details \u003d detailsAndStartEnd[0].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":121,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":122,"author":{"gitId":"SelwynAng"},"content":" String[] startAndEnd \u003d detailsAndStartEnd[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":123,"author":{"gitId":"SelwynAng"},"content":" if (startAndEnd.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":124,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(eventMsg);","lastModifiedDate":"2023-08-22"},{"lineNumber":125,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":126,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":127,"author":{"gitId":"SelwynAng"},"content":" String start \u003d startAndEnd[0].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":128,"author":{"gitId":"SelwynAng"},"content":" String end \u003d startAndEnd[1].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":129,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime formattedStartDateTime \u003d LocalDateTime.parse(start, dateTimeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime formattedEndDateTime \u003d LocalDateTime.parse(end, dateTimeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"SelwynAng"},"content":" return new Event(details, formattedStartDateTime, formattedEndDateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"SelwynAng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Invalid event time format. Please use dd-MM-yyyy HHmm format!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":136,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":137,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":138,"author":{"gitId":"SelwynAng"},"content":" * Deletes a task from the list based on the given task number.","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"SelwynAng"},"content":" * @param args The task number to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"SelwynAng"},"content":" * @return The deleted Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the task number is invalid or in an incorrect format.","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":144,"author":{"gitId":"SelwynAng"},"content":" public Task deleteTask(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"SelwynAng"},"content":" int taskNumber;","lastModifiedDate":"2023-08-22"},{"lineNumber":146,"author":{"gitId":"SelwynAng"},"content":" Task deletedTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":149,"author":{"gitId":"SelwynAng"},"content":" taskNumber \u003d Integer.parseInt(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":150,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":151,"author":{"gitId":"SelwynAng"},"content":" if (taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-22"},{"lineNumber":152,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number must be more 1 or more!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":153,"author":{"gitId":"SelwynAng"},"content":" } else if (this.exceedsSizeOfTaskList(taskNumber)) {","lastModifiedDate":"2023-08-22"},{"lineNumber":154,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number is higher than current size of task list!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":156,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":157,"author":{"gitId":"SelwynAng"},"content":" deletedTask \u003d this.tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"SelwynAng"},"content":" this.numTasks--;","lastModifiedDate":"2023-08-22"},{"lineNumber":159,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":160,"author":{"gitId":"SelwynAng"},"content":" return deletedTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"SelwynAng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":162,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Deleting task should be in this format: delete [task number]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":164,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":165,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":166,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":167,"author":{"gitId":"SelwynAng"},"content":" * Changes the done status of a task based on the given task number and state.","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"SelwynAng"},"content":" * @param args The task number to be marked/unmarked and the state.","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"SelwynAng"},"content":" * @param toBeDone The desired state (true for done, false for undone).","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"SelwynAng"},"content":" * @return The Task object with the modified done status.","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the task number is invalid or in an incorrect format.","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":174,"author":{"gitId":"SelwynAng"},"content":" public Task changeTaskDoneStatus(String args, boolean toBeDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"SelwynAng"},"content":" int taskNumber;","lastModifiedDate":"2023-08-22"},{"lineNumber":176,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":177,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":178,"author":{"gitId":"SelwynAng"},"content":" taskNumber \u003d Integer.parseInt(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":179,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":180,"author":{"gitId":"SelwynAng"},"content":" if (taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-22"},{"lineNumber":181,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number must be more 1 or more!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":182,"author":{"gitId":"SelwynAng"},"content":" } else if (this.exceedsSizeOfTaskList(taskNumber)) {","lastModifiedDate":"2023-08-22"},{"lineNumber":183,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number is higher than current size of task list!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":185,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":186,"author":{"gitId":"SelwynAng"},"content":" Task taskToChange \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"SelwynAng"},"content":" if (toBeDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"SelwynAng"},"content":" taskToChange.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":191,"author":{"gitId":"SelwynAng"},"content":" taskToChange.markUndone();","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":193,"author":{"gitId":"SelwynAng"},"content":" return taskToChange;","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"SelwynAng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":195,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Marking/unmarking tasks should be in this format: mark/unmark [task number]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":197,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":199,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":200,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":201,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":202,"author":{"gitId":"SelwynAng"},"content":" * Displays the list of tasks to the console.","lastModifiedDate":"2023-08-29"},{"lineNumber":203,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"SelwynAng"},"content":" * @param isMatching Determine which statements to print (true for matching tasks, false for all tasks)","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":206,"author":{"gitId":"SelwynAng"},"content":" public void displayTaskList(boolean isMatching) {","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"SelwynAng"},"content":" if (isMatching) {","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"SelwynAng"},"content":" if (this.numTasks \u003d\u003d 0 || this.numTasks \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Here is the matching task in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"SelwynAng"},"content":" if (this.numTasks \u003d\u003d 0 || this.numTasks \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":215,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Here is the task in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":216,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":217,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-21"},{"lineNumber":218,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":219,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c this.numTasks; i++) {","lastModifiedDate":"2023-08-21"},{"lineNumber":222,"author":{"gitId":"SelwynAng"},"content":" int bullet \u003d i + 1;","lastModifiedDate":"2023-08-21"},{"lineNumber":223,"author":{"gitId":"SelwynAng"},"content":" System.out.print(bullet + \". \");","lastModifiedDate":"2023-08-21"},{"lineNumber":224,"author":{"gitId":"SelwynAng"},"content":" System.out.println(this.tasks.get(i).toString());","lastModifiedDate":"2023-08-22"},{"lineNumber":225,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":226,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":227,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":228,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"SelwynAng"},"content":" * Finds the tasks which details contains the given string parameter","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"SelwynAng"},"content":" * @param taskToFindDetails The details of the task to find","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"SelwynAng"},"content":" * @return The ArrayList of tasks that match the string parameter","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"SelwynAng"},"content":" public ArrayList\u003cTask\u003e findTasks(String taskToFindDetails) {","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"SelwynAng"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i ++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"SelwynAng"},"content":" Task taskInFocus \u003d this.tasks.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"SelwynAng"},"content":" if (taskInFocus.toString().contains(taskToFindDetails)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"SelwynAng"},"content":" foundTasks.add(taskInFocus);","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"SelwynAng"},"content":" return foundTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":247,"author":{"gitId":"SelwynAng"},"content":" * Checks if the given index exceeds the size of the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":248,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":249,"author":{"gitId":"SelwynAng"},"content":" * @param index The index to be checked.","lastModifiedDate":"2023-08-29"},{"lineNumber":250,"author":{"gitId":"SelwynAng"},"content":" * @return True if the index exceeds the task list size, false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":251,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":252,"author":{"gitId":"SelwynAng"},"content":" public boolean exceedsSizeOfTaskList(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":253,"author":{"gitId":"SelwynAng"},"content":" return index \u003e numTasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":254,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":255,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":256,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":257,"author":{"gitId":"SelwynAng"},"content":" * Retrieves the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":258,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":259,"author":{"gitId":"SelwynAng"},"content":" * @return The ArrayList of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":260,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":261,"author":{"gitId":"SelwynAng"},"content":" public ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":262,"author":{"gitId":"SelwynAng"},"content":" return this.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":263,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":264,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":265,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":266,"author":{"gitId":"SelwynAng"},"content":" * Retrieves the number of tasks in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":267,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":268,"author":{"gitId":"SelwynAng"},"content":" * @return The number of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":269,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":270,"author":{"gitId":"SelwynAng"},"content":" public int getNumTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":271,"author":{"gitId":"SelwynAng"},"content":" return this.numTasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":272,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":273,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":273}},{"path":"src/main/java/duke/task/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":" * This is the TaskType enum","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":" * @author Selwyn","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SelwynAng":9}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":" * The Todo class represents a task without a specific due date or time.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Todo object with the specified description.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @param detail The description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public Todo(String detail) {","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" super(detail);","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Todo object, including its completion status and description.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Todo object.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" return \"[T] \" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":27}},{"path":"src/test/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"public class DukeTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" public void dummyTest(){","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public void anotherDummyTest(){","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":17}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" public void testParseCommandForExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" Command c \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" c \u003d parser.parseCommand(\"bye\");","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" assertEquals(c.getClass(), new ExitCommand().getClass());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" public void testParseCommandForList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" Command c \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" c \u003d parser.parseCommand(\"list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" assertEquals(c.getClass(), new ListCommand().getClass());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"SelwynAng":34}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" Task testTask \u003d new Task(\"testTask\");","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" testTask.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" assertTrue(testTask.getIsDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" public void testMarkUndone(){","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" Task testTask \u003d new Task(\"testTask\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" testTask.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" testTask.markUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" assertFalse(testTask.getIsDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"SelwynAng":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"todo drink tea","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"event project meeting /from Tues 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":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":"SelwynAng"},"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":{"SelwynAng":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"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":"SelwynAng"},"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":{"SelwynAng":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":"SelwynAng"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-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":"-"},"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":"SelwynAng"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"SelwynAng":6,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" * The Duke class represents a task management application. It provides functionality","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * to interact with the user, manage tasks, and store task information.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" /** Name of chatbot */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" private static final String NAME \u003d \"Duke Prince\";","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" /** Task list associated with this duke.Duke object */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" /** Storage associated with this Duke object */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" /** UI associated with this Duke object */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" /** Parser associated with this Duke object */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" private Parser parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Duke object with the specified file path to initialize the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" * @param filePath The file path where task data is stored.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" ui \u003d new Ui(NAME);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" String[] dirAndFilePathArr \u003d filePath.split(\"/\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" String dirPath \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c dirAndFilePathArr.length - 1; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" dirPath +\u003d dirAndFilePathArr[i];","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" dirPath +\u003d \"/\";","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" System.out.println(dirPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" storage \u003d new Storage(dirPath, dirAndFilePathArr[dirAndFilePathArr.length - 1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" taskList \u003d new TaskList(storage.retrieveTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" ui.printError(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" * Starts the Duke application by displaying a greeting and processing user commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":" ui.greet();","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" boolean exitProgram \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" String userInput;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" while (!exitProgram) {","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" userInput \u003d ui.readCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":" Command c \u003d this.parser.parseCommand(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" exitProgram \u003d c.isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" ui.printError(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" } finally {","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" * The main method to launch the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":" * @param args Command-line arguments (not used in this context).","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":84,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"SelwynAng":81,"-":3}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":" * The DukeException class represents an exception specific to the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * Constructs a DukeException object with the specified error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @param message The error message to be associated with the exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":17}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * The Parser class is responsible for parsing user input and generating the corresponding commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Parses the user input to generate the appropriate command.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param userInput The input provided by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" * @return A Command object representing the parsed command.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the input cannot be parsed into a valid command.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" public Command parseCommand(String userInput) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" String userCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" String args;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" String[] parsedCommand \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" userCommand \u003d parsedCommand[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" args \u003d parsedCommand.length \u003e 1 ? parsedCommand[1] : \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" switch (userCommand) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" return new AddCommand(TaskType.TODO, args);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" return new AddCommand(TaskType.DEADLINE, args);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" return new AddCommand(TaskType.EVENT, args);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" return new MarkCommand(args, true);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" return new MarkCommand(args, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" return new DeleteCommand(args);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" return new FindCommand(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"I don\u0027t understand what you are saying!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" + \"Available commands are list, todo, deadline, event, mark, unmark, delete, bye.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":56}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * The Storage class handles file operations for saving and retrieving tasks to/from a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" * @author Selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" /** The file used for storage. */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" private File file;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" /** The full path of the file. */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" private String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Storage object with the specified directory path and file name.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * @param directoryPath The directory path where the file should be stored.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * @param fileName The name of the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" public Storage(String directoryPath, String fileName) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" this.filePath \u003d directoryPath + fileName;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" if (new File(directoryPath).mkdirs()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Directories are created.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Directories already exist.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" if (this.file.createNewFile()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"File is created: \" + this.file.getName());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"File already exists.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" * Saves the given list of tasks to the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" * @param tasks The list of tasks to be saved.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" FileWriter fileWriter \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" fileWriter.write(tasks.get(i).toString() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":" * Retrieves tasks from the file and returns them as an ArrayList.","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" * @return An ArrayList of Task objects retrieved from the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue with file retrieval or if the file is corrupted.","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter dateTimeFormat \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"SelwynAng"},"content":" Scanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"SelwynAng"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"SelwynAng"},"content":" String taskDesc \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"SelwynAng"},"content":" String[] taskDescArr \u003d taskDesc.split(\" \", 3);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"SelwynAng"},"content":" String taskTitle \u003d taskDescArr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"SelwynAng"},"content":" String taskDoneStatus \u003d taskDescArr[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"SelwynAng"},"content":" String taskDetails \u003d taskDescArr[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"SelwynAng"},"content":" Task taskToAdd;","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"SelwynAng"},"content":" switch(taskTitle) {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"SelwynAng"},"content":" case(\"[T]\"):","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"SelwynAng"},"content":" taskToAdd \u003d new Todo(taskDetails);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"SelwynAng"},"content":" if (taskDoneStatus.equals(\"[X]\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"SelwynAng"},"content":" taskToAdd.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"SelwynAng"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"SelwynAng"},"content":" case(\"[D]\"):","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"SelwynAng"},"content":" String[] taskDetailsArr \u003d taskDetails.split(\"\\\\(by:\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"SelwynAng"},"content":" taskToAdd \u003d new Deadline(taskDetailsArr[0].trim(),","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime.parse(taskDetailsArr[1].split(\"\\\\)\")[0].trim(),","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"SelwynAng"},"content":" dateTimeFormat));","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"SelwynAng"},"content":" if (taskDoneStatus.equals(\"[X]\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"SelwynAng"},"content":" taskToAdd.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"SelwynAng"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"SelwynAng"},"content":" case(\"[E]\"):","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"SelwynAng"},"content":" String[] taskDetailsArrOne \u003d taskDetails.split(\"\\\\(from:\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"SelwynAng"},"content":" String taskDetailsForEvent \u003d taskDetailsArrOne[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"SelwynAng"},"content":" String[] taskDetailsArrTwo \u003d taskDetailsArrOne[1].split(\"to:\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"SelwynAng"},"content":" taskToAdd \u003d new Event(taskDetailsForEvent.trim(),","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime.parse(taskDetailsArrTwo[0].trim(), dateTimeFormat),","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime.parse(taskDetailsArrTwo[1].split(\"\\\\)\")[0].trim(),","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"SelwynAng"},"content":" dateTimeFormat));","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"SelwynAng"},"content":" if (taskDoneStatus.equals(\"[X]\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"SelwynAng"},"content":" taskToAdd.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"SelwynAng"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"SelwynAng"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"File is corrupted!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"SelwynAng"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"File cannot be found!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"SelwynAng"},"content":" return taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":139}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * The Ui class handles interactions with the user interface, providing methods to read input,","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * display messages, and print various types of information.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /** Name of the chatbot */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private static String name;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Constructs an Ui object with the specified name to be used in greetings and messages.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param name The name of the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" public Ui(String name) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" * Reads a command input from the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" * @return The command input provided by the user as a string.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" return userInput;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" * Prints the task list to the console.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The task list to be displayed.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" * @param isMatching Determines which statements to print (true for matching tasks, false for all tasks)","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" public void printTaskList(TaskList taskList, boolean isMatching) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" taskList.displayTaskList(isMatching);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" * Prints a message indicating that a task has been added, along with the new task\u0027s details.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" * @param addedTask The task that was added.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" * @param noOfTasksAfterAdding The number of tasks after adding the new task.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" public void printAddedTask(Task addedTask, int noOfTasksAfterAdding) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":" System.out.println(addedTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" if (noOfTasksAfterAdding \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Now you have \" + noOfTasksAfterAdding + \" task in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Now you have \" + noOfTasksAfterAdding + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" * Prints a message indicating the change in task done status.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" * @param taskToChange The task for which the status changed.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" * @param isDone Whether the task is marked as done or not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" public void printChangeTaskDoneStatus(Task taskToChange, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":" if (isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Nice! I\u0027ve marked this task done:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":" System.out.println(taskToChange.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"SelwynAng"},"content":" * Prints a message indicating that a task has been deleted, along with the remaining tasks count.","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"SelwynAng"},"content":" * @param deletedTask The task that was deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"SelwynAng"},"content":" * @param numOfTasksLeft The number of tasks remaining after deletion.","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"SelwynAng"},"content":" public void printDeletedTask(Task deletedTask, int numOfTasksLeft) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"SelwynAng"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"SelwynAng"},"content":" System.out.println(deletedTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"SelwynAng"},"content":" if (numOfTasksLeft \u003d\u003d 1 || numOfTasksLeft \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Now you have \" + numOfTasksLeft + \" task in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Now you have \" + numOfTasksLeft + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"SelwynAng"},"content":" * Prints a greeting message to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"SelwynAng"},"content":" public void greet() {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"SelwynAng"},"content":" this.printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Hello! I\u0027m \" + name);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"SelwynAng"},"content":" this.printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"SelwynAng"},"content":" * Prints a farewell message to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"SelwynAng"},"content":" public void printExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"SelwynAng"},"content":" * Prints a horizontal line for visual separation.","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"SelwynAng"},"content":" public void printHorizontalLine() {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"SelwynAng"},"content":" int width \u003d 50;","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c width; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"SelwynAng"},"content":" System.out.print(\"-\");","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"SelwynAng"},"content":" * Prints an error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"SelwynAng"},"content":" * @param errorMsg The error message to be displayed.","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"SelwynAng"},"content":" public void printError(String errorMsg) {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"OOPS! \" + errorMsg);","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":136}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" * The AddCommand class represents a command to add a new task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" /** The type of task to be added. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" private TaskType taskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" /** The details for creating the duke.task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" private String addCommandDetails;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * Constructs an AddCommand object with the specified task type and details.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" * @param taskType The type of task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" * @param args The arguments for creating the duke.task.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" public AddCommand(TaskType taskType, String args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" this.addCommandDetails \u003d args;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" * Executes the AddCommand by adding a new task to the task list and updating the storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue adding the task or updating storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" Task addedTask \u003d taskList.addTask(this.taskType, this.addCommandDetails);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" ui.printAddedTask(addedTask, taskList.getNumTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":51}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * The Command class represents a command that can be executed in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" /** Indicates whether the command triggers an exit from the application. */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * Executes the command using the provided TaskList, Ui, and Storage objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue executing the duke.command.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" * Toggles the exit status of the duke.command.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" public void changeExitStatus() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" this.isExit \u003d !this.isExit;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" * Checks whether the command triggers an exit from the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @return True if the command triggers an exit, false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" return this.isExit;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":42}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * The DeleteCommand class represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /** The details of the task to be deleted. */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private String taskToDeleteDetails;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Constructs a DeleteCommand object with the specified details of the task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param args The arguments specifying the task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" public DeleteCommand(String args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" this.taskToDeleteDetails \u003d args;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" * Executes the DeleteCommand by removing a task from the task list and updating the storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue deleting the task or updating storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" Task deletedTask \u003d taskList.deleteTask(taskToDeleteDetails);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" int numOfTasksLeft \u003d taskList.getNumTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" ui.printDeletedTask(deletedTask, numOfTasksLeft);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":46}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * The ExitCommand class represents a command to exit the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" * Executes the ExitCommand by changing the exit status and displaying an exit message.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" super.changeExitStatus();","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" ui.printExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":25}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * The FindCommand class represents a command for searching and finding tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * based on user-defined criteria in a task management application.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" /** The search criteria provided by the user for finding tasks. */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" private String taskToFindDetails;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * Constructs a new FindCommand object with the specified search criteria.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" * @param args The search criteria provided by the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" public FindCommand(String args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" this.taskToFindDetails \u003d args;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * Executes the find command, searching for tasks in the given task list","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * that match the provided search criteria and displays the results.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The list of tasks to search within.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" * @param ui The user interface for displaying the results.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @param storage The storage for data retrieval and persistence.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue executing the command.","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d taskList.findTasks(taskToFindDetails);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" TaskList taskListWithFoundTasks \u003d new TaskList(foundTasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" ui.printTaskList(taskListWithFoundTasks, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"SelwynAng":46}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * The ListCommand class represents a command to list all tasks in the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" * Executes the ListCommand by displaying the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" ui.printTaskList(taskList, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":25}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * The MarkCommand class represents a command to mark or unmark a task as done in the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /** Indicates whether to mark the task as done or not. */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private boolean toMark;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /** The details of the task to be marked. */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" private String taskToMarkDetails;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" * Constructs a MarkCommand object with the specified details of the task to be marked and the marking status.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" * @param args The arguments specifying the task to be marked.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" * @param toMark True if the task should be marked as done, false if it should be marked as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" public MarkCommand(String args, boolean toMark) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" this.taskToMarkDetails \u003d args;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" this.toMark \u003d toMark;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * Executes the MarkCommand by marking or unmarking a task as done and updating the storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue marking or unmarking the task or updating storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" Task taskToChange \u003d taskList.changeTaskDoneStatus(this.taskToMarkDetails, this.toMark);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" ui.printChangeTaskDoneStatus(taskToChange, this.toMark);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":50}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * The Deadline class represents a task with a specific end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" /** The end date and time of the deadline. */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" private LocalDateTime endDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Deadline object with the specified description and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * @param detail The description of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * @param endDateTime The end date and time of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" public Deadline(String detail, LocalDateTime endDateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" super(detail);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Deadline object, including its completion status, description,","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" * and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" return \"[D] \" + super.toString() + \" (by: \" + super.getDisplayDateTime(this.endDateTime) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":35}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * The Event class represents a task that occurs during a specified time range.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" * It extends the Task class and includes information about the start and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" /** Start date and time of the event */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" private LocalDateTime startDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /** End date and time of the event */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private LocalDateTime endDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Constructs an Event object with the specified details, start date and time, and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param detail The details of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" * @param startDateTime The start date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * @param endDateTime The end date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" public Event(String detail, LocalDateTime startDateTime, LocalDateTime endDateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" super(detail);","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Event object, including its details and time range.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Event object.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" return \"[E] \" + super.toString() + \" (from: \" + super.getDisplayDateTime(this.startDateTime)","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" + \" to: \" + super.getDisplayDateTime(this.endDateTime) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":41}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" * The Task class represents a task with a description and completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" /** The description of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" private String detail;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /** The completion status of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Task object with the specified description and sets its completion status to false.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param detail The description of the duke.task.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" public Task(String detail) {","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" this.detail \u003d detail;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" * Returns a formatted display string of the provided LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" * @param dateTime The LocalDateTime object to be formatted.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * @return A formatted date and time string.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" public String getDisplayDateTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter displayFormat \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" return dateTime.format(displayFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Task object, including its completion status and description.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" return \"[X] \" + this.detail;","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" return \"[-] \" + this.detail;","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" * Marks the task as done by setting its completion status to true.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" public void markDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" * Marks the task as undone by setting its completion status to false.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" * Returns the done status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" * @return A boolean value that corresponds to whether the task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":" return this.isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":75}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" * The TaskList class manages a list of tasks and provides methods for adding, creating, deleting, and modifying tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"public class TaskList {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" /** The list of tasks. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" /** The number of tasks in the list. */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" private int numTasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * Constructs a TaskList object with the specified list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" * @param tasks The list of tasks to be managed.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" this.numTasks \u003d tasks.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * Adds a new task of the specified type with the given arguments to the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" * @param taskType The type of task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" * @param args The arguments for creating the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @return The added Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue with task creation or task type is unsupported.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" public Task addTask(TaskType taskType, String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" case TODO:","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" newTask \u003d createTodo(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" newTask \u003d createDeadline(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" case EVENT:","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" newTask \u003d createEvent(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" default:","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"I can\u0027t create this task type!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" this.tasks.add(newTask);","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" this.numTasks++;","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" return newTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" * Creates a new Todo task with the given description.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" * @param args The description for the Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" * @return The created Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the description is missing.","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":" public Todo createTodo(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" if (args \u003d\u003d null || args.isEmpty()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Todo tasks should be created in this format: todo [name]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" return new Todo(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":" * Creates a new Deadline task with the given description and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"SelwynAng"},"content":" * @param args The description and end date/time for the Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"SelwynAng"},"content":" * @return The created Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the format is incorrect or the end date/time is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"SelwynAng"},"content":" public Deadline createDeadline(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter dateTimeFormat \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"SelwynAng"},"content":" String[] detailsAndDeadline \u003d args.split(\"/by\", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":91,"author":{"gitId":"SelwynAng"},"content":" if (detailsAndDeadline.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Deadline tasks should be created in this format: deadline [name] /by [date]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":94,"author":{"gitId":"SelwynAng"},"content":" String details \u003d detailsAndDeadline[0].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":95,"author":{"gitId":"SelwynAng"},"content":" String endDateTime \u003d detailsAndDeadline[1].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":96,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime formattedEndDateTime \u003d LocalDateTime.parse(endDateTime, dateTimeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"SelwynAng"},"content":" return new Deadline(details, formattedEndDateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"SelwynAng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Invalid deadline time format. Please use dd-MM-yyyy HHmm format!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":102,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":104,"author":{"gitId":"SelwynAng"},"content":" * Creates a new Event task with the given description and start/end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"SelwynAng"},"content":" * @param args The description and start/end date/time for the Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"SelwynAng"},"content":" * @return The created Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the format is incorrect or the date/time is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"SelwynAng"},"content":" public Event createEvent(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter dateTimeFormat \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"SelwynAng"},"content":" String eventMsg \u003d \"Event tasks should be created in this format: \"","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"SelwynAng"},"content":" + \"event [name] /from [start time] /to [end time]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"SelwynAng"},"content":" String[] detailsAndStartEnd \u003d args.split(\"/from\", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":117,"author":{"gitId":"SelwynAng"},"content":" if (detailsAndStartEnd.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":118,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(eventMsg);","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":120,"author":{"gitId":"SelwynAng"},"content":" String details \u003d detailsAndStartEnd[0].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":121,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":122,"author":{"gitId":"SelwynAng"},"content":" String[] startAndEnd \u003d detailsAndStartEnd[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":123,"author":{"gitId":"SelwynAng"},"content":" if (startAndEnd.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":124,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(eventMsg);","lastModifiedDate":"2023-08-22"},{"lineNumber":125,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":126,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":127,"author":{"gitId":"SelwynAng"},"content":" String start \u003d startAndEnd[0].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":128,"author":{"gitId":"SelwynAng"},"content":" String end \u003d startAndEnd[1].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":129,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime formattedStartDateTime \u003d LocalDateTime.parse(start, dateTimeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime formattedEndDateTime \u003d LocalDateTime.parse(end, dateTimeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"SelwynAng"},"content":" return new Event(details, formattedStartDateTime, formattedEndDateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"SelwynAng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Invalid event time format. Please use dd-MM-yyyy HHmm format!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":136,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":137,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":138,"author":{"gitId":"SelwynAng"},"content":" * Deletes a task from the list based on the given task number.","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"SelwynAng"},"content":" * @param args The task number to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"SelwynAng"},"content":" * @return The deleted Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the task number is invalid or in an incorrect format.","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":144,"author":{"gitId":"SelwynAng"},"content":" public Task deleteTask(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"SelwynAng"},"content":" int taskNumber;","lastModifiedDate":"2023-08-22"},{"lineNumber":146,"author":{"gitId":"SelwynAng"},"content":" Task deletedTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":149,"author":{"gitId":"SelwynAng"},"content":" taskNumber \u003d Integer.parseInt(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":150,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":151,"author":{"gitId":"SelwynAng"},"content":" if (taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-22"},{"lineNumber":152,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number must be more 1 or more!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":153,"author":{"gitId":"SelwynAng"},"content":" } else if (this.exceedsSizeOfTaskList(taskNumber)) {","lastModifiedDate":"2023-08-22"},{"lineNumber":154,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number is higher than current size of task list!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":156,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":157,"author":{"gitId":"SelwynAng"},"content":" deletedTask \u003d this.tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"SelwynAng"},"content":" this.numTasks--;","lastModifiedDate":"2023-08-22"},{"lineNumber":159,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":160,"author":{"gitId":"SelwynAng"},"content":" return deletedTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"SelwynAng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":162,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Deleting task should be in this format: delete [task number]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":164,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":165,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":166,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":167,"author":{"gitId":"SelwynAng"},"content":" * Changes the done status of a task based on the given task number and state.","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"SelwynAng"},"content":" * @param args The task number to be marked/unmarked and the state.","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"SelwynAng"},"content":" * @param toBeDone The desired state (true for done, false for undone).","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"SelwynAng"},"content":" * @return The Task object with the modified done status.","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the task number is invalid or in an incorrect format.","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":174,"author":{"gitId":"SelwynAng"},"content":" public Task changeTaskDoneStatus(String args, boolean toBeDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"SelwynAng"},"content":" int taskNumber;","lastModifiedDate":"2023-08-22"},{"lineNumber":176,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":177,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":178,"author":{"gitId":"SelwynAng"},"content":" taskNumber \u003d Integer.parseInt(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":179,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":180,"author":{"gitId":"SelwynAng"},"content":" if (taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-22"},{"lineNumber":181,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number must be more 1 or more!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":182,"author":{"gitId":"SelwynAng"},"content":" } else if (this.exceedsSizeOfTaskList(taskNumber)) {","lastModifiedDate":"2023-08-22"},{"lineNumber":183,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number is higher than current size of task list!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":185,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":186,"author":{"gitId":"SelwynAng"},"content":" Task taskToChange \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"SelwynAng"},"content":" if (toBeDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"SelwynAng"},"content":" taskToChange.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":191,"author":{"gitId":"SelwynAng"},"content":" taskToChange.markUndone();","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":193,"author":{"gitId":"SelwynAng"},"content":" return taskToChange;","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"SelwynAng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":195,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Marking/unmarking tasks should be in this format: mark/unmark [task number]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":197,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":199,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":200,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":201,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":202,"author":{"gitId":"SelwynAng"},"content":" * Displays the list of tasks to the console.","lastModifiedDate":"2023-08-29"},{"lineNumber":203,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"SelwynAng"},"content":" * @param isMatching Determine which statements to print (true for matching tasks, false for all tasks)","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":206,"author":{"gitId":"SelwynAng"},"content":" public void displayTaskList(boolean isMatching) {","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"SelwynAng"},"content":" if (isMatching) {","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"SelwynAng"},"content":" if (this.numTasks \u003d\u003d 0 || this.numTasks \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Here is the matching task in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"SelwynAng"},"content":" if (this.numTasks \u003d\u003d 0 || this.numTasks \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":215,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Here is the task in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":216,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":217,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-21"},{"lineNumber":218,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":219,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c this.numTasks; i++) {","lastModifiedDate":"2023-08-21"},{"lineNumber":222,"author":{"gitId":"SelwynAng"},"content":" int bullet \u003d i + 1;","lastModifiedDate":"2023-08-21"},{"lineNumber":223,"author":{"gitId":"SelwynAng"},"content":" System.out.print(bullet + \". \");","lastModifiedDate":"2023-08-21"},{"lineNumber":224,"author":{"gitId":"SelwynAng"},"content":" System.out.println(this.tasks.get(i).toString());","lastModifiedDate":"2023-08-22"},{"lineNumber":225,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":226,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":227,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":228,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"SelwynAng"},"content":" * Finds the tasks which details contains the given string parameter","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"SelwynAng"},"content":" * @param taskToFindDetails The details of the task to find","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"SelwynAng"},"content":" * @return The ArrayList of tasks that match the string parameter","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"SelwynAng"},"content":" public ArrayList\u003cTask\u003e findTasks(String taskToFindDetails) {","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"SelwynAng"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"SelwynAng"},"content":" Task taskInFocus \u003d this.tasks.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"SelwynAng"},"content":" if (taskInFocus.toString().contains(taskToFindDetails)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"SelwynAng"},"content":" foundTasks.add(taskInFocus);","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"SelwynAng"},"content":" return foundTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":247,"author":{"gitId":"SelwynAng"},"content":" * Checks if the given index exceeds the size of the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":248,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":249,"author":{"gitId":"SelwynAng"},"content":" * @param index The index to be checked.","lastModifiedDate":"2023-08-29"},{"lineNumber":250,"author":{"gitId":"SelwynAng"},"content":" * @return True if the index exceeds the task list size, false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":251,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":252,"author":{"gitId":"SelwynAng"},"content":" public boolean exceedsSizeOfTaskList(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":253,"author":{"gitId":"SelwynAng"},"content":" return index \u003e numTasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":254,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":255,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":256,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":257,"author":{"gitId":"SelwynAng"},"content":" * Retrieves the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":258,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":259,"author":{"gitId":"SelwynAng"},"content":" * @return The ArrayList of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":260,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":261,"author":{"gitId":"SelwynAng"},"content":" public ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":262,"author":{"gitId":"SelwynAng"},"content":" return this.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":263,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":264,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":265,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":266,"author":{"gitId":"SelwynAng"},"content":" * Retrieves the number of tasks in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":267,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":268,"author":{"gitId":"SelwynAng"},"content":" * @return The number of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":269,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":270,"author":{"gitId":"SelwynAng"},"content":" public int getNumTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":271,"author":{"gitId":"SelwynAng"},"content":" return this.numTasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":272,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":273,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":273}},{"path":"src/main/java/duke/task/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":" * This is the TaskType enum","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":" * @author Selwyn","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SelwynAng":9}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":" * The Todo class represents a task without a specific due date or time.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Todo object with the specified description.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @param detail The description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public Todo(String detail) {","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" super(detail);","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Todo object, including its completion status and description.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Todo object.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" return \"[T] \" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":27}},{"path":"src/test/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"public class DukeTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" public void dummyTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":17}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public void testParseCommandForExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" Command c \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" c \u003d parser.parseCommand(\"bye\");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" assertEquals(c.getClass(), new ExitCommand().getClass());","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" public void testParseCommandForList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" Command c \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" c \u003d parser.parseCommand(\"list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" assertEquals(c.getClass(), new ListCommand().getClass());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"SelwynAng":36}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" Task testTask \u003d new Task(\"testTask\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" testTask.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" assertTrue(testTask.getIsDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" public void testMarkUndone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" Task testTask \u003d new Task(\"testTask\");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" testTask.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" testTask.markUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" assertFalse(testTask.getIsDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"SelwynAng":23}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"todo drink tea","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"event project meeting /from Tues 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":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":"SelwynAng"},"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":{"SelwynAng":1,"-":20}}] diff --git a/SelwynAng_ip_master/commits.json b/SelwynAng_ip_master/commits.json index 2ae8acac..d34cdd5c 100644 --- a/SelwynAng_ip_master/commits.json +++ b/SelwynAng_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"SelwynAng":[{"date":"2023-08-21","commitResults":[{"hash":"60a0618b1a4f5c3aac2dee62e4a544ba17a3c53b","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"15204c02961a6973c0dd6ff68efba830ead7534b","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":3}}},{"hash":"32ac95fa0afc40bab2c8f242cb5260ff2c8e40e6","isMergeCommit":false,"messageTitle":"Added adding and listing tasks functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":15}}},{"hash":"8a6b8f63b9ddb2d2476a327a5b5cf56c9a107271","isMergeCommit":false,"messageTitle":"Added functionality for marking tasks done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":17}}},{"hash":"836aa1b79deaeee554f45d395baf4c8c9ee62f9b","isMergeCommit":false,"messageTitle":"Added support for todos, deadlines, events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":360,"deletions":216},"bat":{"insertions":21,"deletions":21},"sh":{"insertions":37,"deletions":37},"md":{"insertions":62,"deletions":62}}},{"hash":"7fcc559b4c484ca7d3f796c102062dd7770283b9","isMergeCommit":false,"messageTitle":"Added test using the I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":2,"deletions":9},"sh":{"insertions":37,"deletions":37}}},{"hash":"e117ddfb5d4a2044efd1395261f363541f759260","isMergeCommit":false,"messageTitle":"Added handling of exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":35}}}]},{"date":"2023-08-22","commitResults":[{"hash":"5ca48d8d8f03be72b7b91356458a6ec02d46c8ff","isMergeCommit":false,"messageTitle":"Added functionality for deleting tasks, more error handling","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":52},"sh":{"insertions":0,"deletions":0}}},{"hash":"f9972667bf74b8288ed951e513386f771c9aed94","isMergeCommit":false,"messageTitle":"Added enums and refactored code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":138}}},{"hash":"85ed2cac3f431ea385bf9965fe3f73c70714dd39","isMergeCommit":false,"messageTitle":"Updated createTodo method to handle empty args","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"af05ecc4f1d77b057be69fe4d7a9617da95f79fe","isMergeCommit":false,"messageTitle":"Change indentation for Switch statments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":39}}}]},{"date":"2023-08-29","commitResults":[{"hash":"c39e81737d66ced090e0908670486d8f83bcecd8","isMergeCommit":false,"messageTitle":"Add save and retrive task functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":5}}},{"hash":"ba6266cdd5126a1aede08896bc9d8acf51407995","isMergeCommit":false,"messageTitle":"Add Date and Time parsing functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":32}}},{"hash":"fe7fe4327a0076c943363ee358d1ac29da992174","isMergeCommit":false,"messageTitle":"Refactor code to extract out Storage, Parser, Ui, Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":610,"deletions":254}}},{"hash":"c38c9812f2582dfa5a508c05d0c620769a5cfd62","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":25},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"bd9c236a4a79f04e90e5fafa75bd2dd04ed5e63a","isMergeCommit":false,"messageTitle":"Change indention of switch statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":30}}},{"hash":"ca665611e2b4d5874439bf4213c7199e4c283c6b","isMergeCommit":false,"messageTitle":"Build the project","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"63803755269637bc5fbfb5f758fe7b988e35fe9b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-A-Gradle Merge branch add-gradle support into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a2521244b645b5126dc2c8d77abfb3fc65a3580c","isMergeCommit":false,"messageTitle":"Set up Gradle to run Duke and unit tests","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":17,"deletions":0}}},{"hash":"cf077100de6f4704710256b64a59598d20f581a8","isMergeCommit":false,"messageTitle":"Edit String output for certain methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":16}}}]},{"date":"2023-08-30","commitResults":[{"hash":"695fe97f858a16034017ab1f97e1dc7511a3c2fc","isMergeCommit":false,"messageTitle":"Add getIsDone method to Task file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"67810f89f857731526055b45710e1ec561ae2429","isMergeCommit":false,"messageTitle":"Add unit testing for Parser and Task classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"bfb9b6e5a0d1b0152a8625307edba0c1c3c337f8","isMergeCommit":false,"messageTitle":"Change Javadocs for greet method in Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"269ff4f1e5ecdadd8685ce93b5f3cdf2113cf18b","isMergeCommit":false,"messageTitle":"Tweak code to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":7}}},{"hash":"96396fb7e12acf8d596161f6230aa2c2ebebe8f1","isMergeCommit":false,"messageTitle":"Add Find Command functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":17}}},{"hash":"3fa00a4f651f79b7eedf4a2deedfe0f8f03f0782","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 Merge branch \u0027branch-Level-7\u0027 into master to add save and retrieve tasks functionality","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"9cb1d33252824a840375460196eb89e79a4a82f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 Merge branch-Level-8 into master to add date and timing parsing functionality","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"6bc5db02374b508e5467f7d7ad3127e34c804a43","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027 Merge branch-A-MoreOOP into master to make code more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"3c5fdc25fba3160161704287d21dce7fc5f0aaed","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027 Merge branch-A-Packages into master to add packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"3a38ce1ce07a3accf5fabff106238b031e4091b5","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 Add gradle support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2744fbb1db350e8ab94c40abfb10d0332647866d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027 Add gradle functionality","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7309cde5fdf46adfd9174accb5d66a443f1ba0a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027 Add Java testing","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"cba99fb9b5d7219fdda9ffec2d4ef6167a1daabc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027 Merge branch-A-JavaDoc into master to update Javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"00c1208e659e0ed731fde222ab8ae6ec573ac5c1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027 Merge branch-A-CodingStandard into master to tweak code to comply with a coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"b6fc7337f50d1ef9269a01e846a44b97a81d0d72","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 Merge branch-Level-9 into master to add find command functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"SelwynAng":{"java":1218,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":1,"txt":7}},"authorContributionVariance":{"SelwynAng":208699.8},"authorDisplayNameMap":{"SelwynAng":"CS2103T-F11-1 ANG ..LWYN"}} +{"authorDailyContributionsMap":{"SelwynAng":[{"date":"2023-08-21","commitResults":[{"hash":"60a0618b1a4f5c3aac2dee62e4a544ba17a3c53b","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"15204c02961a6973c0dd6ff68efba830ead7534b","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":3}}},{"hash":"32ac95fa0afc40bab2c8f242cb5260ff2c8e40e6","isMergeCommit":false,"messageTitle":"Added adding and listing tasks functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":15}}},{"hash":"8a6b8f63b9ddb2d2476a327a5b5cf56c9a107271","isMergeCommit":false,"messageTitle":"Added functionality for marking tasks done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":17}}},{"hash":"836aa1b79deaeee554f45d395baf4c8c9ee62f9b","isMergeCommit":false,"messageTitle":"Added support for todos, deadlines, events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":360,"deletions":216},"bat":{"insertions":21,"deletions":21},"sh":{"insertions":37,"deletions":37},"md":{"insertions":62,"deletions":62}}},{"hash":"7fcc559b4c484ca7d3f796c102062dd7770283b9","isMergeCommit":false,"messageTitle":"Added test using the I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":2,"deletions":9},"sh":{"insertions":37,"deletions":37}}},{"hash":"e117ddfb5d4a2044efd1395261f363541f759260","isMergeCommit":false,"messageTitle":"Added handling of exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":35}}}]},{"date":"2023-08-22","commitResults":[{"hash":"5ca48d8d8f03be72b7b91356458a6ec02d46c8ff","isMergeCommit":false,"messageTitle":"Added functionality for deleting tasks, more error handling","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":52},"sh":{"insertions":0,"deletions":0}}},{"hash":"f9972667bf74b8288ed951e513386f771c9aed94","isMergeCommit":false,"messageTitle":"Added enums and refactored code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":138}}},{"hash":"85ed2cac3f431ea385bf9965fe3f73c70714dd39","isMergeCommit":false,"messageTitle":"Updated createTodo method to handle empty args","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"af05ecc4f1d77b057be69fe4d7a9617da95f79fe","isMergeCommit":false,"messageTitle":"Change indentation for Switch statments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":39}}}]},{"date":"2023-08-29","commitResults":[{"hash":"c39e81737d66ced090e0908670486d8f83bcecd8","isMergeCommit":false,"messageTitle":"Add save and retrive task functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":5}}},{"hash":"ba6266cdd5126a1aede08896bc9d8acf51407995","isMergeCommit":false,"messageTitle":"Add Date and Time parsing functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":32}}},{"hash":"fe7fe4327a0076c943363ee358d1ac29da992174","isMergeCommit":false,"messageTitle":"Refactor code to extract out Storage, Parser, Ui, Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":610,"deletions":254}}},{"hash":"c38c9812f2582dfa5a508c05d0c620769a5cfd62","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":25},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"bd9c236a4a79f04e90e5fafa75bd2dd04ed5e63a","isMergeCommit":false,"messageTitle":"Change indention of switch statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":30}}},{"hash":"ca665611e2b4d5874439bf4213c7199e4c283c6b","isMergeCommit":false,"messageTitle":"Build the project","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"63803755269637bc5fbfb5f758fe7b988e35fe9b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-A-Gradle Merge branch add-gradle support into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a2521244b645b5126dc2c8d77abfb3fc65a3580c","isMergeCommit":false,"messageTitle":"Set up Gradle to run Duke and unit tests","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":17,"deletions":0}}},{"hash":"cf077100de6f4704710256b64a59598d20f581a8","isMergeCommit":false,"messageTitle":"Edit String output for certain methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":16}}}]},{"date":"2023-08-30","commitResults":[{"hash":"695fe97f858a16034017ab1f97e1dc7511a3c2fc","isMergeCommit":false,"messageTitle":"Add getIsDone method to Task file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"67810f89f857731526055b45710e1ec561ae2429","isMergeCommit":false,"messageTitle":"Add unit testing for Parser and Task classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"bfb9b6e5a0d1b0152a8625307edba0c1c3c337f8","isMergeCommit":false,"messageTitle":"Change Javadocs for greet method in Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"269ff4f1e5ecdadd8685ce93b5f3cdf2113cf18b","isMergeCommit":false,"messageTitle":"Tweak code to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":7}}},{"hash":"96396fb7e12acf8d596161f6230aa2c2ebebe8f1","isMergeCommit":false,"messageTitle":"Add Find Command functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":17}}},{"hash":"3fa00a4f651f79b7eedf4a2deedfe0f8f03f0782","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 Merge branch \u0027branch-Level-7\u0027 into master to add save and retrieve tasks functionality","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"9cb1d33252824a840375460196eb89e79a4a82f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 Merge branch-Level-8 into master to add date and timing parsing functionality","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"6bc5db02374b508e5467f7d7ad3127e34c804a43","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027 Merge branch-A-MoreOOP into master to make code more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"3c5fdc25fba3160161704287d21dce7fc5f0aaed","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027 Merge branch-A-Packages into master to add packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"3a38ce1ce07a3accf5fabff106238b031e4091b5","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 Add gradle support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2744fbb1db350e8ab94c40abfb10d0332647866d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027 Add gradle functionality","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7309cde5fdf46adfd9174accb5d66a443f1ba0a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027 Add Java testing","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"cba99fb9b5d7219fdda9ffec2d4ef6167a1daabc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027 Merge branch-A-JavaDoc into master to update Javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"00c1208e659e0ed731fde222ab8ae6ec573ac5c1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027 Merge branch-A-CodingStandard into master to tweak code to comply with a coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"b6fc7337f50d1ef9269a01e846a44b97a81d0d72","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 Merge branch-Level-9 into master to add find command functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"c85d744992d8f023270d45a697cd8d8e7e185c81","isMergeCommit":false,"messageTitle":"Implement CheckStyle rules for all files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":81,"deletions":49}}},{"hash":"01e938de1166e08b5fa7f46e6bc6955e0c8a7d76","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027 Merge branch-A-CheckStyle into master","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"SelwynAng":{"java":1250,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":6,"txt":7}},"authorContributionVariance":{"SelwynAng":163378.94},"authorDisplayNameMap":{"SelwynAng":"CS2103T-F11-1 ANG ..LWYN"}} diff --git a/Tang-Moyan_ip_master/authorship.json b/Tang-Moyan_ip_master/authorship.json index 794140e4..90e16a15 100644 --- a/Tang-Moyan_ip_master/authorship.json +++ b/Tang-Moyan_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tang-Moyan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Tang-Moyan"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Tang-Moyan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Tang-Moyan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Tang-Moyan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Tang-Moyan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Tang-Moyan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Tang-Moyan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Tang-Moyan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Tang-Moyan"},"content":"import HelperClass.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"Tang-Moyan"},"content":" private static void printOneLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"---------------------------\");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Tang-Moyan"},"content":" private static final String MyName \u003d \"Rio\";","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Tang-Moyan"},"content":" public static void Greet() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Hello! I\u0027m \" + MyName);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Tang-Moyan"},"content":" public static void Exit() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Tang-Moyan"},"content":" private static String GetUserTaskName() {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Tang-Moyan"},"content":" Scanner getUserInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Tang-Moyan"},"content":" String taskName \u003d getUserInput.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Tang-Moyan"},"content":" if (taskName.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"OOPS!!! The name of a task cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Tang-Moyan"},"content":" return \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Tang-Moyan"},"content":" return taskName;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Tang-Moyan"},"content":" private static void BackgroundSetUp() {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Tang-Moyan"},"content":" String directoryName \u003d \"data\";","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Tang-Moyan"},"content":" String fileName \u003d \"list.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Tang-Moyan"},"content":" File dir \u003d new File(directoryName);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Tang-Moyan"},"content":" if (!(dir.exists())) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Tang-Moyan"},"content":" if (dir.mkdir()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Directory \u0027\" + directoryName + \"\u0027 created.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Tang-Moyan"},"content":" System.err.println(\"Failed to create directory \u0027\" + directoryName + \"\u0027.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Tang-Moyan"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Tang-Moyan"},"content":" File file \u003d new File(dir, fileName);","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Tang-Moyan"},"content":" if (!(file.exists())) {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Tang-Moyan"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Tang-Moyan"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"File \u0027\" + fileName + \"\u0027 created in directory \u0027\" + directoryName + \"\u0027.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Tang-Moyan"},"content":" System.err.println(\"Failed to create file \u0027\" + fileName + \"\u0027 in directory \u0027\" + directoryName + \"\u0027.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Tang-Moyan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Tang-Moyan"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Tang-Moyan"},"content":" private static List\u003cString\u003e ReadLine(String line) {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Tang-Moyan"},"content":" List\u003cString\u003e formattedLine \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Tang-Moyan"},"content":" Scanner lineScanner \u003d new Scanner(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Tang-Moyan"},"content":" while (lineScanner.hasNext()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Tang-Moyan"},"content":" String token \u003d lineScanner.next();","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Tang-Moyan"},"content":" formattedLine.add(token);","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Tang-Moyan"},"content":" lineScanner.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Tang-Moyan"},"content":" return formattedLine;","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Tang-Moyan"},"content":" private static Task[] LoadList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Tang-Moyan"},"content":" Task[] userList \u003d new Task[100];","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Tang-Moyan"},"content":" int positionPointer \u003d 0;","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Tang-Moyan"},"content":" String fileName \u003d \"data/list.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Tang-Moyan"},"content":" Path path \u003d Paths.get(fileName);","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Tang-Moyan"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Tang-Moyan"},"content":" Scanner fileScanner \u003d new Scanner(path);","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"Tang-Moyan"},"content":" while(fileScanner.hasNextLine()){","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"Tang-Moyan"},"content":" // Record format: \"Type | Status | Name | Time\"","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"Tang-Moyan"},"content":" // example: \"D | 0 | return book | June 6th\"","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"Tang-Moyan"},"content":" // \"0\" for not done and \"1\" for done","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"Tang-Moyan"},"content":" String line \u003d fileScanner.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"Tang-Moyan"},"content":" List\u003cString\u003e formattedLine \u003d ReadLine(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"Tang-Moyan"},"content":" List\u003cString\u003e attributes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"Tang-Moyan"},"content":" String attributeName \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"Tang-Moyan"},"content":" for (Object element : formattedLine) {","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"Tang-Moyan"},"content":" if (element.equals(\"|\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"Tang-Moyan"},"content":" attributes.add(attributeName);","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"Tang-Moyan"},"content":" attributeName \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"Tang-Moyan"},"content":" attributeName \u003d attributeName + element + \" \";","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"Tang-Moyan"},"content":" attributes.add(attributeName);","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"Tang-Moyan"},"content":" boolean isDone \u003d attributes.get(1).equals(\"1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"Tang-Moyan"},"content":" switch (attributes.get(0)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"Tang-Moyan"},"content":" case \"T\": {","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"Tang-Moyan"},"content":" Task task \u003d new Task(attributes.get(2), 1, \"Null\", isDone);","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"Tang-Moyan"},"content":" userList[positionPointer] \u003d task;","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"Tang-Moyan"},"content":" case \"D\": {","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"Tang-Moyan"},"content":" Task task \u003d new Task(attributes.get(2), 2, attributes.get(3), isDone);","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"Tang-Moyan"},"content":" userList[positionPointer] \u003d task;","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"Tang-Moyan"},"content":" case \"E\": {","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"Tang-Moyan"},"content":" Task task \u003d new Task(attributes.get(2), 3, attributes.get(3), isDone);","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"Tang-Moyan"},"content":" userList[positionPointer] \u003d task;","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"Tang-Moyan"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"Tang-Moyan"},"content":" throw new IllegalStateException(\"Unexpected value: \" + attributes.get(0));","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"Tang-Moyan"},"content":" positionPointer++;","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"Tang-Moyan"},"content":" fileScanner.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"Tang-Moyan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"Tang-Moyan"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"Tang-Moyan"},"content":" return userList;","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"Tang-Moyan"},"content":" private static void SaveList(Task[] userList, int numberOfElements) {","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"Tang-Moyan"},"content":" String fileName \u003d \"data/list.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"Tang-Moyan"},"content":" try (FileWriter writer \u003d new FileWriter(fileName)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"Tang-Moyan"},"content":" for (int i \u003d 0; i \u003c numberOfElements; i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"Tang-Moyan"},"content":" writer.write(userList[i].ForRecordingInTextFile());","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"Tang-Moyan"},"content":" writer.write(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"Tang-Moyan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"Tang-Moyan"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":183,"author":{"gitId":"-"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":184,"author":{"gitId":"-"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":185,"author":{"gitId":"-"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":186,"author":{"gitId":"-"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":187,"author":{"gitId":"-"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2019-07-29"},{"lineNumber":188,"author":{"gitId":"-"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2019-07-29"},{"lineNumber":189,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"Tang-Moyan"},"content":" BackgroundSetUp();","lastModifiedDate":"2023-09-04"},{"lineNumber":191,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"Tang-Moyan"},"content":" Greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"Tang-Moyan"},"content":" boolean wantToExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"Tang-Moyan"},"content":" Scanner getUserInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"Tang-Moyan"},"content":" Scanner getUserIndex \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"Tang-Moyan"},"content":" Task[] userList \u003d LoadList();","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"Tang-Moyan"},"content":" int listPointer \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"Tang-Moyan"},"content":" while (!(wantToExit)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"Tang-Moyan"},"content":" String userInput \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"Tang-Moyan"},"content":" switch (userInput) {","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"Tang-Moyan"},"content":" case \"bye\":","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"Tang-Moyan"},"content":" wantToExit \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"Tang-Moyan"},"content":" getUserInput.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"Tang-Moyan"},"content":" getUserIndex.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"Tang-Moyan"},"content":" Exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"Tang-Moyan"},"content":" case \"list\":","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"Tang-Moyan"},"content":" if (listPointer \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"No items in the list yet\");","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"Tang-Moyan"},"content":" for (int i \u003d 0; i \u003c listPointer; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"Tang-Moyan"},"content":" int num \u003d i + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(num + userList[i].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"Tang-Moyan"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter index:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"Tang-Moyan"},"content":" int index \u003d getUserIndex.nextInt() - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"Tang-Moyan"},"content":" if (index \u003c 0 || index \u003e\u003d listPointer) {","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":237,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":238,"author":{"gitId":"Tang-Moyan"},"content":" userList[index].markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":239,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"Tang-Moyan"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter index:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"Tang-Moyan"},"content":" int i \u003d getUserIndex.nextInt() - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"Tang-Moyan"},"content":" if (i \u003c 0 || i \u003e\u003d listPointer) {","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":250,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":251,"author":{"gitId":"Tang-Moyan"},"content":" userList[i].unmarkDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"Tang-Moyan"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter task name:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"Tang-Moyan"},"content":" String taskName \u003d GetUserTaskName();","lastModifiedDate":"2023-09-04"},{"lineNumber":260,"author":{"gitId":"Tang-Moyan"},"content":" if (!(taskName.isEmpty())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":261,"author":{"gitId":"Tang-Moyan"},"content":" userList[listPointer] \u003d new Task(taskName, 1, \"Null\", false);","lastModifiedDate":"2023-09-04"},{"lineNumber":262,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":271,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":272,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"Tang-Moyan"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter task name:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"Tang-Moyan"},"content":" String taskN \u003d GetUserTaskName();","lastModifiedDate":"2023-09-04"},{"lineNumber":277,"author":{"gitId":"Tang-Moyan"},"content":" if (!(taskN.isEmpty())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":278,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter deadline:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"Tang-Moyan"},"content":" String timePeriod \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"Tang-Moyan"},"content":" userList[listPointer] \u003d new Task(taskN, 2, \"by:\" + timePeriod, false);","lastModifiedDate":"2023-09-04"},{"lineNumber":281,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":288,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":289,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":290,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":291,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":292,"author":{"gitId":"Tang-Moyan"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":293,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter task name:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":294,"author":{"gitId":"Tang-Moyan"},"content":" String tN \u003d GetUserTaskName();","lastModifiedDate":"2023-09-04"},{"lineNumber":295,"author":{"gitId":"Tang-Moyan"},"content":" if (!(tN.isEmpty())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":296,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter start time:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":297,"author":{"gitId":"Tang-Moyan"},"content":" String startTime \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":298,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter end time:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":299,"author":{"gitId":"Tang-Moyan"},"content":" String endTime \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":300,"author":{"gitId":"Tang-Moyan"},"content":" String timePeriod \u003d \"from: \" + startTime + \" to: \" + endTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":301,"author":{"gitId":"Tang-Moyan"},"content":" userList[listPointer] \u003d new Task(tN, 3, timePeriod, false);","lastModifiedDate":"2023-09-04"},{"lineNumber":302,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":303,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":304,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":305,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":306,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":307,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":308,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":309,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":310,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":311,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":312,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":313,"author":{"gitId":"Tang-Moyan"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":314,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter index:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":315,"author":{"gitId":"Tang-Moyan"},"content":" int ind \u003d getUserIndex.nextInt() - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":316,"author":{"gitId":"Tang-Moyan"},"content":" if (ind \u003c 0 || ind \u003e\u003d listPointer) {","lastModifiedDate":"2023-09-01"},{"lineNumber":317,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":318,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":319,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":320,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":321,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":322,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-09-01"},{"lineNumber":323,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":324,"author":{"gitId":"Tang-Moyan"},"content":" Task[] newUserList \u003d new Task[100];","lastModifiedDate":"2023-09-01"},{"lineNumber":325,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":326,"author":{"gitId":"Tang-Moyan"},"content":" for (int a \u003d 0, k \u003d 0; a \u003c listPointer; a++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":327,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":328,"author":{"gitId":"Tang-Moyan"},"content":" // if the index is","lastModifiedDate":"2023-09-01"},{"lineNumber":329,"author":{"gitId":"Tang-Moyan"},"content":" // the removal element index","lastModifiedDate":"2023-09-01"},{"lineNumber":330,"author":{"gitId":"Tang-Moyan"},"content":" if (a \u003d\u003d ind) {","lastModifiedDate":"2023-09-01"},{"lineNumber":331,"author":{"gitId":"Tang-Moyan"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":332,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":333,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":334,"author":{"gitId":"Tang-Moyan"},"content":" // if the index is not","lastModifiedDate":"2023-09-01"},{"lineNumber":335,"author":{"gitId":"Tang-Moyan"},"content":" // the removal element index","lastModifiedDate":"2023-09-01"},{"lineNumber":336,"author":{"gitId":"Tang-Moyan"},"content":" newUserList[k++] \u003d userList[a];","lastModifiedDate":"2023-09-01"},{"lineNumber":337,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":338,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":339,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":340,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":341,"author":{"gitId":"Tang-Moyan"},"content":" userList \u003d newUserList;","lastModifiedDate":"2023-09-01"},{"lineNumber":342,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":343,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":344,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":345,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":346,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":347,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":348,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":349,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":350,"author":{"gitId":"Tang-Moyan"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":351,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-01"},{"lineNumber":352,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":353,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":354,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":355,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":356,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":357,"author":{"gitId":"Tang-Moyan"},"content":" SaveList(userList, listPointer);","lastModifiedDate":"2023-09-04"},{"lineNumber":358,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":359,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":360,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":361,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":362,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":363,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":364,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":365,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":366,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":367,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":368,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":369,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Tang-Moyan":359,"-":10}},{"path":"src/main/java/HelperClass/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tang-Moyan"},"content":"package HelperClass;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Tang-Moyan"},"content":"public class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Tang-Moyan"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Tang-Moyan"},"content":" private int type;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Tang-Moyan"},"content":" private String timePeriod;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Tang-Moyan"},"content":" private String taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Tang-Moyan"},"content":" public Task(String taskName, int type, String timePeriod, boolean isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Tang-Moyan"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Tang-Moyan"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Tang-Moyan"},"content":" this.timePeriod \u003d timePeriod;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Tang-Moyan"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Tang-Moyan"},"content":" public void markDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Tang-Moyan"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"[X] \" + taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Tang-Moyan"},"content":" public void unmarkDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Tang-Moyan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"[ ] \" + taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Tang-Moyan"},"content":" public String display() {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Tang-Moyan"},"content":" String description \u003d \"[\";","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Tang-Moyan"},"content":" switch (this.type) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Tang-Moyan"},"content":" case 1:","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"T]\";","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Tang-Moyan"},"content":" case 2:","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"D]\";","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Tang-Moyan"},"content":" case 3:","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"E]\";","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Tang-Moyan"},"content":" if (isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"[X] \" + taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"[ ] \" + taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Tang-Moyan"},"content":" if (!(this.type \u003d\u003d 1)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \" (\" + timePeriod + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Tang-Moyan"},"content":" return description;","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Tang-Moyan"},"content":" public String ForRecordingInTextFile() {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Tang-Moyan"},"content":" // Record format: \"Type | Status | Name | Time\"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Tang-Moyan"},"content":" // example: \"D | 0 | return book | June 6th\"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Tang-Moyan"},"content":" // \"0\" for not done and \"1\" for done","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Tang-Moyan"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Tang-Moyan"},"content":" switch (this.type) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Tang-Moyan"},"content":" case 1:","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"T | \";","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Tang-Moyan"},"content":" case 2:","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"D | \";","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Tang-Moyan"},"content":" case 3:","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"E | \";","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Tang-Moyan"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"1 | \" + taskName;","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"0 | \" + taskName;","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Tang-Moyan"},"content":" if (!(this.type \u003d\u003d 1)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \" | \" + timePeriod;","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Tang-Moyan"},"content":" return description;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Tang-Moyan"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Tang-Moyan":89}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Tang-Moyan"},"content":"todo","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Tang-Moyan"},"content":"read book","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Tang-Moyan"},"content":"bye","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Tang-Moyan":3}}] +[{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tang-Moyan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Tang-Moyan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Tang-Moyan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Tang-Moyan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Tang-Moyan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Tang-Moyan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Tang-Moyan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Tang-Moyan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Tang-Moyan"},"content":"import HelperClass.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"Tang-Moyan"},"content":" private static void printOneLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"---------------------------\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Tang-Moyan"},"content":" private static final String MyName \u003d \"Rio\";","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Tang-Moyan"},"content":" public static void Greet() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Hello! I\u0027m \" + MyName);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Tang-Moyan"},"content":" public static void Exit() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Tang-Moyan"},"content":" private static String GetUserTaskName() {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Tang-Moyan"},"content":" Scanner getUserInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Tang-Moyan"},"content":" String taskName \u003d getUserInput.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Tang-Moyan"},"content":" if (taskName.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"OOPS!!! The name of a task cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Tang-Moyan"},"content":" return \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Tang-Moyan"},"content":" return taskName;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Tang-Moyan"},"content":" private static void BackgroundSetUp() {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Tang-Moyan"},"content":" String directoryName \u003d \"data\";","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Tang-Moyan"},"content":" String fileName \u003d \"list.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Tang-Moyan"},"content":" File dir \u003d new File(directoryName);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Tang-Moyan"},"content":" if (!(dir.exists())) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Tang-Moyan"},"content":" if (dir.mkdir()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Directory \u0027\" + directoryName + \"\u0027 created.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Tang-Moyan"},"content":" System.err.println(\"Failed to create directory \u0027\" + directoryName + \"\u0027.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Tang-Moyan"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Tang-Moyan"},"content":" File file \u003d new File(dir, fileName);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Tang-Moyan"},"content":" if (!(file.exists())) {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Tang-Moyan"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Tang-Moyan"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"File \u0027\" + fileName + \"\u0027 created in directory \u0027\" + directoryName + \"\u0027.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Tang-Moyan"},"content":" System.err.println(\"Failed to create file \u0027\" + fileName + \"\u0027 in directory \u0027\" + directoryName + \"\u0027.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Tang-Moyan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Tang-Moyan"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Tang-Moyan"},"content":" private static List\u003cString\u003e ReadLine(String line) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Tang-Moyan"},"content":" List\u003cString\u003e formattedLine \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Tang-Moyan"},"content":" Scanner lineScanner \u003d new Scanner(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Tang-Moyan"},"content":" while (lineScanner.hasNext()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Tang-Moyan"},"content":" String token \u003d lineScanner.next();","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Tang-Moyan"},"content":" formattedLine.add(token);","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Tang-Moyan"},"content":" lineScanner.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Tang-Moyan"},"content":" return formattedLine;","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Tang-Moyan"},"content":" private static Task[] LoadList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Tang-Moyan"},"content":" Task[] userList \u003d new Task[100];","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Tang-Moyan"},"content":" int positionPointer \u003d 0;","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Tang-Moyan"},"content":" String fileName \u003d \"data/list.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Tang-Moyan"},"content":" Path path \u003d Paths.get(fileName);","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Tang-Moyan"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Tang-Moyan"},"content":" Scanner fileScanner \u003d new Scanner(path);","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Tang-Moyan"},"content":" while(fileScanner.hasNextLine()){","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"Tang-Moyan"},"content":" // Record format: \"Type | Status | Name | StartTime(optional) | EndTime(optional)\"","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"Tang-Moyan"},"content":" // example: \"D | 0 | return book | 2023-09-04\"","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"Tang-Moyan"},"content":" // \"0\" for not done and \"1\" for done","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"Tang-Moyan"},"content":" String line \u003d fileScanner.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"Tang-Moyan"},"content":" List\u003cString\u003e formattedLine \u003d ReadLine(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"Tang-Moyan"},"content":" List\u003cString\u003e attributes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"Tang-Moyan"},"content":" StringBuilder attributeName \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"Tang-Moyan"},"content":" for (Object element : formattedLine) {","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"Tang-Moyan"},"content":" if (element.equals(\"|\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"Tang-Moyan"},"content":" attributes.add(attributeName.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"Tang-Moyan"},"content":" attributeName \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"Tang-Moyan"},"content":" if (attributeName.length() \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"Tang-Moyan"},"content":" attributeName.append(element);","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"Tang-Moyan"},"content":" attributeName.append(\" \").append(element);","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"Tang-Moyan"},"content":" attributes.add(attributeName.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"Tang-Moyan"},"content":" boolean isDone \u003d attributes.get(1).equals(\"1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"Tang-Moyan"},"content":" switch (attributes.get(0)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"Tang-Moyan"},"content":" case \"T\": {","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"Tang-Moyan"},"content":" Task task \u003d new Task(attributes.get(2), 1, \"Null\", \"Null\", isDone);","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"Tang-Moyan"},"content":" userList[positionPointer] \u003d task;","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"Tang-Moyan"},"content":" case \"D\": {","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"Tang-Moyan"},"content":" Task task \u003d new Task(attributes.get(2), 2, \"Null\", attributes.get(3), isDone);","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"Tang-Moyan"},"content":" userList[positionPointer] \u003d task;","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"Tang-Moyan"},"content":" case \"E\": {","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"Tang-Moyan"},"content":" Task task \u003d new Task(attributes.get(2), 3, attributes.get(3), attributes.get(4), isDone);","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"Tang-Moyan"},"content":" userList[positionPointer] \u003d task;","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"Tang-Moyan"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"Tang-Moyan"},"content":" throw new IllegalStateException(\"Unexpected value: \" + attributes.get(0));","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"Tang-Moyan"},"content":" positionPointer++;","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"Tang-Moyan"},"content":" fileScanner.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"Tang-Moyan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"Tang-Moyan"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"Tang-Moyan"},"content":" return userList;","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"Tang-Moyan"},"content":" private static void SaveList(Task[] userList, int numberOfElements) {","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"Tang-Moyan"},"content":" String fileName \u003d \"data/list.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"Tang-Moyan"},"content":" try (FileWriter writer \u003d new FileWriter(fileName)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"Tang-Moyan"},"content":" for (int i \u003d 0; i \u003c numberOfElements; i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"Tang-Moyan"},"content":" writer.write(userList[i].ForRecordingInTextFile());","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"Tang-Moyan"},"content":" writer.write(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"Tang-Moyan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"Tang-Moyan"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":181,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":187,"author":{"gitId":"-"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":188,"author":{"gitId":"-"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":189,"author":{"gitId":"-"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":190,"author":{"gitId":"-"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":191,"author":{"gitId":"-"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2019-07-29"},{"lineNumber":192,"author":{"gitId":"-"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2019-07-29"},{"lineNumber":193,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"Tang-Moyan"},"content":" BackgroundSetUp();","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":196,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"Tang-Moyan"},"content":" Greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"Tang-Moyan"},"content":" boolean wantToExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"Tang-Moyan"},"content":" Scanner getUserInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"Tang-Moyan"},"content":" Scanner getUserIndex \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"Tang-Moyan"},"content":" Task[] userList \u003d LoadList();","lastModifiedDate":"2023-09-04"},{"lineNumber":203,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"Tang-Moyan"},"content":" int listPointer \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"Tang-Moyan"},"content":" while (!(wantToExit)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"Tang-Moyan"},"content":" String userInput \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"Tang-Moyan"},"content":" switch (userInput) {","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"Tang-Moyan"},"content":" case \"bye\":","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"Tang-Moyan"},"content":" wantToExit \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"Tang-Moyan"},"content":" getUserInput.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":215,"author":{"gitId":"Tang-Moyan"},"content":" getUserIndex.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":216,"author":{"gitId":"Tang-Moyan"},"content":" Exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":218,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"Tang-Moyan"},"content":" case \"list\":","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"Tang-Moyan"},"content":" if (listPointer \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"No items in the list yet\");","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"Tang-Moyan"},"content":" for (int i \u003d 0; i \u003c listPointer; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"Tang-Moyan"},"content":" int num \u003d i + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(num + userList[i].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"Tang-Moyan"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter index:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":237,"author":{"gitId":"Tang-Moyan"},"content":" int index \u003d getUserIndex.nextInt() - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":238,"author":{"gitId":"Tang-Moyan"},"content":" if (index \u003c 0 || index \u003e\u003d listPointer) {","lastModifiedDate":"2023-08-30"},{"lineNumber":239,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"Tang-Moyan"},"content":" userList[index].markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"Tang-Moyan"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter index:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":250,"author":{"gitId":"Tang-Moyan"},"content":" int i \u003d getUserIndex.nextInt() - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":251,"author":{"gitId":"Tang-Moyan"},"content":" if (i \u003c 0 || i \u003e\u003d listPointer) {","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"Tang-Moyan"},"content":" userList[i].unmarkDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"Tang-Moyan"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter task name:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"Tang-Moyan"},"content":" String taskName \u003d GetUserTaskName();","lastModifiedDate":"2023-09-04"},{"lineNumber":264,"author":{"gitId":"Tang-Moyan"},"content":" if (!(taskName.isEmpty())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":265,"author":{"gitId":"Tang-Moyan"},"content":" userList[listPointer] \u003d new Task(taskName, 1, \"Null\", \"Null\", false);","lastModifiedDate":"2023-09-04"},{"lineNumber":266,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":272,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":275,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":276,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":277,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":278,"author":{"gitId":"Tang-Moyan"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter task name:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"Tang-Moyan"},"content":" String taskN \u003d GetUserTaskName();","lastModifiedDate":"2023-09-04"},{"lineNumber":281,"author":{"gitId":"Tang-Moyan"},"content":" if (!(taskN.isEmpty())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":282,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter deadline:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"Tang-Moyan"},"content":" String timePeriod \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"Tang-Moyan"},"content":" userList[listPointer] \u003d new Task(taskN, 2, \"Null\", timePeriod, false);","lastModifiedDate":"2023-09-04"},{"lineNumber":285,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":288,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":289,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":290,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":291,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":292,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":293,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":294,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":295,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":296,"author":{"gitId":"Tang-Moyan"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":297,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter task name:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":298,"author":{"gitId":"Tang-Moyan"},"content":" String tN \u003d GetUserTaskName();","lastModifiedDate":"2023-09-04"},{"lineNumber":299,"author":{"gitId":"Tang-Moyan"},"content":" if (!(tN.isEmpty())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":300,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter start time:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":301,"author":{"gitId":"Tang-Moyan"},"content":" String startTime \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":302,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter end time:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":303,"author":{"gitId":"Tang-Moyan"},"content":" String endTime \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":304,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":305,"author":{"gitId":"Tang-Moyan"},"content":" userList[listPointer] \u003d new Task(tN, 3, startTime, endTime, false);","lastModifiedDate":"2023-09-04"},{"lineNumber":306,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":307,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":308,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":309,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":310,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":311,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":312,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":313,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":314,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":315,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":316,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":317,"author":{"gitId":"Tang-Moyan"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":318,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter index:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":319,"author":{"gitId":"Tang-Moyan"},"content":" int ind \u003d getUserIndex.nextInt() - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":320,"author":{"gitId":"Tang-Moyan"},"content":" if (ind \u003c 0 || ind \u003e\u003d listPointer) {","lastModifiedDate":"2023-09-01"},{"lineNumber":321,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":322,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":323,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":324,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":325,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":326,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-09-01"},{"lineNumber":327,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":328,"author":{"gitId":"Tang-Moyan"},"content":" Task[] newUserList \u003d new Task[100];","lastModifiedDate":"2023-09-01"},{"lineNumber":329,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":330,"author":{"gitId":"Tang-Moyan"},"content":" for (int a \u003d 0, k \u003d 0; a \u003c listPointer; a++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":331,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":332,"author":{"gitId":"Tang-Moyan"},"content":" // if the index is","lastModifiedDate":"2023-09-01"},{"lineNumber":333,"author":{"gitId":"Tang-Moyan"},"content":" // the removal element index","lastModifiedDate":"2023-09-01"},{"lineNumber":334,"author":{"gitId":"Tang-Moyan"},"content":" if (a \u003d\u003d ind) {","lastModifiedDate":"2023-09-01"},{"lineNumber":335,"author":{"gitId":"Tang-Moyan"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":336,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":337,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":338,"author":{"gitId":"Tang-Moyan"},"content":" // if the index is not","lastModifiedDate":"2023-09-01"},{"lineNumber":339,"author":{"gitId":"Tang-Moyan"},"content":" // the removal element index","lastModifiedDate":"2023-09-01"},{"lineNumber":340,"author":{"gitId":"Tang-Moyan"},"content":" newUserList[k++] \u003d userList[a];","lastModifiedDate":"2023-09-01"},{"lineNumber":341,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":342,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":343,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":344,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":345,"author":{"gitId":"Tang-Moyan"},"content":" userList \u003d newUserList;","lastModifiedDate":"2023-09-01"},{"lineNumber":346,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":347,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":348,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":349,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":350,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":351,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":352,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":353,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":354,"author":{"gitId":"Tang-Moyan"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":355,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-01"},{"lineNumber":356,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":357,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":358,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":359,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":360,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":361,"author":{"gitId":"Tang-Moyan"},"content":" SaveList(userList, listPointer);","lastModifiedDate":"2023-09-04"},{"lineNumber":362,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":363,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":364,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":365,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":366,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":367,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":368,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":369,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":370,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":371,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":372,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":373,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Tang-Moyan":363,"-":10}},{"path":"src/main/java/HelperClass/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tang-Moyan"},"content":"package HelperClass;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Tang-Moyan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Tang-Moyan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Tang-Moyan"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Tang-Moyan"},"content":"public class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Tang-Moyan"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Tang-Moyan"},"content":" private int type;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Tang-Moyan"},"content":" private String taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Tang-Moyan"},"content":" private LocalDate startDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Tang-Moyan"},"content":" private LocalDate endDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Tang-Moyan"},"content":" public Task(String taskName, int type, String startDate, String endDate, boolean isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Tang-Moyan"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Tang-Moyan"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Tang-Moyan"},"content":" switch (this.type) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Tang-Moyan"},"content":" case 1:","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Tang-Moyan"},"content":" case 2:","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Tang-Moyan"},"content":" this.endDate \u003d LocalDate.parse(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Tang-Moyan"},"content":" case 3:","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Tang-Moyan"},"content":" this.startDate \u003d LocalDate.parse(startDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Tang-Moyan"},"content":" this.endDate \u003d LocalDate.parse(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Tang-Moyan"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Tang-Moyan"},"content":" public void markDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Tang-Moyan"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"[X] \" + taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Tang-Moyan"},"content":" public void unmarkDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Tang-Moyan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"[ ] \" + taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Tang-Moyan"},"content":" public String display() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Tang-Moyan"},"content":" String description \u003d \"[\";","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Tang-Moyan"},"content":" switch (this.type) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Tang-Moyan"},"content":" case 1:","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"T]\";","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Tang-Moyan"},"content":" case 2:","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"D]\";","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Tang-Moyan"},"content":" case 3:","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"E]\";","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Tang-Moyan"},"content":" if (isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"[X] \" + taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"[ ] \" + taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Tang-Moyan"},"content":" if (this.type \u003d\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \" (by: \" + endDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Tang-Moyan"},"content":" if (this.type \u003d\u003d 3) {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \" (from: \" + startDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Tang-Moyan"},"content":" + \" to: \" + endDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Tang-Moyan"},"content":" return description;","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Tang-Moyan"},"content":" public String ForRecordingInTextFile() {","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Tang-Moyan"},"content":" // Record format: \"Type | Status | Name | StartTime(optional) | EndTime(optional)\"","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Tang-Moyan"},"content":" // example: \"D | 0 | return book | June 6th\"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Tang-Moyan"},"content":" // \"0\" for not done and \"1\" for done","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Tang-Moyan"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Tang-Moyan"},"content":" switch (this.type) {","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Tang-Moyan"},"content":" case 1:","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"T | \";","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Tang-Moyan"},"content":" case 2:","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"D | \";","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"Tang-Moyan"},"content":" case 3:","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"E | \";","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"Tang-Moyan"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"1 | \" + taskName;","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"0 | \" + taskName;","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"Tang-Moyan"},"content":" if (this.type \u003d\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \" | \" + endDate.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"Tang-Moyan"},"content":" if (this.type \u003d\u003d 3) {","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \" | \" + startDate.toString() + \" | \" + endDate.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"Tang-Moyan"},"content":" return description;","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Tang-Moyan"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Tang-Moyan":122}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Tang-Moyan"},"content":"todo","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Tang-Moyan"},"content":"read book","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Tang-Moyan"},"content":"bye","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Tang-Moyan":3}}] diff --git a/Tang-Moyan_ip_master/commits.json b/Tang-Moyan_ip_master/commits.json index d9b43e9c..3dcb11e1 100644 --- a/Tang-Moyan_ip_master/commits.json +++ b/Tang-Moyan_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Tang-Moyan":[{"date":"2023-08-24","commitResults":[{"hash":"f88b6b32bb87fbb42eb9debc9cd5901b5b9f9f49","isMergeCommit":false,"messageTitle":"Level 0 Rename, Greet, Exit","messageBody":"","tags":["Level_0","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"fedfbdec231d900841404fa0a31d85ef5ddb4af9","isMergeCommit":false,"messageTitle":"Added Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":0}}},{"hash":"30a8d0f3cc16b11f4d136027c753f844b6efbdca","isMergeCommit":false,"messageTitle":"Added Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":9}}},{"hash":"76e279d8d193b7f5cc5d9b588686e5212ea4ceab","isMergeCommit":false,"messageTitle":"Added Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":5}}},{"hash":"05bfd793eb631167cc6031dbfb6cab14fcff225f","isMergeCommit":false,"messageTitle":"Added Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":4}}}]},{"date":"2023-09-01","commitResults":[{"hash":"95571afe30bf6968e33b2f5f00b7c4f4d8652969","isMergeCommit":false,"messageTitle":"Added UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"6b91d86451bb6f99fd480fd81feec8120083a9ae","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":30}}},{"hash":"5bb12d45cb438a464f4a3a8fa9a3beb69e60d8df","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"3df86789d8ddc522ef8c39ed5f4f739d499af501","isMergeCommit":false,"messageTitle":"Added Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":196,"deletions":10}}},{"hash":"e5419c65951f05ab07ea68d7026d31a095d69b55","isMergeCommit":false,"messageTitle":"Small changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"9cd2af309f398acaa9caff51f3555c7eea4419fc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Tang-Moyan":{"java":448,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":3}},"authorContributionVariance":{"Tang-Moyan":5226.25},"authorDisplayNameMap":{"Tang-Moyan":"CS2103T-W11-4 TANG..OYAN"}} +{"authorDailyContributionsMap":{"Tang-Moyan":[{"date":"2023-08-24","commitResults":[{"hash":"f88b6b32bb87fbb42eb9debc9cd5901b5b9f9f49","isMergeCommit":false,"messageTitle":"Level 0 Rename, Greet, Exit","messageBody":"","tags":["Level_0","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"fedfbdec231d900841404fa0a31d85ef5ddb4af9","isMergeCommit":false,"messageTitle":"Added Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":0}}},{"hash":"30a8d0f3cc16b11f4d136027c753f844b6efbdca","isMergeCommit":false,"messageTitle":"Added Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":9}}},{"hash":"76e279d8d193b7f5cc5d9b588686e5212ea4ceab","isMergeCommit":false,"messageTitle":"Added Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":5}}},{"hash":"05bfd793eb631167cc6031dbfb6cab14fcff225f","isMergeCommit":false,"messageTitle":"Added Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":4}}}]},{"date":"2023-09-01","commitResults":[{"hash":"95571afe30bf6968e33b2f5f00b7c4f4d8652969","isMergeCommit":false,"messageTitle":"Added UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"6b91d86451bb6f99fd480fd81feec8120083a9ae","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":30}}},{"hash":"5bb12d45cb438a464f4a3a8fa9a3beb69e60d8df","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"3df86789d8ddc522ef8c39ed5f4f739d499af501","isMergeCommit":false,"messageTitle":"Added Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":196,"deletions":10}}},{"hash":"e5419c65951f05ab07ea68d7026d31a095d69b55","isMergeCommit":false,"messageTitle":"Small changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"9cd2af309f398acaa9caff51f3555c7eea4419fc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"61f2b5faceccafbaa5231e2e4109dad56728721a","isMergeCommit":false,"messageTitle":"Added Leve 8. Dates and Time","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":25}}},{"hash":"e55e84a3ebad45771be49ba9f60253858e19830f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Tang-Moyan":{"java":485,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":3}},"authorContributionVariance":{"Tang-Moyan":7348.8887},"authorDisplayNameMap":{"Tang-Moyan":"CS2103T-W11-4 TANG..OYAN"}} diff --git a/WangCheng0116_ip_master/authorship.json b/WangCheng0116_ip_master/authorship.json index 256772a2..9983e99f 100644 --- a/WangCheng0116_ip_master/authorship.json +++ b/WangCheng0116_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"# core.Duke project template","lastModifiedDate":"2023-08-30"},{"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":"WangCheng0116"},"content":"3. After that, locate the `src/main/java/core.Duke.java` file, right-click it, and choose `Run core.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-30"},{"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":{"WangCheng0116":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":"WangCheng0116"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"javafx {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" version \u003d \u002717.0.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" mavenCentral()","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":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":"mainClassName \u003d \u0027HelloFx\u0027","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"WangCheng0116":29,"-":41}},{"path":"src/main/java/commands/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to add a deadline task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"public class AddDeadlineCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" private Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an AddDeadlineCommand with the specified deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * @param task The deadline task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public AddDeadlineCommand(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to add the given deadline task to the task list and update storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list that the task will be added to.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update with the new task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" storage.addLine(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":36}},{"path":"src/main/java/commands/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to add an event task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"public class AddEventCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" private Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an AddEventCommand with the specified event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * @param task The event task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public AddEventCommand(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to add the given event task to the task list and update storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list that the task will be added to.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update with the new task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" tasks.add(task); // Add task to the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" storage.addLine(task.toString()); // Update storage with the new task","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":36}},{"path":"src/main/java/commands/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to add a todo task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"public class AddTodoCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of a todo command.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" public static final String TODO_PATTERN \u003d \"^(todo)\\\\s+.+\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" private Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an AddTodoCommand with the specified todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" * @param task The todo task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" public AddTodoCommand(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to add the given todo task to the task list and update storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list that the task will be added to.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update with the new task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" tasks.add(task); // Add task to the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" storage.addLine(task.toString()); // Update storage with the new task","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":41}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * The interface representing a command that can be executed on the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public interface Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command on the given task list, user interface, and storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list on which the command will be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" void execute(TaskList tasks, Ui ui, Storage storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":20}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of a delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public static final String DELETE_PATTERN \u003d \"^(delete)\\\\s+\\\\d+$\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private int pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a DeleteCommand with the specified position of the task to delete.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public DeleteCommand(int pos) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to delete the task at the specified position from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list from which the task will be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" tasks.delete(pos); // Delete task from the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":39}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class ExitCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to handle the application exit.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" ui.exit(); // Instruct the user interface to exit the application","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":23}},{"path":"src/main/java/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to find tasks containing a specified keyword in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" private static String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a FindCommand with the specified keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param keyword The keyword to search for in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" FindCommand.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" * Executes the find command on the provided task list, displaying tasks that match the keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list to search within.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage manager to handle data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" tasks.find(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":34}},{"path":"src/main/java/commands/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to display help information and usage examples.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class HelpCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to display help information and usage examples to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display help messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"Sorry, I don\u0027t understand what do you mean.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"Here are some sample usages for your reference:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"1. Add a deadline to your list: deadline + (description) + (deadline)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"2. Add a todo task to your list: todo + (description)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"3. Add an event task to your list: event + (description) + from + \"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" + \"(startdate) + to + (enddate)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"4. Delete a task: delete + (line number)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"5. Mark a task: mark + (line number)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"6. Unmark a class: unmark + (line number)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"content in ( ) is for you to fill out\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":31}},{"path":"src/main/java/commands/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to handle invalid user input by displaying an error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class InvalidCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" private String errorMessage;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an InvalidCommand with the specified error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param errorMessage The error message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" public InvalidCommand(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" this.errorMessage \u003d errorMessage;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":26}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to display the list of tasks to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to display the list of tasks to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" tasks.print(); // Display the list of tasks through the user interface","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":23}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to mark a task as done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class MarkCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of a mark command.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public static final String MARK_PATTERN \u003d \"^(mark)\\\\s+\\\\d+$\";","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" private int pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a MarkCommand with the specified position of the task to mark.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" public MarkCommand(int pos) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to mark the task at the specified position as done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * If the position is invalid, an error message is displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list in which the task will be marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" if (pos \u003e tasks.size() || pos \u003c\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" ui.showError(\"Invalid index. Please enter again.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" tasks.mark(pos); // Mark the task as done in the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" Storage.refresh(tasks); // Update storage with the modified task list","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":44}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to unmark a task as not done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class UnmarkCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of an unmark command.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public static final String UNMARK_PATTERN \u003d \"^(unmark)\\\\s+\\\\d+$\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private int pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an UnmarkCommand with the specified position of the task to unmark.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public UnmarkCommand(int pos) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to unmark the task at the specified position as not done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * If the position is invalid, an error message is displayed through the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list in which the task will be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display error messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" if (pos \u003e tasks.size() || pos \u003c\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" ui.showError(\"Invalid index. Please enter again.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" tasks.unmark(pos); // Unmark the task in the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" Storage.refresh(tasks); // Update storage with the modified task list","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":45}},{"path":"src/main/java/core/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package core;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import parser.CommandParser;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * Duke is a task management application that interacts with users through a command-line interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" * It allows users to manage tasks by adding, marking, and deleting tasks from a task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private static Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" private static String filepath;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Duke instance with the specified filepath for storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" * @param filepath The filepath for task storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" public Duke(String filepath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" Duke.filepath \u003d filepath;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" storage \u003d new Storage(filepath);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * Runs the Duke application, displaying a welcome message and handling user commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * The application continues running until the user inputs an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" public static void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" if (fullCommand.equals(null)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" isExit \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" Command c \u003d CommandParser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" * The main method to start the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" * @param args Command-line arguments (not used in this application).","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"WangCheng0116":58,"-":4}},{"path":"src/main/java/parser/CommandParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import commands.AddDeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import commands.AddEventCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import commands.AddTodoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"import commands.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"import commands.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"import commands.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"import commands.HelpCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"import commands.InvalidCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"import commands.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"import commands.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"import commands.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * The CommandParser is responsible for parsing input and generating the Command objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * It examines the input to determine the type of command and returns the appropriate instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":"public class CommandParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" * Extracts the command keyword from the input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * @return The command keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" private static String extractCommand(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" String[] words \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" if (words.length \u003e 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" return words[0].toLowerCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" return \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" * Extracts the value (e.g., task position) from the input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" * @return The extracted value.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" private static int extractValue(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" String[] parts \u003d input.split(\"\\\\s+\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" return Integer.parseInt(parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" * Parses the user input and generates the appropriate Command instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" * @return The corresponding Command instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" public static Command parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" String command \u003d extractCommand(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" TaskParser taskParser \u003d new TaskParser();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" case \"mark\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" Matcher markMatcher \u003d Pattern.compile(MarkCommand.MARK_PATTERN).matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" if (markMatcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" int pos \u003d extractValue(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" return new MarkCommand(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" return new InvalidCommand(\"Invalid mark command format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" case \"unmark\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" Matcher unmarkMatcher \u003d Pattern.compile(UnmarkCommand.UNMARK_PATTERN).matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" if (unmarkMatcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" int pos \u003d extractValue(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" return new UnmarkCommand(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" return new InvalidCommand(\"Invalid unmark command format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" case \"delete\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" Matcher deleteMatcher \u003d Pattern.compile(DeleteCommand.DELETE_PATTERN).matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" if (deleteMatcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" int pos \u003d extractValue(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" return new DeleteCommand(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" return new InvalidCommand(\"Invalid delete command format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" case \"find\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" String keyword \u003d input.substring(\"find\".length()).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" case \"event\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" return new AddEventCommand(taskParser.parseTask(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":" case \"todo\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"WangCheng0116"},"content":" return new AddTodoCommand(taskParser.parseTask(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"WangCheng0116"},"content":" case \"deadline\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"WangCheng0116"},"content":" return new AddDeadlineCommand(taskParser.parseTask(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"WangCheng0116"},"content":" case \"bye\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"WangCheng0116"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"WangCheng0116"},"content":" case \"list\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"WangCheng0116"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"WangCheng0116"},"content":" default -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"WangCheng0116"},"content":" return new HelpCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":113}},{"path":"src/main/java/parser/DataParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * The DataParser is responsible for parsing data from storage","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * files and converting them into Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"public class DataParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line from a storage file and converts it into a corresponding Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @return A Task object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" public static Task parseLineToTask(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" String typeIndicator \u003d line.substring(0, 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" switch (typeIndicator) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" case \"[D]\":","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" return parseDeadline(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" case \"[E]\":","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" return parseEvent(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" case \"[T]\":","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" return parseToDo(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Please check the original file for correctness.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line representing a deadline task and converts it into a Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line representing the deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" * @return A Deadline object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" public static Deadline parseDeadline(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" int descriptionStart \u003d \"deadline\".length() + 1; // Length of \"deadline\" plus the space","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" int byIndex \u003d line.indexOf(\"by:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" String description \u003d line.substring(descriptionStart, byIndex).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" String date \u003d line.substring(byIndex + \"/by\".length()).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" boolean isMarked \u003d line.charAt(4) \u003d\u003d \u0027X\u0027; // Assuming index 4 corresponds to the \"[ ]\" checkmark","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" return new Deadline(description, date, isMarked);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line representing an event task and converts it into an Event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line representing the event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" * @return An Event object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" public static Event parseEvent(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" int descriptionStart \u003d line.indexOf(\"] \") + 2; // Index of the first character after \"] \"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" int startFromIndex \u003d line.indexOf(\"from \") + 6; // Index of the character after \"from: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" int toIndex \u003d line.indexOf(\"to \", startFromIndex); // Index of the character before \"to: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" int endFromIndex \u003d toIndex + 4; // Index of the character after \"to: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" String description \u003d line.substring(descriptionStart, startFromIndex - 8).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" String start \u003d line.substring(startFromIndex, toIndex).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" String end \u003d line.substring(endFromIndex).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" boolean isMarked \u003d line.charAt(4) \u003d\u003d \u0027X\u0027; // Assuming index 4 corresponds to the \"[ ]\" checkmark","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" return new Event(description, start, end, isMarked);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line representing a todo task and converts it into a ToDo object.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line representing the todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" * @return A ToDo object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" public static ToDo parseToDo(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" int descriptionStart \u003d line.indexOf(\"] \") + 2; // Index of the first character after \"] \"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" String description \u003d line.substring(descriptionStart).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" boolean isMarked \u003d line.charAt(4) \u003d\u003d \u0027X\u0027; // Assuming index 4 corresponds to the \"[ ]\" checkmark","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" return new ToDo(description, isMarked);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":88}},{"path":"src/main/java/parser/TaskParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * The TaskParser class is responsible for parsing user input","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * and generating Task objects based on different task types.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"public class TaskParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * Parses the input string and generates a Task object based on the specified task type.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string containing task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" public Task parseTask(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" return parseDeadline(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" return parseEvent(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" return parseTodo(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" } catch (InvalidTaskFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"☹ OOPS!!! \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" private Deadline parseDeadline(String input) throws InvalidTaskFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" Pattern pattern \u003d Pattern.compile(\"deadline (.+) by: (.+)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" Matcher matcher \u003d pattern.matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" String taskDescription \u003d matcher.group(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" String deadlineTime \u003d matcher.group(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" return new Deadline(taskDescription, deadlineTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"Invalid deadline format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" private Event parseEvent(String input) throws InvalidTaskFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" Pattern pattern \u003d Pattern.compile(\"event (.+) from (.+) to (.+)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" Matcher matcher \u003d pattern.matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" String eventDescription \u003d matcher.group(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" String startTime \u003d matcher.group(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" String endTime \u003d matcher.group(3);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" if (eventDescription.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" return new Event(eventDescription, startTime, endTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"Invalid event format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" private ToDo parseTodo(String input) throws InvalidTaskFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" String taskDescription \u003d input.replace(\"todo\", \"\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" return new ToDo(taskDescription);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" * Custom exception class for representing an invalid task format.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" public static class InvalidTaskFormatException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" public InvalidTaskFormatException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":96}},{"path":"src/main/java/storage/DataReader.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import parser.DataParser;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * The DataReader class is responsible for reading task data from a storage file and converting it into Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"public class DataReader {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" private static String path;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a DataReader instance with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @param path The file path of the storage file to be read.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" public DataReader(String path) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" DataReader.path \u003d path;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * Reads tasks from the storage file and converts them into an ArrayList of Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * @return An ArrayList of Task objects representing the tasks read from the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" public static ArrayList\u003cTask\u003e readTasksFromFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" ArrayList\u003cTask\u003e tasksList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(DataReader.path))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" Task task \u003d DataParser.parseLineToTask(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" tasksList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Error reading the file or the file doesn\u0027t exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Please try again after ensuring the correctness of the file.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" System.exit(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" return tasksList;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":49}},{"path":"src/main/java/storage/DataWriter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * The DataWriter class is responsible for writing and updating task data in a storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"public class DataWriter {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" private static String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a DataWriter instance with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" * @param filePath The file path of the storage file to be written to.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" public DataWriter(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * Adds a new line of text to the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line of text to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" public static void addLine(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(DataWriter.filePath, true))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" writer.write(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" writer.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" System.err.println(\"An error occurred while adding the line: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" * Deletes a line from the storage file based on the line number.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" * @param lineNumber The line number to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" public static void deleteLine(int lineNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" List\u003cString\u003e lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(DataWriter.filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" String currentLine;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" while ((currentLine \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" lines.add(currentLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" System.err.println(\"An error occurred while reading the file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" if (lineNumber \u003e\u003d 1 \u0026\u0026 lineNumber \u003c\u003d lines.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" lines.remove(lineNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" for (String line : lines) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" writer.write(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" writer.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" System.err.println(\"An error occurred while writing back to the file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Invalid line number.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" * Refreshes the content of the storage file with the tasks from the given TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The TaskList containing tasks to be written to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" public static void refresh(TaskList tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" // Clean the file by overwriting it with an empty content","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" BufferedWriter cleanWriter \u003d new BufferedWriter(new FileWriter(filePath, false));","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" cleanWriter.write(\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" cleanWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" // Append tasks from the array list to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" BufferedWriter appendWriter \u003d new BufferedWriter(new FileWriter(filePath, true));","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":" appendWriter.write(task.toString() + System.lineSeparator());","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" appendWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"An error occurred: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":99}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * The Storage class provides methods to interact with","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * storage files for reading and writing task data.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" private static String path;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" private DataReader dataReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private DataWriter dataWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param path The file path of the storage file to be read from and written to.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public Storage(String path) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" Storage.path \u003d path;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" this.dataReader \u003d new DataReader(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" this.dataWriter \u003d new DataWriter(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * Adds a new line to the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" public static void addLine(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.addLine(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" * Deletes a line from the storage file based on the specified position.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the line to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" public static void deleteLine(int pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.deleteLine(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" * Refreshes the storage file with the tasks from the given TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" * @param taskList The TaskList containing tasks to be written to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" public static void refresh(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.refresh(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" * Reads task data from a storage file and returns them as an ArrayList of Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" * @param fileName The name of the storage file to be read.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" * @return An ArrayList of Task objects representing the tasks read from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" public static ArrayList\u003cTask\u003e readFileToTasksLists(String fileName) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" return DataReader.readTasksFromFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":66}},{"path":"src/main/java/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasklist;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import storage.DataReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * The TaskList class manages a list of tasks, providing","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" * methods to add, mark, unmark, delete, and print tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" private static ArrayList\u003cTask\u003e ls \u003d DataReader.readTasksFromFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * Adds a task to the list and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" if (task \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" ls.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Now you have \" + this.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * Marks a task as done and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" public void mark(int pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" ls.get(pos - 1).toMark();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(ls.get(pos - 1).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" * Retrieves a task from the list at the specified index.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" * @param i The index of the task to retrieve.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" public Task get(int i) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" return ls.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" * Unmarks a task as done and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" public void unmark(int pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" ls.get(pos - 1).toUnmark();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(ls.get(pos - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" public int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" return ls.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" * Deletes a task from the list and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" public void delete(int pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\" \" + ls.get(pos - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" ls.remove(pos - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" Storage.deleteLine(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Now you have \" + ls.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" * Prints the list of tasks in a formatted manner.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" public void print() {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" for (int i \u003d 0; i \u003c ls.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" int order \u003d i + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":" Task cur \u003d ls.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(order + \". \" + \" \" + cur);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"WangCheng0116"},"content":" * Searches for tasks in the task list that contain the","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"WangCheng0116"},"content":" * specified keyword and prints the matching tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"WangCheng0116"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"WangCheng0116"},"content":" public void find(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"WangCheng0116"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"WangCheng0116"},"content":" for (int i \u003d 0; i \u003c ls.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"WangCheng0116"},"content":" Task task \u003d ls.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"WangCheng0116"},"content":" if (task.containKey(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"WangCheng0116"},"content":" counter++;","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(counter + \".\" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"WangCheng0116"},"content":" if (counter \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Sorry.No tasks match the keyword: \" + keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":117}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * The Deadline class represents a task with a specific due date.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" protected String by;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" protected LocalDate parsedBy; // New field to store parsed LocalDate","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Deadline instance with the specified description and due date.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * @param by The due date of the task in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" parseBy();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Deadline instance with the specified description, due date, and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * @param by The due date of the task in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" public Deadline(String description, String by, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" super(description, mark);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" parseBy();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" * Parses the due date string into a LocalDate object using multiple date formats.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" private void parseBy() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter[] dateFormats \u003d {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\")","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" };","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" for (DateTimeFormatter dateFormat : dateFormats) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" parsedBy \u003d LocalDate.parse(by, dateFormat);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" parsedBy \u003d parsedBy;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" String dateString \u003d parsedBy !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" ? parsedBy.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" : by;","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" return \"[D]\" + super.toString() + \" by: \" + dateString;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":72}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * The Event class represents a task that occurs within a specific time range.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" protected String start;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" protected String end;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" protected LocalDate parsedStartDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" protected LocalDate parsedEndDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an Event instance with the specified description, start date, and end date.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @param start The start date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param end The end date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public Event(String description, String start, String end) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" parseDates();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an Event instance with the specified description, start date, end date, and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" * @param start The start date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" * @param end The end date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" public Event(String description, String start, String end, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" super(description, mark);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" parseDates();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" * Parses the start and end date strings into LocalDate objects using multiple date formats.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" private void parseDates() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter[] dateFormats \u003d {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\")","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" };","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" for (DateTimeFormatter dateFormat : dateFormats) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" parsedStartDate \u003d LocalDate.parse(start, dateFormat);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" parsedEndDate \u003d LocalDate.parse(end, dateFormat);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" parsedStartDate \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" parsedEndDate \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" String startString \u003d parsedStartDate !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" ? parsedStartDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" : start;","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" String endString \u003d parsedEndDate !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" ? parsedEndDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" : end;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" return \"[E]\" + super.toString() + \" from \" + startString + \" to \" + endString;","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":84}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":" * The Task class represents a basic task with a description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"public class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":" protected String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Task instance with the specified","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * description and sets the completion status to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Task instance with the specified description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" * @param des The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" public Task(String des, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" this.description \u003d des;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d mark;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * Returns an icon representing the completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" * @return The completion status icon (\"[X]\" for completed, \"[ ]\" for not completed).","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" return (isDone ? \"[X]\" : \"[ ]\"); // mark done task with X","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" * Marks the task as completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" public void toMark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" * Marks the task as not completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" public void toUnmark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" * Checks if the task\u0027s description contains the specified keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" * @param key The keyword to search for in the task\u0027s description.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" * @return True if the description contains the keyword, otherwise false.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" public boolean containKey(String key) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" return this.description.contains(key);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" return this.getStatusIcon() + \" \" + description;","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":74}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":" * The ToDo class represents a task that has no specific due date or time.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a ToDo instance with the specified description","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * and sets the completion status to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * @param des The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" public ToDo(String des) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" super(des);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a ToDo instance with the specified description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @param des The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public ToDo(String des, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" super(des, mark);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":37}},{"path":"src/main/java/ui/HelloFx.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.layout.StackPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"public class HelloFx extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" String javaVersion \u003d System.getProperty(\"java.version\");","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" String javafxVersion \u003d System.getProperty(\"javafx.version\");","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" Label l \u003d new Label(\"Hello, JavaFX \" + javafxVersion + \", running on Java \" + javaVersion + \".\");","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" Scene scene \u003d new Scene(new StackPane(l), 640, 480);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" launch();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"WangCheng0116":25}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":" * The Ui class handles interactions with the user, displaying messages and reading input.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" private static String botName \u003d \"cc\";","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Ui instance and initializes the scanner for reading user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Displays the welcome message upon starting the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Hello! I\u0027m \" + botName);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * Displays the exit message before closing the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" public void exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" System.out.print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" System.exit(0);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" * Displays a given message.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" * Reads a command input from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" * @return The command input provided by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" * Displays an error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" * @param message The error message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" public void showError(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":61}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * Checks if toString method returns string with correct format.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public void toString_correctFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" ToDo toDo \u003d new ToDo(\"abc\");","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" assertEquals(\"[T][ ] abc\", toDo.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"WangCheng0116":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"WangCheng0116":12}},{"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":"WangCheng0116"},"content":"java -classpath ..\\bin core.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"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":{"WangCheng0116":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"# core.Duke project template","lastModifiedDate":"2023-08-30"},{"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":"WangCheng0116"},"content":"3. After that, locate the `src/main/java/core.Duke.java` file, right-click it, and choose `Run core.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-30"},{"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":{"WangCheng0116":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":"WangCheng0116"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"javafx {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" version \u003d \u002717.0.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" mavenCentral()","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":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"WangCheng0116":12,"-":41}},{"path":"src/main/java/commands/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to add a deadline task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"public class AddDeadlineCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" private Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an AddDeadlineCommand with the specified deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * @param task The deadline task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public AddDeadlineCommand(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to add the given deadline task to the task list and update storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list that the task will be added to.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update with the new task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" storage.addLine(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" return tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":36}},{"path":"src/main/java/commands/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to add an event task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"public class AddEventCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" private Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an AddEventCommand with the specified event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * @param task The event task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public AddEventCommand(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to add the given event task to the task list and update storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list that the task will be added to.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update with the new task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" storage.addLine(task.toString()); // Update storage with the new task","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" return tasks.add(task); // Add task to the task list","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":36}},{"path":"src/main/java/commands/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to add a todo task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"public class AddTodoCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of a todo command.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" public static final String TODO_PATTERN \u003d \"^(todo)\\\\s+.+\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" private Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an AddTodoCommand with the specified todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" * @param task The todo task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" public AddTodoCommand(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to add the given todo task to the task list and update storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list that the task will be added to.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update with the new task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" storage.addLine(task.toString()); // Update storage with the new task","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" return tasks.add(task); // Add task to the task list","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":41}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * The interface representing a command that can be executed on the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public interface Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command on the given task list, user interface, and storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list on which the command will be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" String execute(TaskList tasks, Ui ui, Storage storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":20}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of a delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public static final String DELETE_PATTERN \u003d \"^(delete)\\\\s+\\\\d+$\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private int pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a DeleteCommand with the specified position of the task to delete.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public DeleteCommand(int pos) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to delete the task at the specified position from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list from which the task will be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" return tasks.delete(pos);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":39}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class ExitCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to handle the application exit.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" return ui.exit(); // Instruct the user interface to exit the application","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":23}},{"path":"src/main/java/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to find tasks containing a specified keyword in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" private static String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a FindCommand with the specified keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param keyword The keyword to search for in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" FindCommand.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" * Executes the find command on the provided task list, displaying tasks that match the keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list to search within.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage manager to handle data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" return tasks.find(keyword);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":34}},{"path":"src/main/java/commands/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to display help information and usage examples.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class HelpCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to display help information and usage examples to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display help messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" String message \u003d \"Sorry, I don\u0027t understand what you mean.\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" \"\\nHere are some sample usages for your reference:\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" \"\\nAdd a deadline to your list: deadline + (description) + (deadline)\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" \"\\nAdd a todo task to your list: todo + (description)\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" \"\\nAdd an event task to your list: event + (description) + from + \" +","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" \"(startdate) + to + (enddate)\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" \"\\nDelete a task: delete + (line number)\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" \"\\nMark a task: mark + (line number)\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" \"\\nUnmark a class: unmark + (line number)\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" \"\\ncontent in ( ) is for you to fill out\";","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":35}},{"path":"src/main/java/commands/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to handle invalid user input by displaying an error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class InvalidCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" private String errorMessage;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an InvalidCommand with the specified error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param errorMessage The error message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" public InvalidCommand(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" this.errorMessage \u003d errorMessage;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" return \"Invalid input. Please try again\";","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":26}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to display the list of tasks to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to display the list of tasks to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" return tasks.print(); // Display the list of tasks through the user interface","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":23}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to mark a task as done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class MarkCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of a mark command.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public static final String MARK_PATTERN \u003d \"^(mark)\\\\s+\\\\d+$\";","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" private int pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a MarkCommand with the specified position of the task to mark.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" public MarkCommand(int pos) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to mark the task at the specified position as done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * If the position is invalid, an error message is displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list in which the task will be marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" if (pos \u003e tasks.size() || pos \u003c\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" ui.showError(\"Invalid index. Please enter again.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" return \"Invalid index. Please enter again.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" String res \u003d tasks.mark(pos); // Mark the task as done in the task list","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" Storage.refresh(tasks); // Update storage with the modified task list","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" return res;","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":46}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to unmark a task as not done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class UnmarkCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of an unmark command.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public static final String UNMARK_PATTERN \u003d \"^(unmark)\\\\s+\\\\d+$\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private int pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an UnmarkCommand with the specified position of the task to unmark.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public UnmarkCommand(int pos) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to unmark the task at the specified position as not done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * If the position is invalid, an error message is displayed through the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list in which the task will be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display error messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" String res \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" if (pos \u003e tasks.size() || pos \u003c\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" ui.showError(\"Invalid index. Please enter again.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" return \"Invalid index. Please enter again.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" res \u003d tasks.unmark(pos); // Unmark the task in the task list","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" Storage.refresh(tasks); // Update storage with the modified task list","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" return res;","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":48}},{"path":"src/main/java/core/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package core;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import parser.CommandParser;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" * Duke is a task management application that interacts with users through a command-line interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * It allows users to manage tasks by adding, marking, and deleting tasks from a task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" private static Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" private static String filepath;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Duke instance with the specified filepath for storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" public Duke() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" Duke.filepath \u003d \"src/data/tasks.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" storage \u003d new Storage(Duke.filepath);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * Runs the Duke application, displaying a welcome message and handling user commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * The application continues running until the user inputs an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" public static void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" if (fullCommand.equals(null)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" isExit \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" Command c \u003d CommandParser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" * Runs the load function in Storage, called in MainWindow.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" public void loadByDuke() {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" Duke.refresh();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" public static void refresh() {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" Storage.refresh(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" * Bridges GUI and Program. Takes in user command scanned by MainWindow and parses it.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" * @param reply","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" * @return chatbot\u0027s reply","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" public String getResponse(String reply) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" return CommandParser.parse(reply).execute(taskList, ui, storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"WangCheng0116":70,"-":3}},{"path":"src/main/java/core/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package core;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":" * Launcher class that we run through IntelliJ to launch the bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"WangCheng0116":12}},{"path":"src/main/java/core/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package core;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" fxmlLoader.\u003cui.MainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"WangCheng0116":31}},{"path":"src/main/java/parser/CommandParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import commands.AddDeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import commands.AddEventCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import commands.AddTodoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"import commands.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"import commands.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"import commands.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"import commands.HelpCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"import commands.InvalidCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"import commands.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"import commands.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"import commands.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * The CommandParser is responsible for parsing input and generating the Command objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * It examines the input to determine the type of command and returns the appropriate instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":"public class CommandParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" * Extracts the command keyword from the input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * @return The command keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" private static String extractCommand(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" String[] words \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" if (words.length \u003e 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" return words[0].toLowerCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" return \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" * Extracts the value (e.g., task position) from the input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" * @return The extracted value.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" private static int extractValue(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" String[] parts \u003d input.split(\"\\\\s+\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" return Integer.parseInt(parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" * Parses the user input and generates the appropriate Command instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" * @return The corresponding Command instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" public static Command parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" String command \u003d extractCommand(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" TaskParser taskParser \u003d new TaskParser();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" case \"mark\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" Matcher markMatcher \u003d Pattern.compile(MarkCommand.MARK_PATTERN).matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" if (markMatcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" int pos \u003d extractValue(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" return new MarkCommand(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" return new InvalidCommand(\"Invalid mark command format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" case \"unmark\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" Matcher unmarkMatcher \u003d Pattern.compile(UnmarkCommand.UNMARK_PATTERN).matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" if (unmarkMatcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" int pos \u003d extractValue(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" return new UnmarkCommand(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" return new InvalidCommand(\"Invalid unmark command format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" case \"delete\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" Matcher deleteMatcher \u003d Pattern.compile(DeleteCommand.DELETE_PATTERN).matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" if (deleteMatcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" int pos \u003d extractValue(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" return new DeleteCommand(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" return new InvalidCommand(\"Invalid delete command format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" case \"find\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" String keyword \u003d input.substring(\"find\".length()).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" case \"event\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" return new AddEventCommand(taskParser.parseTask(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":" case \"todo\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"WangCheng0116"},"content":" return new AddTodoCommand(taskParser.parseTask(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"WangCheng0116"},"content":" case \"deadline\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"WangCheng0116"},"content":" return new AddDeadlineCommand(taskParser.parseTask(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"WangCheng0116"},"content":" case \"bye\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"WangCheng0116"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"WangCheng0116"},"content":" case \"list\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"WangCheng0116"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"WangCheng0116"},"content":" default -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"WangCheng0116"},"content":" return new HelpCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":113}},{"path":"src/main/java/parser/DataParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * The DataParser is responsible for parsing data from storage","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * files and converting them into Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"public class DataParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line from a storage file and converts it into a corresponding Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @return A Task object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" public static Task parseLineToTask(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" String typeIndicator \u003d line.substring(0, 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" switch (typeIndicator) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" case \"[D]\":","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" return parseDeadline(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" case \"[E]\":","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" return parseEvent(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" case \"[T]\":","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" return parseToDo(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Please check the original file for correctness.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line representing a deadline task and converts it into a Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line representing the deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" * @return A Deadline object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" public static Deadline parseDeadline(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" int descriptionStart \u003d line.indexOf(\"] \") + 2;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" int byIndex \u003d line.indexOf(\"by:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" String description \u003d line.substring(descriptionStart, byIndex).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" String date \u003d line.substring(byIndex + \"by:\".length()).trim();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" boolean isMarked \u003d line.charAt(4) \u003d\u003d \u0027X\u0027; // Assuming index 4 corresponds to the \"[ ]\" checkmark","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" return new Deadline(description, date, isMarked);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line representing an event task and converts it into an Event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line representing the event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" * @return An Event object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" public static Event parseEvent(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" int descriptionStart \u003d line.indexOf(\"] \") ; // Index of the first character after \"] \"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" int startFromIndex \u003d line.indexOf(\"from \") + 6; // Index of the character after \"from: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" int toIndex \u003d line.indexOf(\"to \", startFromIndex); // Index of the character before \"to: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" int endFromIndex \u003d toIndex + 4; // Index of the character after \"to: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" String description \u003d line.substring(descriptionStart, startFromIndex - 8).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" String start \u003d line.substring(startFromIndex, toIndex).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" String end \u003d line.substring(endFromIndex).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" boolean isMarked \u003d line.charAt(4) \u003d\u003d \u0027X\u0027; // Assuming index 4 corresponds to the \"[ ]\" checkmark","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" return new Event(description, start, end, isMarked);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line representing a todo task and converts it into a ToDo object.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line representing the todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" * @return A ToDo object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" public static ToDo parseToDo(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" int descriptionStart \u003d line.indexOf(\"] \") + 2; // Index of the first character after \"] \"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" String description \u003d line.substring(descriptionStart).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" boolean isMarked \u003d line.charAt(4) \u003d\u003d \u0027X\u0027; // Assuming index 4 corresponds to the \"[ ]\" checkmark","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" return new ToDo(description, isMarked);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":88}},{"path":"src/main/java/parser/TaskParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * The TaskParser class is responsible for parsing user input","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * and generating Task objects based on different task types.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"public class TaskParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * Parses the input string and generates a Task object based on the specified task type.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string containing task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" public Task parseTask(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" return parseDeadline(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" return parseEvent(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" return parseTodo(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" } catch (InvalidTaskFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"☹ OOPS!!! \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" private Deadline parseDeadline(String input) throws InvalidTaskFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" Pattern pattern \u003d Pattern.compile(\"deadline (.+) by: (.+)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" Matcher matcher \u003d pattern.matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" String taskDescription \u003d matcher.group(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" String deadlineTime \u003d matcher.group(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" return new Deadline(taskDescription, deadlineTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"Invalid deadline format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" private Event parseEvent(String input) throws InvalidTaskFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" Pattern pattern \u003d Pattern.compile(\"event (.+) from (.+) to (.+)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" Matcher matcher \u003d pattern.matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" String eventDescription \u003d matcher.group(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" String startTime \u003d matcher.group(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" String endTime \u003d matcher.group(3);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" if (eventDescription.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" return new Event(eventDescription, startTime, endTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"Invalid event format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" private ToDo parseTodo(String input) throws InvalidTaskFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" String taskDescription \u003d input.replace(\"todo\", \"\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" return new ToDo(taskDescription);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" * Custom exception class for representing an invalid task format.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" public static class InvalidTaskFormatException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" public InvalidTaskFormatException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":96}},{"path":"src/main/java/storage/DataReader.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import parser.DataParser;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * The DataReader class is responsible for reading task data from a storage file and converting it into Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"public class DataReader {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" private static String path;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a DataReader instance with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @param path The file path of the storage file to be read.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" public DataReader(String path) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" DataReader.path \u003d path;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * Reads tasks from the storage file and converts them into an ArrayList of Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * @return An ArrayList of Task objects representing the tasks read from the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" public static ArrayList\u003cTask\u003e readTasksFromFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" ArrayList\u003cTask\u003e tasksList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(DataReader.path))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" Task task \u003d DataParser.parseLineToTask(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" tasksList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Error reading the file or the file doesn\u0027t exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Please try again after ensuring the correctness of the file.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" System.exit(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" return tasksList;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":49}},{"path":"src/main/java/storage/DataWriter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * The DataWriter class is responsible for writing and updating task data in a storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"public class DataWriter {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" private static String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a DataWriter instance with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" * @param filePath The file path of the storage file to be written to.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" public DataWriter(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * Adds a new line of text to the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line of text to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" public static void addLine(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(DataWriter.filePath, true))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" writer.write(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" writer.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" System.err.println(\"An error occurred while adding the line: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" * Deletes a line from the storage file based on the line number.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" * @param lineNumber The line number to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" public static void deleteLine(int lineNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" List\u003cString\u003e lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(DataWriter.filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" String currentLine;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" while ((currentLine \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" lines.add(currentLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" System.err.println(\"An error occurred while reading the file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" if (lineNumber \u003e\u003d 1 \u0026\u0026 lineNumber \u003c\u003d lines.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" lines.remove(lineNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" for (String line : lines) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" writer.write(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" writer.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" System.err.println(\"An error occurred while writing back to the file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Invalid line number.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" * Refreshes the content of the storage file with the tasks from the given TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The TaskList containing tasks to be written to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" public static void refresh(TaskList tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" // Clean the file by overwriting it with an empty content","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" BufferedWriter cleanWriter \u003d new BufferedWriter(new FileWriter(filePath, false));","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" cleanWriter.write(\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" cleanWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" // Append tasks from the array list to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" BufferedWriter appendWriter \u003d new BufferedWriter(new FileWriter(filePath, true));","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":" appendWriter.write(task.toString() + System.lineSeparator());","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" appendWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"An error occurred: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":99}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * The Storage class provides methods to interact with","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * storage files for reading and writing task data.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" private static String path;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" private DataReader dataReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private DataWriter dataWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param path The file path of the storage file to be read from and written to.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public Storage(String path) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" Storage.path \u003d path;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" this.dataReader \u003d new DataReader(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" this.dataWriter \u003d new DataWriter(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * Adds a new line to the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" public static void addLine(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.addLine(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" * Deletes a line from the storage file based on the specified position.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the line to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" public static void deleteLine(int pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.deleteLine(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" * Refreshes the storage file with the tasks from the given TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" * @param taskList The TaskList containing tasks to be written to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" public static void refresh(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.refresh(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" * Reads task data from a storage file and returns them as an ArrayList of Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" * @param fileName The name of the storage file to be read.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" * @return An ArrayList of Task objects representing the tasks read from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" public static ArrayList\u003cTask\u003e readFileToTasksLists(String fileName) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" return DataReader.readTasksFromFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":66}},{"path":"src/main/java/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasklist;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import storage.DataReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * The TaskList class manages a list of tasks, providing","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" * methods to add, mark, unmark, delete, and print tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" private static ArrayList\u003cTask\u003e ls \u003d DataReader.readTasksFromFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * Adds a task to the list and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * @return Response from bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" public String add(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" if (task \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" return null;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" ls.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Now you have \" + this.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" return \"Got it. I\u0027ve added this task:\" + task + \"\\nNow you have \" + this.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" * Marks a task as done and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" public String mark(int pos) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" ls.get(pos - 1).toMark();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(ls.get(pos - 1).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + ls.get(pos - 1).toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" * Retrieves a task from the list at the specified index.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" * @param i The index of the task to retrieve.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" public Task get(int i) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" return ls.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" * Unmarks a task as done and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" public String unmark(int pos) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" ls.get(pos - 1).toUnmark();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(ls.get(pos - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + ls.get(pos - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" public int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" return ls.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" * Deletes a task from the list and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" public String delete(int pos) {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\" \" + ls.get(pos - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" String temp \u003d ls.get(pos - 1).toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" ls.remove(pos - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" Storage.deleteLine(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Now you have \" + ls.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + \" \" + temp","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" + \"\\nNow you have \" + ls.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" * Prints the list of tasks in a formatted manner.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":" public String print() {","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"WangCheng0116"},"content":" String res \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"WangCheng0116"},"content":" for (int i \u003d 0; i \u003c ls.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"WangCheng0116"},"content":" int order \u003d i + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"WangCheng0116"},"content":" Task cur \u003d ls.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(order + \". \" + \" \" + cur);","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"WangCheng0116"},"content":" res +\u003d order + \". \" + \" \" + cur + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"WangCheng0116"},"content":" return res;","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"WangCheng0116"},"content":" * Searches for tasks in the task list that contain the","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"WangCheng0116"},"content":" * specified keyword and prints the matching tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"WangCheng0116"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"WangCheng0116"},"content":" public String find(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"WangCheng0116"},"content":" String res \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"WangCheng0116"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"WangCheng0116"},"content":" for (int i \u003d 0; i \u003c ls.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"WangCheng0116"},"content":" Task task \u003d ls.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"WangCheng0116"},"content":" if (task.containKey(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"WangCheng0116"},"content":" counter++;","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(counter + \".\" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"WangCheng0116"},"content":" res +\u003d counter + \".\" + task + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"WangCheng0116"},"content":" if (counter \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Sorry.No tasks match the keyword: \" + keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"WangCheng0116"},"content":" return \"Sorry.No tasks match the keyword: \" + keyword;","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"WangCheng0116"},"content":" return res;","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":132}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * The Deadline class represents a task with a specific due date.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" protected String by;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" protected LocalDate parsedBy; // New field to store parsed LocalDate","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Deadline instance with the specified description and due date.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * @param by The due date of the task in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" parseBy();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Deadline instance with the specified description, due date, and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * @param by The due date of the task in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" public Deadline(String description, String by, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" super(description, mark);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" parseBy();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" * Parses the due date string into a LocalDate object using multiple date formats.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" private void parseBy() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter[] dateFormats \u003d {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\")","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" };","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" for (DateTimeFormatter dateFormat : dateFormats) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" parsedBy \u003d LocalDate.parse(by, dateFormat);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" parsedBy \u003d parsedBy;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" String dateString \u003d parsedBy !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" ? parsedBy.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" : by;","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" return \"[D]\" + super.toString() + \" by: \" + dateString;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":72}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * The Event class represents a task that occurs within a specific time range.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" protected String start;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" protected String end;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" protected LocalDate parsedStartDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" protected LocalDate parsedEndDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an Event instance with the specified description, start date, and end date.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @param start The start date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param end The end date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public Event(String description, String start, String end) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" parseDates();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an Event instance with the specified description, start date, end date, and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" * @param start The start date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" * @param end The end date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" public Event(String description, String start, String end, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" super(description, mark);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" parseDates();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" * Parses the start and end date strings into LocalDate objects using multiple date formats.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" private void parseDates() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter[] dateFormats \u003d {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\")","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" };","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" for (DateTimeFormatter dateFormat : dateFormats) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" parsedStartDate \u003d LocalDate.parse(start, dateFormat);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" parsedEndDate \u003d LocalDate.parse(end, dateFormat);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" parsedStartDate \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" parsedEndDate \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" String startString \u003d parsedStartDate !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" ? parsedStartDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" : start;","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" String endString \u003d parsedEndDate !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" ? parsedEndDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" : end;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" return \"[E]\" + super.toString() + \" from \" + startString + \" to \" + endString;","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":84}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":" * The Task class represents a basic task with a description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"public class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":" protected String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Task instance with the specified","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * description and sets the completion status to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Task instance with the specified description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" * @param des The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" public Task(String des, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" this.description \u003d des;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d mark;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * Returns an icon representing the completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" * @return The completion status icon (\"[X]\" for completed, \"[ ]\" for not completed).","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" return (isDone ? \"[X]\" : \"[ ]\"); // mark done task with X","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" * Marks the task as completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" public void toMark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" * Marks the task as not completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" public void toUnmark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" * Checks if the task\u0027s description contains the specified keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" * @param key The keyword to search for in the task\u0027s description.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" * @return True if the description contains the keyword, otherwise false.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" public boolean containKey(String key) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" return this.description.contains(key);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" return this.getStatusIcon() + \" \" + description;","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":74}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":" * The ToDo class represents a task that has no specific due date or time.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a ToDo instance with the specified description","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * and sets the completion status to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * @param des The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" public ToDo(String des) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" super(des);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a ToDo instance with the specified description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @param des The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public ToDo(String des, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" super(des, mark);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":37}},{"path":"src/main/java/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"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":"WangCheng0116"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(ui.MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"WangCheng0116":61}},{"path":"src/main/java/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import core.Duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" private Duke duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" * Greets by chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" private String greet() {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" return \" Hello! I\u0027m cc :) \\n What can I do for you?\";","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" duke.loadByDuke();","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" dialogContainer.getChildren().addAll(DialogBox.getDukeDialog(greet(), dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"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":50,"author":{"gitId":"WangCheng0116"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" dialogContainer.getChildren().addAll(DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"WangCheng0116":62}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":" * The Ui class handles interactions with the user, displaying messages and reading input.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" private static String botName \u003d \"cc\";","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Ui instance and initializes the scanner for reading user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Displays the welcome message upon starting the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Hello! I\u0027m \" + botName);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * Displays the exit message before closing the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" public String exit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" System.out.print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" System.exit(0);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" return null;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" * Displays a given message.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" * Reads a command input from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" * @return The command input provided by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" * Displays an error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" * @param message The error message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" public void showError(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":62}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"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":"WangCheng0116"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"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":12,"author":{"gitId":"WangCheng0116"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"WangCheng0116":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"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\"ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"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":12,"author":{"gitId":"WangCheng0116"},"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":13,"author":{"gitId":"WangCheng0116"},"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":14,"author":{"gitId":"WangCheng0116"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"WangCheng0116":19}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * Checks if toString method returns string with correct format.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public void toString_correctFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" ToDo toDo \u003d new ToDo(\"abc\");","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" assertEquals(\"[T][ ] abc\", toDo.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"WangCheng0116":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"WangCheng0116":12}},{"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":"WangCheng0116"},"content":"java -classpath ..\\bin core.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"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":{"WangCheng0116":1,"-":20}}] diff --git a/WangCheng0116_ip_master/commits.json b/WangCheng0116_ip_master/commits.json index 69a52dd5..db4c9749 100644 --- a/WangCheng0116_ip_master/commits.json +++ b/WangCheng0116_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"WangCheng0116":[{"date":"2023-08-23","commitResults":[{"hash":"29929c8c2cd4fe5fce65e8c2226f83393e7f32ad","isMergeCommit":false,"messageTitle":"Rename bot and initialize skeleton","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"d1a7c850417c337bc3fba601f4030b84311d8531","isMergeCommit":false,"messageTitle":"implement echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"d6d853ff42e6891e39abffc841436745b9ff8779","isMergeCommit":false,"messageTitle":"Implement add and list function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"7cfd8c01187fee58b4b73ef5edc880f61d1314bd","isMergeCommit":false,"messageTitle":"Implement mark as done function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":14}}},{"hash":"7f390ddc4bf490af727162977d652451fe22c522","isMergeCommit":false,"messageTitle":"creating subclasses of task, consisting of todo, deadline and event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":38}}},{"hash":"1a2e8747c5e51b14d7046c32eb50d8ab2a670a47","isMergeCommit":false,"messageTitle":"creating TaskParser class and implement function of adding different kinds of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":2}}},{"hash":"06d913270d455c8cd9edfd836f52e484d150745e","isMergeCommit":false,"messageTitle":"finish A-TextUiTesting by creating input.txt and EXPECTED.txt","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":2,"deletions":2}}},{"hash":"073091f1e11bd4b9f3485796c592a0a1d3d2fd1d","isMergeCommit":false,"messageTitle":"creating own InvalidTaskFormatException and hence handle invalid input cases","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":14}}},{"hash":"5a50ed3facc80cac06a685ee0d42b599d883f8c7","isMergeCommit":false,"messageTitle":"implement deleting action","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"58036d46bc81bcc96d8d0450bc5431b5e93bc311","isMergeCommit":false,"messageTitle":"expand test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"f684418362d29facf2c5bd763feb0ab184eb8332","isMergeCommit":false,"messageTitle":"Implement TaskReader","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":3}}},{"hash":"64b93c13576a8b2c86fa1be2214fb8b86c6189bf","isMergeCommit":false,"messageTitle":"Implement TaskWriter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":10}}},{"hash":"5e0bbc29dc26f6b829e1a58a8d2e5df8e5e0df39","isMergeCommit":false,"messageTitle":"Handle non-existent file case","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"3c52325ba7b4853b2c7d71e2716aca56a15c2eac","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"5dede6d62ef8f2dcb9094bf44360a58178f2ce3c","isMergeCommit":false,"messageTitle":"Implement reading date feature","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":20}}},{"hash":"2fb68bd0bf27687720129a9430194c921a828ac7","isMergeCommit":false,"messageTitle":"Create corresponding packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":9},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3eb4a90416551f8837afbc99659a1bab98d089e7","isMergeCommit":false,"messageTitle":"Implement prototypes of different commands and parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":217,"deletions":18}}},{"hash":"17e9f9a402a34a1fe0b44e3aa97f31ccac912447","isMergeCommit":false,"messageTitle":"Implement DataParser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":128,"deletions":25}}},{"hash":"446b056f5804d39759e65ad69dc98ad12a9587b7","isMergeCommit":false,"messageTitle":"Implement Storage class and Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":10}}},{"hash":"291e9100c2bef54f5e6829184831b6fbe45ef772","isMergeCommit":false,"messageTitle":"Connect each component with main logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":168}}},{"hash":"9aa3fd49057abb9c53637ca4016a9a7965c280f4","isMergeCommit":false,"messageTitle":"Fix all Java coding standard issues","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":689,"deletions":713}}},{"hash":"fc0038a818cefab47c0688d01454a727bd6431b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/WangCheng0116/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7640bb30924d54bd177caa068e49282ba661da3d","isMergeCommit":false,"messageTitle":"Fix bugs found when deleting tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":12}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a3c8ab4c78693653e10bf22aea9d79ca38ce0278","isMergeCommit":false,"messageTitle":"Add two Junit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":52,"deletions":2}}},{"hash":"ce86b18c34c0c6c791fa0a285d1bc36ff5bfcfde","isMergeCommit":false,"messageTitle":"Fix coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":213}}},{"hash":"f7f861c58dba5cc66379351cba99c934a0f54010","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027 into A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6bd64e948afc163757c4495b25b3b7ad6a280ab3","isMergeCommit":false,"messageTitle":"Provide JavaDoc for classes in package command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":187,"deletions":26}}},{"hash":"028e7279a2d7f0fda27427139ca4980c4b5d5f79","isMergeCommit":false,"messageTitle":"Add JavaDoc to classes in package core, parser and storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":19}}},{"hash":"0bed88959367506971c7554d4a676ce2163b8a08","isMergeCommit":false,"messageTitle":"Add JavaDoc to classes within packages tasklist, tasks, ui and test","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":181,"deletions":6}}},{"hash":"87475136a7e29b6c8fb3382f65d001fc3d9140d0","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JavaDoc\u0027 into Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7a055f36d67cfddf94e9ce00945bd050d25bcebe","isMergeCommit":false,"messageTitle":"Implement finding feature","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":15}}},{"hash":"6bab6f9775a98551e9836da3f34bf1b70b951f97","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8868b40ca34918ac2b58a4bc6885304996f38ba5","isMergeCommit":false,"messageTitle":"Fix indentation issues","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1018,"deletions":1010}}}]},{"date":"2023-09-02","commitResults":[{"hash":"70839c590aef762882a14f79d8ac47110408d1fd","isMergeCommit":false,"messageTitle":"Faking branch for auto-grader","messageBody":"","tags":["branch-level-8"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"1211640cbd8785a372a16598aded1470d5970ea9","isMergeCommit":false,"messageTitle":"Configure checkstyle file and fix checkstyle problems","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":81,"deletions":81}}},{"hash":"c50db4a11190d8038f8be3db07e51ad23fb7a950","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"39eb30a7bf5eca3313a40b9f3bbcac22c12491e7","isMergeCommit":true,"messageTitle":"Merge tag \u0027branch-level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6298e8d85a4857f3c099c425badeabd65ca478ae","isMergeCommit":false,"messageTitle":"Fix gradle issues","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":13,"deletions":3},"java":{"insertions":19,"deletions":57}}},{"hash":"d0a40f38b1d9e3b7a572b6d97ead2632578ff553","isMergeCommit":false,"messageTitle":"Configure JavaFX and implement a sample usage","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":0},"java":{"insertions":25,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"WangCheng0116":{"java":1456,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":29,"txt":12}},"authorContributionVariance":{"WangCheng0116":819721.44},"authorDisplayNameMap":{"WangCheng0116":"CS2103T-T11-4 WANG..HENG"}} +{"authorDailyContributionsMap":{"WangCheng0116":[{"date":"2023-08-23","commitResults":[{"hash":"29929c8c2cd4fe5fce65e8c2226f83393e7f32ad","isMergeCommit":false,"messageTitle":"Rename bot and initialize skeleton","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"d1a7c850417c337bc3fba601f4030b84311d8531","isMergeCommit":false,"messageTitle":"implement echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"d6d853ff42e6891e39abffc841436745b9ff8779","isMergeCommit":false,"messageTitle":"Implement add and list function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"7cfd8c01187fee58b4b73ef5edc880f61d1314bd","isMergeCommit":false,"messageTitle":"Implement mark as done function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":14}}},{"hash":"7f390ddc4bf490af727162977d652451fe22c522","isMergeCommit":false,"messageTitle":"creating subclasses of task, consisting of todo, deadline and event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":38}}},{"hash":"1a2e8747c5e51b14d7046c32eb50d8ab2a670a47","isMergeCommit":false,"messageTitle":"creating TaskParser class and implement function of adding different kinds of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":2}}},{"hash":"06d913270d455c8cd9edfd836f52e484d150745e","isMergeCommit":false,"messageTitle":"finish A-TextUiTesting by creating input.txt and EXPECTED.txt","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":2,"deletions":2}}},{"hash":"073091f1e11bd4b9f3485796c592a0a1d3d2fd1d","isMergeCommit":false,"messageTitle":"creating own InvalidTaskFormatException and hence handle invalid input cases","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":14}}},{"hash":"5a50ed3facc80cac06a685ee0d42b599d883f8c7","isMergeCommit":false,"messageTitle":"implement deleting action","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"58036d46bc81bcc96d8d0450bc5431b5e93bc311","isMergeCommit":false,"messageTitle":"expand test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"f684418362d29facf2c5bd763feb0ab184eb8332","isMergeCommit":false,"messageTitle":"Implement TaskReader","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":3}}},{"hash":"64b93c13576a8b2c86fa1be2214fb8b86c6189bf","isMergeCommit":false,"messageTitle":"Implement TaskWriter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":10}}},{"hash":"5e0bbc29dc26f6b829e1a58a8d2e5df8e5e0df39","isMergeCommit":false,"messageTitle":"Handle non-existent file case","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"3c52325ba7b4853b2c7d71e2716aca56a15c2eac","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"5dede6d62ef8f2dcb9094bf44360a58178f2ce3c","isMergeCommit":false,"messageTitle":"Implement reading date feature","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":20}}},{"hash":"2fb68bd0bf27687720129a9430194c921a828ac7","isMergeCommit":false,"messageTitle":"Create corresponding packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":9},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3eb4a90416551f8837afbc99659a1bab98d089e7","isMergeCommit":false,"messageTitle":"Implement prototypes of different commands and parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":217,"deletions":18}}},{"hash":"17e9f9a402a34a1fe0b44e3aa97f31ccac912447","isMergeCommit":false,"messageTitle":"Implement DataParser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":128,"deletions":25}}},{"hash":"446b056f5804d39759e65ad69dc98ad12a9587b7","isMergeCommit":false,"messageTitle":"Implement Storage class and Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":10}}},{"hash":"291e9100c2bef54f5e6829184831b6fbe45ef772","isMergeCommit":false,"messageTitle":"Connect each component with main logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":168}}},{"hash":"9aa3fd49057abb9c53637ca4016a9a7965c280f4","isMergeCommit":false,"messageTitle":"Fix all Java coding standard issues","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":689,"deletions":713}}},{"hash":"fc0038a818cefab47c0688d01454a727bd6431b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/WangCheng0116/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7640bb30924d54bd177caa068e49282ba661da3d","isMergeCommit":false,"messageTitle":"Fix bugs found when deleting tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":12}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a3c8ab4c78693653e10bf22aea9d79ca38ce0278","isMergeCommit":false,"messageTitle":"Add two Junit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":52,"deletions":2}}},{"hash":"ce86b18c34c0c6c791fa0a285d1bc36ff5bfcfde","isMergeCommit":false,"messageTitle":"Fix coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":213}}},{"hash":"f7f861c58dba5cc66379351cba99c934a0f54010","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027 into A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6bd64e948afc163757c4495b25b3b7ad6a280ab3","isMergeCommit":false,"messageTitle":"Provide JavaDoc for classes in package command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":187,"deletions":26}}},{"hash":"028e7279a2d7f0fda27427139ca4980c4b5d5f79","isMergeCommit":false,"messageTitle":"Add JavaDoc to classes in package core, parser and storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":19}}},{"hash":"0bed88959367506971c7554d4a676ce2163b8a08","isMergeCommit":false,"messageTitle":"Add JavaDoc to classes within packages tasklist, tasks, ui and test","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":181,"deletions":6}}},{"hash":"87475136a7e29b6c8fb3382f65d001fc3d9140d0","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JavaDoc\u0027 into Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7a055f36d67cfddf94e9ce00945bd050d25bcebe","isMergeCommit":false,"messageTitle":"Implement finding feature","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":15}}},{"hash":"6bab6f9775a98551e9836da3f34bf1b70b951f97","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8868b40ca34918ac2b58a4bc6885304996f38ba5","isMergeCommit":false,"messageTitle":"Fix indentation issues","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1018,"deletions":1010}}}]},{"date":"2023-09-02","commitResults":[{"hash":"70839c590aef762882a14f79d8ac47110408d1fd","isMergeCommit":false,"messageTitle":"Faking branch for auto-grader","messageBody":"","tags":["branch-level-8"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"1211640cbd8785a372a16598aded1470d5970ea9","isMergeCommit":false,"messageTitle":"Configure checkstyle file and fix checkstyle problems","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":81,"deletions":81}}},{"hash":"c50db4a11190d8038f8be3db07e51ad23fb7a950","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"39eb30a7bf5eca3313a40b9f3bbcac22c12491e7","isMergeCommit":true,"messageTitle":"Merge tag \u0027branch-level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6298e8d85a4857f3c099c425badeabd65ca478ae","isMergeCommit":false,"messageTitle":"Fix gradle issues","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":13,"deletions":3},"java":{"insertions":19,"deletions":57}}},{"hash":"d0a40f38b1d9e3b7a572b6d97ead2632578ff553","isMergeCommit":false,"messageTitle":"Configure JavaFX and implement a sample usage","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":0},"java":{"insertions":25,"deletions":0}}},{"hash":"f7f50945c3c85368c6576b2522ace0fd42b1c1b5","isMergeCommit":false,"messageTitle":"Implement UI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":17},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":238,"deletions":64}}},{"hash":"f8a149d5bf2b095458c0f0f05c49771c1722caf6","isMergeCommit":false,"messageTitle":"Fix bugs in UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":21}}},{"hash":"160b83e6f7017814be47dd76e56f19235c602757","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"WangCheng0116":{"java":1634,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":12,"txt":12}},"authorContributionVariance":{"WangCheng0116":825271.75},"authorDisplayNameMap":{"WangCheng0116":"CS2103T-T11-4 WANG..HENG"}} diff --git a/XihuaZ_ip_master/authorship.json b/XihuaZ_ip_master/authorship.json index 7c676acd..b7dd8fe5 100644 --- a/XihuaZ_ip_master/authorship.json +++ b/XihuaZ_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/task.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"[E] \u0026##\u0026 false \u0026##\u0026 wdwdwdw \u0026##\u0026 2019-12-02T16:48 \u0026##\u0026 2019-12-03T23:00","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"[E] \u0026##\u0026 false \u0026##\u0026 fish \u0026##\u0026 2019-12-05T18:00 \u0026##\u0026 2019-12-06T18:00","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"[T] \u0026##\u0026 true \u0026##\u0026 yummy","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"[D] \u0026##\u0026 false \u0026##\u0026 done \u0026##\u0026 2023-02-25T19:30","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"[E] \u0026##\u0026 false \u0026##\u0026 homework \u0026##\u0026 2023-09-10T18:00 \u0026##\u0026 2023-09-20T18:00","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"XihuaZ":5}},{"path":"src/main/java/bot/Bot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"public class Bot {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" public Bot(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.ui \u003d new Ui(new Scanner(System.in), taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" public static void main(String[] args) throws FileErrorBotException,","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" DateTimeParseBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" Bot bot \u003d new Bot(Storage.read());","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" bot.start();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public void start() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" this.ui.start();","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"XihuaZ":28}},{"path":"src/main/java/bot/ControlFlow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.command.DeadlineCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.command.EventCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import bot.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import bot.command.TerminateCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"import bot.command.TodoCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"import bot.command.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.IllegalExpressionBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.IncompleteBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":"import bot.parsers.InputParser;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":"public class ControlFlow {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" private static final String MARK \u003d \"mark\";","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" private static final String UNMARK \u003d \"unmark\";","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" private static final String LIST \u003d \"list\";","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" private static final String TODO \u003d \"todo\";","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" private static final String EVENT \u003d \"event\";","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" private static final String DEADLINE \u003d \"deadline\";","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" private static final String TERMINATE \u003d \"bye\";","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" private static final String DELETE \u003d \"delete\";","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" public ControlFlow(TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" public Command execute(String str) throws IllegalExpressionBotException,","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" IncompleteBotException, FileErrorBotException, DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" if (str.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! There is no bot.task specified.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":" String[] strSplit \u003d InputParser.getSplitAtSpace(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":" String taskName \u003d InputParser.getLeftOfSplit(strSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":" String remainder \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"XihuaZ"},"content":" if (strSplit.length \u003e 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"XihuaZ"},"content":" remainder \u003d InputParser.getRightOfSplit(strSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"XihuaZ"},"content":" String[] taskSplit;","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"XihuaZ"},"content":" String taskDetail;","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"XihuaZ"},"content":" String timeline;","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"XihuaZ"},"content":" String[] timelineArr;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"XihuaZ"},"content":" String timeFrom;","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"XihuaZ"},"content":" String timeTo;","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"XihuaZ"},"content":" switch(taskName) {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.TERMINATE:","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"XihuaZ"},"content":" return new TerminateCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"XihuaZ"},"content":" return new TodoCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"XihuaZ"},"content":" taskSplit \u003d InputParser.getSplitAtBy(remainder);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"XihuaZ"},"content":" if (taskSplit.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The timing of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"XihuaZ"},"content":" taskDetail \u003d InputParser.getLeftOfSplit(taskSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"XihuaZ"},"content":" timeline \u003d InputParser.getRightOfSplit(taskSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"XihuaZ"},"content":" return new DeadlineCommand(this.taskList, taskDetail, timeline);","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.EVENT:","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"XihuaZ"},"content":" taskSplit \u003d InputParser.getSplitAtFrom(remainder);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"XihuaZ"},"content":" if (taskSplit.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The starting timing of an event cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"XihuaZ"},"content":" taskDetail \u003d InputParser.getLeftOfSplit(taskSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"XihuaZ"},"content":" timeline \u003d InputParser.getRightOfSplit(taskSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"XihuaZ"},"content":" timelineArr \u003d InputParser.getSplitAtTo(timeline);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"XihuaZ"},"content":" if (timelineArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The ending timing of an event cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"XihuaZ"},"content":" timeFrom \u003d InputParser.getLeftOfSplit(timelineArr);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"XihuaZ"},"content":" timeTo \u003d InputParser.getRightOfSplit(timelineArr);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"XihuaZ"},"content":" return new EventCommand(this.taskList, taskDetail, timeFrom, timeTo);","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The task number to mark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"XihuaZ"},"content":" return new MarkCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"XihuaZ"},"content":" return new UnmarkCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.LIST:","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"XihuaZ"},"content":" return new ListCommand(this.taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.DELETE:","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"XihuaZ"},"content":" return new DeleteCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"XihuaZ"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"XihuaZ"},"content":" throw new IllegalExpressionBotException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":120}},{"path":"src/main/java/bot/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.command.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.IllegalExpressionBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.IncompleteBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" private static final String INTRO \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" \"Hello! I\u0027m Bot\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" \"What can I do for you?\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" private final Scanner sc;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskLst;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" public Ui(Scanner sc, TaskList taskLst) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" this.sc \u003d sc;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" this.taskLst \u003d taskLst;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" public void start() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" System.out.println(Ui.INTRO);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" this.begin();","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" private void begin() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" String str;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" ControlFlow control \u003d new ControlFlow(taskLst);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" Command command \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" do {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" str \u003d sc.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" command \u003d control.execute(str);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" command.execute();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" } catch (IncompleteBotException | IllegalExpressionBotException |","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" FileErrorBotException | DateTimeParseBotException | IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":" } while (!(command instanceof TerminateCommand));","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":50}},{"path":"src/main/java/bot/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.IllegalExpressionBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" public static final String SPACER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" public abstract void execute() throws IllegalExpressionBotException, FileErrorBotException, IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":13}},{"path":"src/main/java/bot/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" private final Deadline deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" public DeadlineCommand(TaskList taskList, String taskDetail,","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" String dueDate) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" this.deadline \u003d new Deadline(taskDetail, dueDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" this.taskList.add(this.deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" if (this.taskList.length() \u003c\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" this.deadline + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" bot.task in the list.\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" this.deadline + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":44}},{"path":"src/main/java/bot/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final int idx;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" public DeleteCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.idx \u003d Integer.parseInt(taskDetail) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.task \u003d this.taskList.get(this.idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.taskList.delete(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"Noted. I\u0027ve removed this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" this.task + \"\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":35}},{"path":"src/main/java/bot/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" private final Event event;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" public EventCommand(TaskList taskList, String taskDetail, String timeFrom,","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" String timeTo) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" this.event \u003d new Event(taskDetail, timeFrom, timeTo);","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" this.taskList.add(this.event);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" if (this.taskList.length() \u003c\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" this.event + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" bot.task in the list.\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" this.event + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":46}},{"path":"src/main/java/bot/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" public ListCommand(TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" public void execute() {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" \"Here are the tasks in your list:\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" this.taskList.list() +","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":23}},{"path":"src/main/java/bot/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" public MarkCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.task \u003d taskList.get(Integer.parseInt(taskDetail) - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.task.setComplete();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"Nice! I\u0027ve marked this bot.task as done:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" this.task + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":34}},{"path":"src/main/java/bot/command/TerminateCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class TerminateCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" private static final String MESSAGE \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" public void execute() {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" return TerminateCommand.MESSAGE;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":16}},{"path":"src/main/java/bot/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final Todo todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" public TodoCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.todo \u003d new Todo(taskDetail);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" this.taskList.add(this.todo);","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" if (this.taskList.length() \u003c\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" this.todo + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" bot.task in the list.\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" this.todo + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":43}},{"path":"src/main/java/bot/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private final Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" public UnmarkCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.task \u003d taskList.get(Integer.parseInt(taskDetail) - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.task.setIncomplete();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"OK, I\u0027ve marked this bot.task as not done yet:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" this.task + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":34}},{"path":"src/main/java/bot/exception/BotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"import java.lang.Exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"public class BotException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" public static final String SPACER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" public BotException(String errorMessage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" return BotException.SPACER + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" super.getMessage() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" BotException.SPACER;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":17}},{"path":"src/main/java/bot/exception/DateTimeParseBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class DateTimeParseBotException extends BotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public DateTimeParseBotException(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/bot/exception/FileErrorBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class FileErrorBotException extends BotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public FileErrorBotException(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/bot/exception/IllegalExpressionBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class IllegalExpressionBotException extends BotException {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public IllegalExpressionBotException(String errorMessage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/bot/exception/IncompleteBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class IncompleteBotException extends BotException {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public IncompleteBotException(String errorMessage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/bot/parsers/DatetimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.parsers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"public class DatetimeParser {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" public static LocalDateTime parseTimeInput(String str) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" return LocalDateTime.parse(str, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" throw new DateTimeParseBotException(\"Please write your dateTime as d/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" public static String reformatTimeOutput(LocalDateTime time) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" return time.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public static LocalDateTime convertToLocalDateTime(String str) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" return LocalDateTime.parse(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" throw new DateTimeParseBotException(\"The dateTime format is corrupted \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"in the ./data/bot.task.txt.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":33}},{"path":"src/main/java/bot/parsers/InputParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.parsers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class InputParser {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_SPACE \u003d \" \";","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_BY \u003d \" /by \";","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_FROM \u003d \" /from \";","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_TO \u003d \" /to \";","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtSpace(String str) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" return str.split(InputParser.SPLIT_AT_SPACE, 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtBy(String str) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" return str.split(InputParser.SPLIT_AT_BY, 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtFrom(String str) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" return str.split(InputParser.SPLIT_AT_FROM, 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtTo(String str) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" return str.split(InputParser.SPLIT_AT_TO, 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public static String getLeftOfSplit(String[] arr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" return arr[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public static String getRightOfSplit(String[] arr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" return arr[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":33}},{"path":"src/main/java/bot/parsers/StorageParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.parsers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"public class StorageParser {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" private static final String UNIQUE_FILE_SEPARATOR \u003d \" \u0026##\u0026 \";","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private static final String TODO_HEADER \u003d \"[T] \";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private static final String DEADLINE_HEADER \u003d \"[D] \";","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" public static Task parseFileInput(String str) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" String[] stringArr \u003d str.split(StorageParser.UNIQUE_FILE_SEPARATOR);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" switch(stringArr[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" case StorageParser.TODO_HEADER:","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" return new Todo(stringArr[1], stringArr[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" case StorageParser.DEADLINE_HEADER:","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" return new Deadline(stringArr[1], stringArr[2], stringArr[3]);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" return new Event(stringArr[1], stringArr[2], stringArr[3], stringArr[4]);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":25}},{"path":"src/main/java/bot/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.parsers.StorageParser;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" private static final String FILE_NAME \u003d \"task.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" private static final String FILE_RELATIVE_PATH \u003d \"data\" + File.separator;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" private static final String WORKING_DIRECTORY \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" private static final String ABSOLUTE_FILE_PATH \u003d Storage.WORKING_DIRECTORY + File.separator +","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" Storage.FILE_RELATIVE_PATH;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public static void save(TaskList taskList) throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" File file \u003d new File(Storage.ABSOLUTE_FILE_PATH +","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" File.separator + Storage.FILE_NAME);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" try (BufferedWriter bw \u003d new BufferedWriter(new FileWriter(file))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" Iterator\u003cTask\u003e iterator \u003d taskList.iterator();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" while(iterator.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" bw.write(iterator.next().fileWriteFormatted());","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" bw.newLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" throw new FileErrorBotException(\"File cannot be saved...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" public static TaskList read() throws FileErrorBotException,","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" DateTimeParseBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":" File file \u003d new File(Storage.ABSOLUTE_FILE_PATH +","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":" File.separator + Storage.FILE_NAME);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"XihuaZ"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"XihuaZ"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"XihuaZ"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"XihuaZ"},"content":" try (BufferedReader br \u003d new BufferedReader(new FileReader(file))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"XihuaZ"},"content":" while (br.ready()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"XihuaZ"},"content":" taskList.add(StorageParser.parseFileInput(br.readLine()));","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"XihuaZ"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"XihuaZ"},"content":" throw new FileErrorBotException(\"File cannot be saved...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"XihuaZ"},"content":" return taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":61}},{"path":"src/main/java/bot/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.parsers.DatetimeParser;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" private static final String TASK_HEADER \u003d \"[D] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" private final LocalDateTime time;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" public Deadline(String name, String time) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" super(name);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" this.time \u003d DatetimeParser.parseTimeInput(time);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public Deadline(String bool, String name, String time) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" super(name, Boolean.parseBoolean(bool));","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" this.time \u003d DatetimeParser.convertToLocalDateTime(time);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" return Deadline.TASK_HEADER + Task.UNIQUE_FILE_SEPARATOR +","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" super.fileWriteFormatted() + Task.UNIQUE_FILE_SEPARATOR + this.time;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" return Deadline.TASK_HEADER + super.toString() + \"(by: \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" DatetimeParser.reformatTimeOutput(this.time) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":33}},{"path":"src/main/java/bot/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.parsers.DatetimeParser;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" private static final String TASK_HEADER \u003d \"[E] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private final LocalDateTime startTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final LocalDateTime endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" public Event(String name, String startTime, String endTime) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" super(name);","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.startTime \u003d DatetimeParser.parseTimeInput(startTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.endTime \u003d DatetimeParser.parseTimeInput(endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" public Event(String bool, String name, String startTime, String endTime) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" super(name, Boolean.parseBoolean(bool));","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.startTime \u003d DatetimeParser.convertToLocalDateTime(startTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" this.endTime \u003d DatetimeParser.convertToLocalDateTime(endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" return Event.TASK_HEADER + Task.UNIQUE_FILE_SEPARATOR +","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" super.fileWriteFormatted() + Task.UNIQUE_FILE_SEPARATOR + this.startTime +","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" Task.UNIQUE_FILE_SEPARATOR + this.endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" return Event.TASK_HEADER + super.toString()+","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" \" (from: \" + DatetimeParser.reformatTimeOutput(this.startTime) +","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" \" to: \" + DatetimeParser.reformatTimeOutput(this.endTime) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":39}},{"path":"src/main/java/bot/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" private static final String COMPLETE \u003d \"[X] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" private static final String INCOMPLETE \u003d \"[ ] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" protected static final String UNIQUE_FILE_SEPARATOR \u003d \" \u0026##\u0026 \";","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" private final String name;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" public Task(String name, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public void setComplete() {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public void setIncomplete() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" return \"true\" + Task.UNIQUE_FILE_SEPARATOR + this.name;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" return \"false\" + Task.UNIQUE_FILE_SEPARATOR + this.name;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" return Task.COMPLETE + this.name;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" return Task.INCOMPLETE + this.name;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":45}},{"path":"src/main/java/bot/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" private final ArrayList\u003cTask\u003e lst;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" this.lst \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" public TaskList(ArrayList\u003cTask\u003e lst) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" this.lst \u003d lst;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.lst.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public Task get(int idx) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" return this.lst.get(idx);","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public int length() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" return this.lst.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public void delete(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" this.lst.remove(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" public Iterator\u003cTask\u003e iterator() {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" return this.lst.iterator();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" public String list() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" Iterator\u003cTask\u003e iterator \u003d this.iterator();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" while (iterator.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" str +\u003d Integer.toString(i) + \". \" + iterator.next() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" i++;","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":" return str;","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":48}},{"path":"src/main/java/bot/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" private static final String TASK_HEADER \u003d \"[T] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" super(name);","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" public Todo(String bool, String name) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" super(name, Boolean.parseBoolean(bool));","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" return Todo.TASK_HEADER + Task.UNIQUE_FILE_SEPARATOR + super.fileWriteFormatted();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" return Todo.TASK_HEADER + super.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"todo homework","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"todo assignments","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"event cca /from 5pm /to 7pm","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"event birthday /from 22/7/2023 /to 23/7/2023","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"deadline homework /by tomorrow","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"deadline HM21 /by monday","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"list","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"bye","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":8}},{"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":"XihuaZ"},"content":"java -classpath ../bin Bot \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"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":{"XihuaZ":1,"-":37}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"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":"-"},"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":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"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":"XihuaZ"},"content":" mainClass.set(\"bot.Bot\")","lastModifiedDate":"2023-09-03"},{"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":"XihuaZ"},"content":" archiveBaseName \u003d \"bot\"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"XihuaZ"},"content":" archiveFileName \u003d \u0027bot.jar\u0027","lastModifiedDate":"2023-09-04"},{"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":{"XihuaZ":20,"-":40}},{"path":"data/task.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"[E] \u0026##\u0026 false \u0026##\u0026 wdwdwdw \u0026##\u0026 2019-12-02T16:48 \u0026##\u0026 2019-12-03T23:00","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"[E] \u0026##\u0026 false \u0026##\u0026 fish \u0026##\u0026 2019-12-05T18:00 \u0026##\u0026 2019-12-06T18:00","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"[T] \u0026##\u0026 true \u0026##\u0026 yummy","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"[D] \u0026##\u0026 false \u0026##\u0026 done \u0026##\u0026 2023-02-25T19:30","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"[E] \u0026##\u0026 false \u0026##\u0026 homework \u0026##\u0026 2023-09-10T18:00 \u0026##\u0026 2023-09-20T18:00","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"[T] \u0026##\u0026 false \u0026##\u0026 eat food","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"[T] \u0026##\u0026 false \u0026##\u0026 donkey kkkk","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"[T] \u0026##\u0026 false \u0026##\u0026 kkkkk kkkk","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"XihuaZ":8}},{"path":"src/main/java/bot/Bot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"public class Bot {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" public Bot(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.ui \u003d new Ui(new Scanner(System.in), taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" public static void main(String[] args) throws FileErrorBotException,","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" DateTimeParseBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" Bot bot \u003d new Bot(Storage.read());","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" bot.start();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public void start() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" this.ui.start();","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"XihuaZ":28}},{"path":"src/main/java/bot/ControlFlow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.command.DeadlineCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.command.EventCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import bot.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import bot.command.TerminateCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"import bot.command.TodoCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"import bot.command.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.IllegalExpressionBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.IncompleteBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":"import bot.parsers.InputParser;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":"public class ControlFlow {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" private static final String MARK \u003d \"mark\";","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" private static final String UNMARK \u003d \"unmark\";","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" private static final String LIST \u003d \"list\";","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" private static final String TODO \u003d \"todo\";","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" private static final String EVENT \u003d \"event\";","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" private static final String DEADLINE \u003d \"deadline\";","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" private static final String TERMINATE \u003d \"bye\";","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" private static final String DELETE \u003d \"delete\";","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" public ControlFlow(TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" public Command execute(String str) throws IllegalExpressionBotException,","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" IncompleteBotException, FileErrorBotException, DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" if (str.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! There is no bot.task specified.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":" String[] strSplit \u003d InputParser.getSplitAtSpace(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":" String taskName \u003d InputParser.getLeftOfSplit(strSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":" String remainder \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"XihuaZ"},"content":" if (strSplit.length \u003e 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"XihuaZ"},"content":" remainder \u003d InputParser.getRightOfSplit(strSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"XihuaZ"},"content":" String[] taskSplit;","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"XihuaZ"},"content":" String taskDetail;","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"XihuaZ"},"content":" String timeline;","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"XihuaZ"},"content":" String[] timelineArr;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"XihuaZ"},"content":" String timeFrom;","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"XihuaZ"},"content":" String timeTo;","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"XihuaZ"},"content":" switch(taskName) {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.TERMINATE:","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"XihuaZ"},"content":" return new TerminateCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"XihuaZ"},"content":" return new TodoCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"XihuaZ"},"content":" taskSplit \u003d InputParser.getSplitAtBy(remainder);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"XihuaZ"},"content":" if (taskSplit.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The timing of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"XihuaZ"},"content":" taskDetail \u003d InputParser.getLeftOfSplit(taskSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"XihuaZ"},"content":" timeline \u003d InputParser.getRightOfSplit(taskSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"XihuaZ"},"content":" return new DeadlineCommand(this.taskList, taskDetail, timeline);","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.EVENT:","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"XihuaZ"},"content":" taskSplit \u003d InputParser.getSplitAtFrom(remainder);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"XihuaZ"},"content":" if (taskSplit.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The starting timing of an event cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"XihuaZ"},"content":" taskDetail \u003d InputParser.getLeftOfSplit(taskSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"XihuaZ"},"content":" timeline \u003d InputParser.getRightOfSplit(taskSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"XihuaZ"},"content":" timelineArr \u003d InputParser.getSplitAtTo(timeline);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"XihuaZ"},"content":" if (timelineArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The ending timing of an event cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"XihuaZ"},"content":" timeFrom \u003d InputParser.getLeftOfSplit(timelineArr);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"XihuaZ"},"content":" timeTo \u003d InputParser.getRightOfSplit(timelineArr);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"XihuaZ"},"content":" return new EventCommand(this.taskList, taskDetail, timeFrom, timeTo);","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The task number to mark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"XihuaZ"},"content":" return new MarkCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"XihuaZ"},"content":" return new UnmarkCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.LIST:","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"XihuaZ"},"content":" return new ListCommand(this.taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.DELETE:","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"XihuaZ"},"content":" return new DeleteCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"XihuaZ"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"XihuaZ"},"content":" throw new IllegalExpressionBotException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":120}},{"path":"src/main/java/bot/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.command.TerminateCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.IllegalExpressionBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.IncompleteBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" private static final String INTRO \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" \"Hello! I\u0027m Bot\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" \"What can I do for you?\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" private final Scanner sc;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskLst;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" public Ui(Scanner sc, TaskList taskLst) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" this.sc \u003d sc;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" this.taskLst \u003d taskLst;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public void start() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" System.out.println(Ui.INTRO);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" this.begin();","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" private void begin() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" String str;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" ControlFlow control \u003d new ControlFlow(taskLst);","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" Command command \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" do {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" str \u003d sc.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" command \u003d control.execute(str);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" command.execute();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" } catch (IncompleteBotException | IllegalExpressionBotException |","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" FileErrorBotException | DateTimeParseBotException | IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":" } while (!(command instanceof TerminateCommand));","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":51}},{"path":"src/main/java/bot/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.IllegalExpressionBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" public static final String SPACER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" public abstract void execute() throws IllegalExpressionBotException, FileErrorBotException, IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":13}},{"path":"src/main/java/bot/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" private final Deadline deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" public DeadlineCommand(TaskList taskList, String taskDetail,","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" String dueDate) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" this.deadline \u003d new Deadline(taskDetail, dueDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" this.taskList.add(this.deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" if (this.taskList.length() \u003c\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" this.deadline + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" bot.task in the list.\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" this.deadline + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":44}},{"path":"src/main/java/bot/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final int idx;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" public DeleteCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.idx \u003d Integer.parseInt(taskDetail) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.task \u003d this.taskList.get(this.idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.taskList.delete(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"Noted. I\u0027ve removed this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" this.task + \"\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":35}},{"path":"src/main/java/bot/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" private final Event event;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" public EventCommand(TaskList taskList, String taskDetail, String timeFrom,","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" String timeTo) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" this.event \u003d new Event(taskDetail, timeFrom, timeTo);","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" this.taskList.add(this.event);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" if (this.taskList.length() \u003c\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" this.event + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" bot.task in the list.\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" this.event + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":46}},{"path":"src/main/java/bot/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" public ListCommand(TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" public void execute() {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" \"Here are the tasks in your list:\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" this.taskList.list() +","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":23}},{"path":"src/main/java/bot/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" public MarkCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.task \u003d taskList.get(Integer.parseInt(taskDetail) - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.task.setComplete();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"Nice! I\u0027ve marked this bot.task as done:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" this.task + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":34}},{"path":"src/main/java/bot/command/TerminateCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class TerminateCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" private static final String MESSAGE \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" public void execute() {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" return TerminateCommand.MESSAGE;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":16}},{"path":"src/main/java/bot/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final Todo todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" public TodoCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.todo \u003d new Todo(taskDetail);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" this.taskList.add(this.todo);","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" if (this.taskList.length() \u003c\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" this.todo + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" bot.task in the list.\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" this.todo + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":43}},{"path":"src/main/java/bot/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private final Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" public UnmarkCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.task \u003d taskList.get(Integer.parseInt(taskDetail) - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.task.setIncomplete();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"OK, I\u0027ve marked this bot.task as not done yet:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" this.task + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":34}},{"path":"src/main/java/bot/exception/BotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"import java.lang.Exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"public class BotException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" public static final String SPACER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" public BotException(String errorMessage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" return BotException.SPACER + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" super.getMessage() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" BotException.SPACER;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":17}},{"path":"src/main/java/bot/exception/DateTimeParseBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class DateTimeParseBotException extends BotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public DateTimeParseBotException(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/bot/exception/FileErrorBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class FileErrorBotException extends BotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public FileErrorBotException(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/bot/exception/IllegalExpressionBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class IllegalExpressionBotException extends BotException {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public IllegalExpressionBotException(String errorMessage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/bot/exception/IncompleteBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class IncompleteBotException extends BotException {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public IncompleteBotException(String errorMessage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/bot/parsers/DatetimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.parsers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"public class DatetimeParser {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" public static LocalDateTime parseTimeInput(String str) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" return LocalDateTime.parse(str, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" throw new DateTimeParseBotException(\"Please write your dateTime as d/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" public static String reformatTimeOutput(LocalDateTime time) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" return time.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public static LocalDateTime convertToLocalDateTime(String str) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" return LocalDateTime.parse(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" throw new DateTimeParseBotException(\"The dateTime format is corrupted \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"in the ./data/bot.task.txt.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":33}},{"path":"src/main/java/bot/parsers/InputParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.parsers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"public class InputParser {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_SPACE \u003d \" \";","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_BY \u003d \" /by \";","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_FROM \u003d \" /from \";","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_TO \u003d \" /to \";","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtSpace(String str) {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" return str.split(InputParser.SPLIT_AT_SPACE, 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtBy(String str) {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" return str.split(InputParser.SPLIT_AT_BY, 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtFrom(String str) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" return str.split(InputParser.SPLIT_AT_FROM, 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtTo(String str) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" return str.split(InputParser.SPLIT_AT_TO, 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" public static String getLeftOfSplit(String[] arr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" return arr[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" public static String getRightOfSplit(String[] arr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" return arr[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":35}},{"path":"src/main/java/bot/parsers/StorageParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.parsers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"public class StorageParser {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" private static final String UNIQUE_FILE_SEPARATOR \u003d \" \u0026##\u0026 \";","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private static final String TODO_HEADER \u003d \"[T] \";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private static final String DEADLINE_HEADER \u003d \"[D] \";","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" public static Task parseFileInput(String str) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" String[] stringArr \u003d str.split(StorageParser.UNIQUE_FILE_SEPARATOR);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" switch(stringArr[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" case StorageParser.TODO_HEADER:","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" return new Todo(stringArr[1], stringArr[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" case StorageParser.DEADLINE_HEADER:","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" return new Deadline(stringArr[1], stringArr[2], stringArr[3]);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" return new Event(stringArr[1], stringArr[2], stringArr[3], stringArr[4]);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":25}},{"path":"src/main/java/bot/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.parsers.StorageParser;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" private static final String FILE_NAME \u003d \"task.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" private static final String FILE_RELATIVE_PATH \u003d \"data\" + File.separator;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" private static final String WORKING_DIRECTORY \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" private static final String ABSOLUTE_FILE_PATH \u003d Storage.WORKING_DIRECTORY + File.separator +","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" Storage.FILE_RELATIVE_PATH;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public static void save(TaskList taskList) throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" File file \u003d new File(Storage.ABSOLUTE_FILE_PATH +","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" File.separator + Storage.FILE_NAME);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" try (BufferedWriter bw \u003d new BufferedWriter(new FileWriter(file))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" Iterator\u003cTask\u003e iterator \u003d taskList.iterator();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" while(iterator.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" bw.write(iterator.next().fileWriteFormatted());","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" bw.newLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" throw new FileErrorBotException(\"File cannot be saved...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" public static TaskList read() throws FileErrorBotException,","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" DateTimeParseBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":" File file \u003d new File(Storage.ABSOLUTE_FILE_PATH +","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":" File.separator + Storage.FILE_NAME);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"XihuaZ"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"XihuaZ"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"XihuaZ"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"XihuaZ"},"content":" try (BufferedReader br \u003d new BufferedReader(new FileReader(file))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"XihuaZ"},"content":" while (br.ready()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"XihuaZ"},"content":" taskList.add(StorageParser.parseFileInput(br.readLine()));","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"XihuaZ"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"XihuaZ"},"content":" throw new FileErrorBotException(\"File cannot be saved...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"XihuaZ"},"content":" return taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":61}},{"path":"src/main/java/bot/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.parsers.DatetimeParser;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" private static final String TASK_HEADER \u003d \"[D] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" private final LocalDateTime time;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" public Deadline(String name, String time) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" super(name);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" this.time \u003d DatetimeParser.parseTimeInput(time);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public Deadline(String bool, String name, String time) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" super(name, Boolean.parseBoolean(bool));","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" this.time \u003d DatetimeParser.convertToLocalDateTime(time);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" return Deadline.TASK_HEADER + Task.UNIQUE_FILE_SEPARATOR +","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" super.fileWriteFormatted() + Task.UNIQUE_FILE_SEPARATOR + this.time;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" return Deadline.TASK_HEADER + super.toString() + \"(by: \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" DatetimeParser.reformatTimeOutput(this.time) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":33}},{"path":"src/main/java/bot/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.parsers.DatetimeParser;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" private static final String TASK_HEADER \u003d \"[E] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private final LocalDateTime startTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final LocalDateTime endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" public Event(String name, String startTime, String endTime) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" super(name);","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.startTime \u003d DatetimeParser.parseTimeInput(startTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.endTime \u003d DatetimeParser.parseTimeInput(endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" public Event(String bool, String name, String startTime, String endTime) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" super(name, Boolean.parseBoolean(bool));","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.startTime \u003d DatetimeParser.convertToLocalDateTime(startTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" this.endTime \u003d DatetimeParser.convertToLocalDateTime(endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" return Event.TASK_HEADER + Task.UNIQUE_FILE_SEPARATOR +","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" super.fileWriteFormatted() + Task.UNIQUE_FILE_SEPARATOR + this.startTime +","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" Task.UNIQUE_FILE_SEPARATOR + this.endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" return Event.TASK_HEADER + super.toString()+","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" \" (from: \" + DatetimeParser.reformatTimeOutput(this.startTime) +","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" \" to: \" + DatetimeParser.reformatTimeOutput(this.endTime) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":39}},{"path":"src/main/java/bot/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" private static final String COMPLETE \u003d \"[X] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" private static final String INCOMPLETE \u003d \"[ ] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" protected static final String UNIQUE_FILE_SEPARATOR \u003d \" \u0026##\u0026 \";","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" private final String name;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" public Task(String name, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public void setComplete() {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public void setIncomplete() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" return \"true\" + Task.UNIQUE_FILE_SEPARATOR + this.name;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" return \"false\" + Task.UNIQUE_FILE_SEPARATOR + this.name;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" return Task.COMPLETE + this.name;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" return Task.INCOMPLETE + this.name;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":45}},{"path":"src/main/java/bot/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" private final ArrayList\u003cTask\u003e lst;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" this.lst \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" public TaskList(ArrayList\u003cTask\u003e lst) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" this.lst \u003d lst;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.lst.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public Task get(int idx) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" return this.lst.get(idx);","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public int length() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" return this.lst.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public void delete(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" this.lst.remove(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" public Iterator\u003cTask\u003e iterator() {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" return this.lst.iterator();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" public String list() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" Iterator\u003cTask\u003e iterator \u003d this.iterator();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" while (iterator.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" str +\u003d Integer.toString(i) + \". \" + iterator.next() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" i++;","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":" return str;","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":48}},{"path":"src/main/java/bot/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" private static final String TASK_HEADER \u003d \"[T] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" super(name);","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" public Todo(String bool, String name) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" super(name, Boolean.parseBoolean(bool));","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" return Todo.TASK_HEADER + Task.UNIQUE_FILE_SEPARATOR + super.fileWriteFormatted();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" return Todo.TASK_HEADER + super.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":22}},{"path":"src/test/main/java/bot/parsers/DatetimeParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.parsers;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.BotException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"public class DatetimeParserTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" public void parseTimeInput_wrongFormat_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" DatetimeParser.parseTimeInput(\"18:20 1/12/2019\");","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" fail();","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" } catch (DateTimeParseBotException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" assertEquals(\"Please write your dateTime as d/MM/yyyy HH:mm\",","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"XihuaZ":24}},{"path":"src/test/main/java/bot/parsers/InputParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.parsers;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"public class InputParserTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" public void getSplitAtSpace_multipleSpaces_success() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" String[] expectedOutput \u003d {\"dinner\", \"table is huge.\"};","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" String[] actualOutput \u003d InputParser.getSplitAtSpace(\"dinner table is huge.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" assertArrayEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public void getSplitAtBy_missingBy_success() {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" String[] expectedOutput \u003d {\"dinner table is huge.\"};","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" String[] actualOutput \u003d InputParser.getSplitAtBy(\"dinner table is huge.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" assertArrayEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"XihuaZ":23}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"todo homework","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"todo assignments","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"event cca /from 5pm /to 7pm","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"event birthday /from 22/7/2023 /to 23/7/2023","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"deadline homework /by tomorrow","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"deadline HM21 /by monday","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"list","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"bye","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":8}},{"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":"XihuaZ"},"content":"java -classpath ../bin Bot \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"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":{"XihuaZ":1,"-":37}}] diff --git a/XihuaZ_ip_master/commits.json b/XihuaZ_ip_master/commits.json index 34a6169e..29b70d00 100644 --- a/XihuaZ_ip_master/commits.json +++ b/XihuaZ_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"XihuaZ":[{"date":"2023-08-26","commitResults":[{"hash":"ffa88fa7399d87c97ce9439db9d125bc37dbfe42","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"c35740189d6b66b9be3d44f61f2e95cf3453a1be","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"ffb0564b3d64b4314426fb44c3e64e6a8d737104","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":3}}}]},{"date":"2023-08-27","commitResults":[{"hash":"f1220161f21a43c86ad4ded62edbd01200a820bf","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":7}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e2fc52674089faebb316bec81d2b8977f53d59d6","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":538,"deletions":118}}},{"hash":"60e335874ceb053fa2cd15a49a105d4d73ab8592","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":3,"deletions":3},"sh":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"fdd89dcc110532c901ae64e535683e28d4abeca5","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":84}}},{"hash":"087b006c27bf8f317430682ab580080fad156803","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":2}}},{"hash":"13e1f120b55bc297e7a4c7469d239dc63c4cea8d","isMergeCommit":false,"messageTitle":"Cleanup redundant code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":37}}}]},{"date":"2023-09-02","commitResults":[{"hash":"acbd835ff44c420b1b06867c19ac69219a2e7d36","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":218,"deletions":24}}},{"hash":"da68509c63b72eff3a8db5e00f853837bc7c8156","isMergeCommit":false,"messageTitle":"Implemented conversion to LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":44,"deletions":11}}},{"hash":"0b61d3c07195d355177ca4e825b768e087296cc4","isMergeCommit":false,"messageTitle":"Level 8. Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":113,"deletions":86}}},{"hash":"f285c4f93c65e4e8f3e82f2fbd2db8a8b34f528e","isMergeCommit":false,"messageTitle":"Refactor the code","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":18,"deletions":31}}}]},{"date":"2023-09-03","commitResults":[{"hash":"1d476fa64fc92d4d9f82dde8d2a0098888729488","isMergeCommit":false,"messageTitle":"Organize into Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":150,"deletions":126}}}]}]},"authorFileTypeContributionMap":{"XihuaZ":{"java":870,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":13}},"authorContributionVariance":{"XihuaZ":41948.496},"authorDisplayNameMap":{"XihuaZ":"CS2103-T16-1 ZHU ..IHUA"}} +{"authorDailyContributionsMap":{"XihuaZ":[{"date":"2023-08-26","commitResults":[{"hash":"ffa88fa7399d87c97ce9439db9d125bc37dbfe42","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"c35740189d6b66b9be3d44f61f2e95cf3453a1be","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"ffb0564b3d64b4314426fb44c3e64e6a8d737104","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":3}}}]},{"date":"2023-08-27","commitResults":[{"hash":"f1220161f21a43c86ad4ded62edbd01200a820bf","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":7}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e2fc52674089faebb316bec81d2b8977f53d59d6","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":538,"deletions":118}}},{"hash":"60e335874ceb053fa2cd15a49a105d4d73ab8592","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":3,"deletions":3},"sh":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"fdd89dcc110532c901ae64e535683e28d4abeca5","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":84}}},{"hash":"087b006c27bf8f317430682ab580080fad156803","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":2}}},{"hash":"13e1f120b55bc297e7a4c7469d239dc63c4cea8d","isMergeCommit":false,"messageTitle":"Cleanup redundant code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":37}}}]},{"date":"2023-09-02","commitResults":[{"hash":"acbd835ff44c420b1b06867c19ac69219a2e7d36","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":218,"deletions":24}}},{"hash":"da68509c63b72eff3a8db5e00f853837bc7c8156","isMergeCommit":false,"messageTitle":"Implemented conversion to LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":44,"deletions":11}}},{"hash":"0b61d3c07195d355177ca4e825b768e087296cc4","isMergeCommit":false,"messageTitle":"Level 8. Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":113,"deletions":86}}},{"hash":"f285c4f93c65e4e8f3e82f2fbd2db8a8b34f528e","isMergeCommit":false,"messageTitle":"Refactor the code","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":18,"deletions":31}}}]},{"date":"2023-09-03","commitResults":[{"hash":"1d476fa64fc92d4d9f82dde8d2a0098888729488","isMergeCommit":false,"messageTitle":"Organize into Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":150,"deletions":126}}},{"hash":"5a6c198de2e2d85a8ff492910d1686eb25131f6f","isMergeCommit":false,"messageTitle":"Modify build.gradle file","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2}}}]},{"date":"2023-09-04","commitResults":[{"hash":"d8efe29514fc0d3a9649f40435aef30854e8a9fb","isMergeCommit":false,"messageTitle":"Add Junit tests and modify Ui.java","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":1}}},{"hash":"d6aeff19bc12be023bc3e84063f2fdb51a71f8dc","isMergeCommit":false,"messageTitle":"Debug JUnit tests and update build.gradle","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":0},"txt":{"insertions":3,"deletions":0},"java":{"insertions":8,"deletions":5}}}]}]},"authorFileTypeContributionMap":{"XihuaZ":{"java":920,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":20,"txt":16}},"authorContributionVariance":{"XihuaZ":39770.508},"authorDisplayNameMap":{"XihuaZ":"CS2103-T16-1 ZHU ..IHUA"}} diff --git a/alientian_ip_master/authorship.json b/alientian_ip_master/authorship.json index c80ebabe..47d1e255 100644 --- a/alientian_ip_master/authorship.json +++ b/alientian_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":"alientian"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"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":"alientian"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"alientian":2,"-":41}},{"path":"src/main/data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":1}},{"path":"src/main/java/duke/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":" * Adds a task to the task list","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"public class AddCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" /** Description of the task */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" private final String toAdd;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public AddCommand(String str) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" toAdd \u003d str;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" if (toAdd.startsWith(\"todo \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" if (toAdd.length() \u003c 6) throw new IncompleteInputException(\"todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" String des \u003d toAdd.substring(5);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" Todo todo \u003d new Todo(des);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" tasks.add(todo);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" ui.showTaskAdded(todo, tasks.total());","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" } else if (toAdd.startsWith(\"deadline \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":" String[] words \u003d toAdd.split(\"/\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":" if (words.length !\u003d 2 || words[0].length() \u003c 10 || words[1].length() \u003c 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":" throw new IncompleteInputException(\"deadline\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"alientian"},"content":" String des \u003d words[0].substring(9);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"alientian"},"content":" String date \u003d words[1].substring(3);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"alientian"},"content":" LocalDate by \u003d LocalDate.parse(date);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"alientian"},"content":" Deadline dl \u003d new Deadline(des, by);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"alientian"},"content":" tasks.add(dl);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"alientian"},"content":" ui.showTaskAdded(dl, tasks.total());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"alientian"},"content":" } else if (toAdd.startsWith(\"event \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"alientian"},"content":" String[] words \u003d toAdd.split(\"/\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"alientian"},"content":" if (words.length !\u003d 3 || words[0].length() \u003c 7 || words[1].length() \u003c 6 || words[2].length() \u003c 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"alientian"},"content":" throw new IncompleteInputException(\"deadline\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"alientian"},"content":" String des \u003d words[0].substring(6);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"alientian"},"content":" String fromDate \u003d words[1].substring(5, 15);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"alientian"},"content":" String toDate \u003d words[2].substring(3);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"alientian"},"content":" LocalDate from \u003d LocalDate.parse(fromDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"alientian"},"content":" LocalDate to \u003d LocalDate.parse(toDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"alientian"},"content":" Event event \u003d new Event(des, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"alientian"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"alientian"},"content":" ui.showTaskAdded(event, tasks.total());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"alientian"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"alientian"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"alientian"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"alientian"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"alientian"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"alientian"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":66}},{"path":"src/main/java/duke/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Represents an executable command.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" * Executes the command.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" * @param tasks tasks in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" * @param ui ui that interacts with users.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" * @param storage storage to save tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" * @throws Exception if there is an error.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws Exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" * Checks if command is exit command","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" * @return true if it is exit command","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":23}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":" * Represents a tasks with deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" + by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" public String toFileString(){","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":" return \"D--\" + super.toFileString() + \"--\" + by;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"alientian":29}},{"path":"src/main/java/duke/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Deletes a task from the task list","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class DeleteCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" /** Index of the task in task list */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" private final int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" public DeleteCommand(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" index \u003d i;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" Task t \u003d tasks.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" tasks.delete(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" ui.showDeleted(t, tasks.total());","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":25}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Entry point of the chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" * Initializes the application and starts the interaction with the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"public class Duke {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" * Runs the programme until termination","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"alientian"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"alientian"},"content":" ui.showLine(); // show the divider line (\"_______\")","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"alientian"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"alientian"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"alientian"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"alientian"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"alientian"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"alientian"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"alientian"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"alientian"},"content":" * Initializes duke and runs it.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"alientian"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"alientian"},"content":" new Duke(\"./src/main/data/tasks.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":50}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":" * Represents a task with starting date and end date.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"public class Event extends Task{","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" protected LocalDate from;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" protected LocalDate to;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" + \" (from: \" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" + \" to: \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" public String toFileString(){","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":" return \"E--\" + super.toFileString() + \"--\" + from + \"--\" + to;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"alientian":30}},{"path":"src/main/java/duke/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":" * Exits duke and saves task list to storage","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"public class ExitCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" public ExitCommand() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws IOException{","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" ui.showExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":22}},{"path":"src/main/java/duke/IncompleteInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Signals that given data does not fulfill some requirements.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class IncompleteInputException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" public IncompleteInputException(String type) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" super(\"☹ OOPS!!! The description of a \" + type + \" cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"alientian":11}},{"path":"src/main/java/duke/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Signals that given data does not match any command.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class InvalidInputException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" public InvalidInputException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"alientian":11}},{"path":"src/main/java/duke/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Lists all the tasks in task list","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class ListCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" public ListCommand() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" ui.showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" ui.showTaskList(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":21}},{"path":"src/main/java/duke/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Marks a task in task lis as done","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class MarkCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" /** Index of the task in task list */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" private final int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" public MarkCommand(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" index \u003d i;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" tasks.markTask(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" ui.showMarked(tasks.get(index));","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":24}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Parses user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" * Parses user input into command for execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" * @param input full user input string.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" * @return the command based on the user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public static Command parse(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" String num \u003d input.substring(5);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" int i \u003d Integer.parseInt(num);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" return new MarkCommand(i - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" String num \u003d input.substring(7);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" int i \u003d Integer.parseInt(num);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" return new UnmarkCommand(i - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"alientian"},"content":" String num \u003d input.substring(7);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"alientian"},"content":" int i \u003d Integer.parseInt(num);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"alientian"},"content":" return new DeleteCommand(i - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"alientian"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"alientian"},"content":" return new AddCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":40}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" * Represents the file used to store tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" private File file;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" private String path;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" file \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" path \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" * Loads data from the file in this storage to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" * @return the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":" * @throws IOException if there were errors reading and/or converting data from file.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":" public ArrayList\u003cTask\u003e load() throws IOException{","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"alientian"},"content":" Scanner fScanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"alientian"},"content":" ArrayList\u003cTask\u003e arrTask \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"alientian"},"content":" while (fScanner.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"alientian"},"content":" String s \u003d fScanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"alientian"},"content":" String[] arr \u003d s.split(\"--\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"alientian"},"content":" if (arr[0].equals(\"T\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"alientian"},"content":" Todo t \u003d new Todo(arr[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"alientian"},"content":" if (arr[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"alientian"},"content":" t.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"alientian"},"content":" arrTask.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"alientian"},"content":" } else if (arr[0].equals(\"D\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"alientian"},"content":" Deadline dl \u003d new Deadline(arr[2], LocalDate.parse(arr[3]));","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"alientian"},"content":" if (arr[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"alientian"},"content":" dl.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"alientian"},"content":" arrTask.add(dl);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"alientian"},"content":" } else if (arr[0].equals(\"E\")){","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"alientian"},"content":" Event e \u003d new Event(arr[2], LocalDate.parse(arr[3]), LocalDate.parse(arr[4]));","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"alientian"},"content":" if (arr[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"alientian"},"content":" e.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"alientian"},"content":" arrTask.add(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"alientian"},"content":" fScanner.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"alientian"},"content":" return arrTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"alientian"},"content":" * Saves the data in task list to the file in storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"alientian"},"content":" * @param list the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"alientian"},"content":" * @throws IOException if there were errors converting and/or storing data to file.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"alientian"},"content":" public void save(TaskList list) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"alientian"},"content":" if (file.delete()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"alientian"},"content":" file \u003d new File(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"alientian"},"content":" for (int i \u003d 1; i \u003c\u003d list.total(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"alientian"},"content":" Task t \u003d list.get(i - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"alientian"},"content":" writeToFile(path, t.toFileString());","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"alientian"},"content":" * Writes a line of text in the file in storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"alientian"},"content":" * @param pathname path name of the file.","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"alientian"},"content":" * @param textToAdd line of text to write into file.","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"alientian"},"content":" * @throws IOException if there were errors reading and/or writing to file.","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"alientian"},"content":" private void writeToFile(String pathname, String textToAdd) throws IOException{","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"alientian"},"content":" FileWriter fw \u003d new FileWriter(pathname, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"alientian"},"content":" fw.write(textToAdd + System.lineSeparator());","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"alientian"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":90}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Represents a tasks in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" * Returns X if task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" * @return X if task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"alientian"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"alientian"},"content":" return this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"alientian"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"alientian"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"alientian"},"content":" * Generates the string to represent the task in storage","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"alientian"},"content":" * @return string that represent the task","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"alientian"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"alientian"},"content":" if(isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"alientian"},"content":" return \"1--\" + this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"alientian"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"alientian"},"content":" return \"0--\" + this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"alientian":54}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":" * Represents the list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" private ArrayList\u003cTask\u003e lst;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" public TaskList(ArrayList\u003cTask\u003e list){","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" lst \u003d list;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" lst \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" * @param task task added to list.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" lst.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":" * @param index index of task in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"alientian"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"alientian"},"content":" Task t \u003d lst.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"alientian"},"content":" lst.remove(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"alientian"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"alientian"},"content":" * @param index index of task in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"alientian"},"content":" public void markTask(int index){","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"alientian"},"content":" lst.get(index).markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"alientian"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"alientian"},"content":" * @param index index of task in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"alientian"},"content":" public void unmarkTask(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"alientian"},"content":" lst.get(index).markAsNotDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"alientian"},"content":" * Gets a task from the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"alientian"},"content":" * @param index index of task in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"alientian"},"content":" * @return task of that index.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"alientian"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"alientian"},"content":" return lst.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"alientian"},"content":" * Gets the total number of tasks in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"alientian"},"content":" * @return the total number of tasks in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"alientian"},"content":" public int total() {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"alientian"},"content":" return lst.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":69}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Represents a task with description only.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class Todo extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" public Todo(String description){","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" return \"T--\" + super.toFileString();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"alientian":21}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":" * Text UI of the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" /** Scanner to read input */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public Ui() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" public void showLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" System.out.println(\"____________________________________________________________\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" * Generates and prints the welcome message upon the start of the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" System.out.println(","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":" \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" + \"Hello! I\u0027m ET\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":" + \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"alientian"},"content":" * Generates and prints the exit message upon the termination of the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"alientian"},"content":" public void showExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"alientian"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"alientian"},"content":" + \"Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"alientian"},"content":" + \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"alientian"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"alientian"},"content":" * Reads the next command from user.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"alientian"},"content":" * @return description of the command","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"alientian"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"alientian"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"alientian"},"content":" * Shows the marked task.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"alientian"},"content":" * @param task task that was marked.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"alientian"},"content":" public void showMarked(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"alientian"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"alientian"},"content":" + \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"alientian"},"content":" + task + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"alientian"},"content":" + \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"alientian"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"alientian"},"content":" * Shows the unmarked task","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"alientian"},"content":" * @param task task that was marked.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"alientian"},"content":" public void showUnmarked(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"alientian"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"alientian"},"content":" + \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"alientian"},"content":" + task + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"alientian"},"content":" + \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"alientian"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"alientian"},"content":" * Shows task added to task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"alientian"},"content":" * @param task task added to task list","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"alientian"},"content":" * @param num number of task in task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"alientian"},"content":" public void showTaskAdded(Task task, int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"alientian"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"alientian"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"alientian"},"content":" + task + \"\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"alientian"},"content":" + \"Now you have \" + num + \" tasks in the list.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"alientian"},"content":" + \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"alientian"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"alientian"},"content":" * Shows the task deleted from task list","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"alientian"},"content":" * @param task task deleted from task list","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"alientian"},"content":" * @param num number of task in task list","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"alientian"},"content":" public void showDeleted(Task task, int num) {","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"alientian"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"alientian"},"content":" + \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"alientian"},"content":" + task + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"alientian"},"content":" + \"Now you have \" + num + \" tasks in the list.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"alientian"},"content":" + \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"alientian"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"alientian"},"content":" * Shows the list of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"alientian"},"content":" * @param tasks list of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"alientian"},"content":" public void showTaskList(TaskList tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"alientian"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"alientian"},"content":" for (int i \u003d 1; i \u003c\u003d tasks.total(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"alientian"},"content":" Task t \u003d tasks.get(i - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"alientian"},"content":" System.out.println(i + \". \" + t.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"alientian"},"content":" * Shows the error message of an exception thrown.","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"alientian"},"content":" * @param errorMsg error message of the exception thrown.","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"alientian"},"content":" public void showError(String errorMsg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"alientian"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"alientian"},"content":" + errorMsg + \"\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"alientian"},"content":" + \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"alientian"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":127}},{"path":"src/main/java/duke/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Marks a task in task list as not done","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class UnmarkCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" /** Index of the task in task list */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" private final int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" public UnmarkCommand(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" index \u003d i;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" tasks.unmarkTask(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" ui.showUnmarked(tasks.get(index));","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":24}},{"path":"src/test/java/duke/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" public void test(){","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" Storage storage \u003d new Storage(\"./src/main/java/data/test.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" new AddCommand(\"deadline read book /by 2023-09-09\").execute(tasks, ui, storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" new AddCommand(\"event party /from 2023-09-01 /to 2023-09-02\").execute(tasks, ui, storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" assertEquals(2, tasks.total());","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"alientian":18}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" public void test() {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" Storage storage \u003d new Storage(\"./src/main/data/test.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" ArrayList\u003cTask\u003e list \u003d storage.load();","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" Task t \u003d list.get(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" assertEquals(\"E--1--party --2023-09-02--2023-09-03\", t.toFileString());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" } catch(IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"alientian":25}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"alientian":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":"-"},"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":"alientian"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"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":"alientian"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"alientian":2,"-":41}},{"path":"src/main/data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":1}},{"path":"src/main/java/duke/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":" * Adds a task to the task list","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"public class AddCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" /** Description of the task */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" private final String TASK_TO_ADD;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public AddCommand(String str) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" TASK_TO_ADD \u003d str;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" if (TASK_TO_ADD.startsWith(\"todo \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" if (TASK_TO_ADD.length() \u003c 6) throw new IncompleteInputException(\"todo\");","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" String des \u003d TASK_TO_ADD.substring(5);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" Todo todo \u003d new Todo(des);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" tasks.add(todo);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" ui.showTaskAdded(todo, tasks.total());","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" } else if (TASK_TO_ADD.startsWith(\"deadline \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":" String[] words \u003d TASK_TO_ADD.split(\"/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":" if (words.length !\u003d 2 || words[0].length() \u003c 10 || words[1].length() \u003c 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":" throw new IncompleteInputException(\"deadline\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"alientian"},"content":" String des \u003d words[0].substring(9);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"alientian"},"content":" String date \u003d words[1].substring(3);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"alientian"},"content":" LocalDate by \u003d LocalDate.parse(date);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"alientian"},"content":" Deadline dl \u003d new Deadline(des, by);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"alientian"},"content":" tasks.add(dl);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"alientian"},"content":" ui.showTaskAdded(dl, tasks.total());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"alientian"},"content":" } else if (TASK_TO_ADD.startsWith(\"event \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"alientian"},"content":" String[] words \u003d TASK_TO_ADD.split(\"/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"alientian"},"content":" if (words.length !\u003d 3 || words[0].length() \u003c 7 || words[1].length() \u003c 6 || words[2].length() \u003c 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"alientian"},"content":" throw new IncompleteInputException(\"deadline\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"alientian"},"content":" String des \u003d words[0].substring(6);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"alientian"},"content":" String fromDate \u003d words[1].substring(5, 15);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"alientian"},"content":" String toDate \u003d words[2].substring(3);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"alientian"},"content":" LocalDate from \u003d LocalDate.parse(fromDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"alientian"},"content":" LocalDate to \u003d LocalDate.parse(toDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"alientian"},"content":" Event event \u003d new Event(des, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"alientian"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"alientian"},"content":" ui.showTaskAdded(event, tasks.total());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"alientian"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"alientian"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"alientian"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"alientian"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"alientian"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"alientian"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":66}},{"path":"src/main/java/duke/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Represents an executable command.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" * Executes the command.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" * @param tasks tasks in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" * @param ui ui that interacts with users.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" * @param storage storage to save tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" * @throws Exception if there is an error.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws Exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" * Checks if command is exit command","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" * @return true if it is exit command","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":23}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":" * Represents a tasks with deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" + by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" public String toFileString(){","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":" return \"D--\" + super.toFileString() + \"--\" + by;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"alientian":29}},{"path":"src/main/java/duke/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Deletes a task from the task list","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class DeleteCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" /** Index of the task in task list */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" private final int INDEX;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" public DeleteCommand(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" INDEX \u003d i;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" Task t \u003d tasks.get(INDEX);","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" tasks.delete(INDEX);","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" ui.showDeleted(t, tasks.total());","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":26}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Entry point of the chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" * Initializes the application and starts the interaction with the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"public class Duke {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" * Runs the programme until termination","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"alientian"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"alientian"},"content":" ui.showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"alientian"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"alientian"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"alientian"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"alientian"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"alientian"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"alientian"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"alientian"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"alientian"},"content":" * Initializes duke and runs it.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"alientian"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"alientian"},"content":" new Duke(\"./src/main/data/tasks.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":50}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":" * Represents a task with starting date and end date.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"public class Event extends Task{","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" protected LocalDate from;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" protected LocalDate to;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" + \" (from: \" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" + \" to: \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" public String toFileString(){","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":" return \"E--\" + super.toFileString() + \"--\" + from + \"--\" + to;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"alientian":30}},{"path":"src/main/java/duke/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":" * Exits duke and saves task list to storage","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"public class ExitCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" public ExitCommand() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws IOException{","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" ui.showExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":22}},{"path":"src/main/java/duke/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Finds tasks by searching for a keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class FindCommand extends Command{","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":" private final String KEYWORD;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" public FindCommand(String word) {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" KEYWORD \u003d word;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" TaskList results \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" for (int i \u003d 0; i \u003c tasks.total(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" String description \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" if (description.contains(KEYWORD)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" results.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" ui.showMatchingTasks(results);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" ui.showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"alientian":30}},{"path":"src/main/java/duke/IncompleteInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Signals that given data does not fulfill some requirements.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class IncompleteInputException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" public IncompleteInputException(String type) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" super(\"☹ OOPS!!! The description of a \" + type + \" cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"alientian":11}},{"path":"src/main/java/duke/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Signals that given data does not match any command.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class InvalidInputException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" public InvalidInputException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"alientian":11}},{"path":"src/main/java/duke/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Lists all the tasks in task list","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class ListCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" public ListCommand() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" ui.showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" ui.showTaskList(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":21}},{"path":"src/main/java/duke/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Marks a task in task lis as done","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class MarkCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" /** Index of the task in task list */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" private final int INDEX;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" public MarkCommand(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" INDEX \u003d i;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" tasks.markTask(INDEX);","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" ui.showMarked(tasks.get(INDEX));","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":25}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Parses user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" * Parses user input into command for execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" * @param input full user input string.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" * @return the command based on the user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public static Command parse(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" String num \u003d input.substring(5);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" int i \u003d Integer.parseInt(num);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" return new MarkCommand(i - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" String num \u003d input.substring(7);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" int i \u003d Integer.parseInt(num);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" return new UnmarkCommand(i - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"alientian"},"content":" String num \u003d input.substring(7);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"alientian"},"content":" int i \u003d Integer.parseInt(num);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"alientian"},"content":" return new DeleteCommand(i - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"alientian"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"alientian"},"content":" String keyword \u003d input.substring(5);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"alientian"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"alientian"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"alientian"},"content":" return new AddCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":44}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" * Represents the file used to store tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" private File file;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" private String path;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" file \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" path \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" * Loads data from the file in this storage to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" * @return the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":" * @throws IOException if there were errors reading and/or converting data from file.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":" public ArrayList\u003cTask\u003e load() throws IOException{","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"alientian"},"content":" Scanner fScanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"alientian"},"content":" ArrayList\u003cTask\u003e arrTask \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"alientian"},"content":" while (fScanner.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"alientian"},"content":" String s \u003d fScanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"alientian"},"content":" String[] arr \u003d s.split(\"--\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"alientian"},"content":" if (arr[0].equals(\"T\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"alientian"},"content":" Todo t \u003d new Todo(arr[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"alientian"},"content":" if (arr[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"alientian"},"content":" t.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"alientian"},"content":" arrTask.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"alientian"},"content":" } else if (arr[0].equals(\"D\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"alientian"},"content":" Deadline dl \u003d new Deadline(arr[2], LocalDate.parse(arr[3]));","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"alientian"},"content":" if (arr[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"alientian"},"content":" dl.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"alientian"},"content":" arrTask.add(dl);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"alientian"},"content":" } else if (arr[0].equals(\"E\")){","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"alientian"},"content":" Event e \u003d new Event(arr[2], LocalDate.parse(arr[3]), LocalDate.parse(arr[4]));","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"alientian"},"content":" if (arr[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"alientian"},"content":" e.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"alientian"},"content":" arrTask.add(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"alientian"},"content":" fScanner.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"alientian"},"content":" return arrTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"alientian"},"content":" * Saves the data in task list to the file in storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"alientian"},"content":" * @param list the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"alientian"},"content":" * @throws IOException if there were errors converting and/or storing data to file.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"alientian"},"content":" public void save(TaskList list) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"alientian"},"content":" if (file.delete()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"alientian"},"content":" file \u003d new File(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"alientian"},"content":" for (int i \u003d 1; i \u003c\u003d list.total(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"alientian"},"content":" Task t \u003d list.get(i - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"alientian"},"content":" writeToFile(path, t.toFileString());","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"alientian"},"content":" * Writes a line of text in the file in storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"alientian"},"content":" * @param pathname path name of the file.","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"alientian"},"content":" * @param textToAdd line of text to write into file.","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"alientian"},"content":" * @throws IOException if there were errors reading and/or writing to file.","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"alientian"},"content":" private void writeToFile(String pathname, String textToAdd) throws IOException{","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"alientian"},"content":" FileWriter fw \u003d new FileWriter(pathname, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"alientian"},"content":" fw.write(textToAdd + System.lineSeparator());","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"alientian"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":90}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Represents a tasks in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" * Returns X if task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" * @return X if task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"alientian"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"alientian"},"content":" return this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"alientian"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"alientian"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"alientian"},"content":" * Generates the string to represent the task in storage","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"alientian"},"content":" * @return string that represent the task","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"alientian"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"alientian"},"content":" if(isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"alientian"},"content":" return \"1--\" + this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"alientian"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"alientian"},"content":" return \"0--\" + this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"alientian":54}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":" * Represents the list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" private ArrayList\u003cTask\u003e lst;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" public TaskList(ArrayList\u003cTask\u003e list){","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" lst \u003d list;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" lst \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" * @param task task added to list.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" lst.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":" * @param index index of task in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"alientian"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"alientian"},"content":" Task t \u003d lst.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"alientian"},"content":" lst.remove(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"alientian"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"alientian"},"content":" * @param index index of task in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"alientian"},"content":" public void markTask(int index){","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"alientian"},"content":" lst.get(index).markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"alientian"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"alientian"},"content":" * @param index index of task in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"alientian"},"content":" public void unmarkTask(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"alientian"},"content":" lst.get(index).markAsNotDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"alientian"},"content":" * Gets a task from the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"alientian"},"content":" * @param index index of task in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"alientian"},"content":" * @return task of that index.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"alientian"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"alientian"},"content":" return lst.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"alientian"},"content":" * Gets the total number of tasks in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"alientian"},"content":" * @return the total number of tasks in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"alientian"},"content":" public int total() {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"alientian"},"content":" return lst.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":69}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Represents a task with description only.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class Todo extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" public Todo(String description){","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" return \"T--\" + super.toFileString();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"alientian":21}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":" * Text UI of the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" /** Scanner to read input */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" public Ui() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" public void showLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" System.out.println(\"____________________________________________________________\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" * Generates and prints the welcome message upon the start of the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":" System.out.println(","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"alientian"},"content":" \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"alientian"},"content":" + \"Hello! I\u0027m ET\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"alientian"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"alientian"},"content":" + \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"alientian"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"alientian"},"content":" * Generates and prints the exit message upon the termination of the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"alientian"},"content":" public void showExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"alientian"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"alientian"},"content":" + \"Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"alientian"},"content":" + \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"alientian"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"alientian"},"content":" * Reads the next command from user.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"alientian"},"content":" * @return description of the command","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"alientian"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"alientian"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"alientian"},"content":" * Shows the marked task.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"alientian"},"content":" * @param task task that was marked.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"alientian"},"content":" public void showMarked(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"alientian"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"alientian"},"content":" + \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"alientian"},"content":" + task + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"alientian"},"content":" + \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"alientian"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"alientian"},"content":" * Shows the unmarked task","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"alientian"},"content":" * @param task task that was marked.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"alientian"},"content":" public void showUnmarked(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"alientian"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"alientian"},"content":" + \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"alientian"},"content":" + task + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"alientian"},"content":" + \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"alientian"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"alientian"},"content":" * Shows task added to task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"alientian"},"content":" * @param task task added to task list","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"alientian"},"content":" * @param num number of task in task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"alientian"},"content":" public void showTaskAdded(Task task, int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"alientian"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"alientian"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"alientian"},"content":" + task + \"\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"alientian"},"content":" + \"Now you have \" + num + \" tasks in the list.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"alientian"},"content":" + \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"alientian"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"alientian"},"content":" * Shows the task deleted from task list","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"alientian"},"content":" * @param task task deleted from task list","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"alientian"},"content":" * @param num number of task in task list","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"alientian"},"content":" public void showDeleted(Task task, int num) {","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"alientian"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"alientian"},"content":" + \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"alientian"},"content":" + task + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"alientian"},"content":" + \"Now you have \" + num + \" tasks in the list.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"alientian"},"content":" + \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"alientian"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"alientian"},"content":" * Shows the list of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"alientian"},"content":" * @param tasks list of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"alientian"},"content":" public void showTaskList(TaskList tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"alientian"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"alientian"},"content":" for (int i \u003d 1; i \u003c\u003d tasks.total(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"alientian"},"content":" Task t \u003d tasks.get(i - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"alientian"},"content":" System.out.println(i + \". \" + t.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"alientian"},"content":" * Shows the list of tasks that match the keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"alientian"},"content":" * @param tasks tasks that match the keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"alientian"},"content":" public void showMatchingTasks(TaskList tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"alientian"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"alientian"},"content":" + \"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"alientian"},"content":" for (int i \u003d 0; i \u003c tasks.total(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"alientian"},"content":" System.out.println(tasks.get(i).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"alientian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"alientian"},"content":" * Shows the error message of an exception thrown.","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"alientian"},"content":" * @param errorMsg error message of the exception thrown.","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"alientian"},"content":" public void showError(String errorMsg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"alientian"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"alientian"},"content":" + errorMsg + \"\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"alientian"},"content":" + \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"alientian"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":139}},{"path":"src/main/java/duke/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":" * Marks a task in task list as not done","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"public class UnmarkCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" /** Index of the task in task list */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" private final int INDEX;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" public UnmarkCommand(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" INDEX \u003d i;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" tasks.unmarkTask(INDEX);","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" ui.showUnmarked(tasks.get(INDEX));","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"alientian":25}},{"path":"src/test/java/duke/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":" public void test(){","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" Storage storage \u003d new Storage(\"./src/main/java/data/test.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" new AddCommand(\"deadline read book /by 2023-09-09\").execute(tasks, ui, storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" new AddCommand(\"event party /from 2023-09-01 /to 2023-09-02\").execute(tasks, ui, storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" assertEquals(2, tasks.total());","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"alientian":18}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"alientian"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"alientian"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"alientian"},"content":" public void test() {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"alientian"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"alientian"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"alientian"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"alientian"},"content":" Storage storage \u003d new Storage(\"./src/main/data/test.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"alientian"},"content":" ArrayList\u003cTask\u003e list \u003d storage.load();","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"alientian"},"content":" Task t \u003d list.get(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"alientian"},"content":" assertEquals(\"E--1--party --2023-09-02--2023-09-03\", t.toFileString());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"alientian"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"alientian"},"content":" } catch(IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"alientian"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"alientian"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"alientian"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"alientian":25}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"alientian"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"alientian"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"alientian"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"alientian"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"alientian"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"alientian"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"alientian"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"alientian"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"alientian":8}}] diff --git a/alientian_ip_master/commits.json b/alientian_ip_master/commits.json index e35e4f64..f7244400 100644 --- a/alientian_ip_master/commits.json +++ b/alientian_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"alientian":[{"date":"2023-08-23","commitResults":[{"hash":"0d06b90736a8d367ac5ea8470c20ce6bcffe03e8","isMergeCommit":false,"messageTitle":"Rename, greet, exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"7bba4e695e6e35fedb415652a8e3071f8292496c","isMergeCommit":false,"messageTitle":"Rename, greet, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"ce4fc3b0c5946ce48b2f6b3c4b5c3e09bbbffd48","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"f9d62ddd7e93a154b36b52642ca13d019b1437a7","isMergeCommit":false,"messageTitle":"echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"07a0894dd86753c3ed7b10fafc6a17f4459954d7","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":5}}},{"hash":"206b60fb51d741e297c16debf73b0447aac72d7b","isMergeCommit":false,"messageTitle":"add Mark as done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":19}}}]},{"date":"2023-08-24","commitResults":[{"hash":"2305b6a8e20d8ad997afdcd30fb45e270f352fe2","isMergeCommit":false,"messageTitle":"Add toString to Task.java","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":4}}},{"hash":"ea58aaa4767bd3a039ef449e9e0054d46af028a2","isMergeCommit":false,"messageTitle":"Add ToDos, Events, Deadlines files","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":10}}},{"hash":"2e9ecc0dc348fff6786db376fb3143a4d7dd57d0","isMergeCommit":false,"messageTitle":"Add Automated Text UI Test Case","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"8c5d31ce6a3cb5dd57c0637d900a714a7cf22f68","isMergeCommit":false,"messageTitle":"Add handle errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":26}}},{"hash":"33741ba9d211d693c8ad656b2ad0e1f9333aa5a4","isMergeCommit":false,"messageTitle":"Add Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":46}}}]},{"date":"2023-08-31","commitResults":[{"hash":"1e427acc29230b933e3e0f450deaf1d271d6efb2","isMergeCommit":false,"messageTitle":"Add Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":9}}},{"hash":"ee1691990b7a1481f113c372589fb256a8d67c38","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"1b0cf49e96f93b0476ef98c6418adba212d8ec98","isMergeCommit":false,"messageTitle":"Add Dates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":16}}},{"hash":"93b5481d29fd2b55f8ad0d4767bb33cef26ae739","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"a40eb544417703d0ab4b1a2512e393a1a8cd2973","isMergeCommit":false,"messageTitle":"Add data directory","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"147d2e9c9a92c8544faa4748134f47ed300fcd67","isMergeCommit":false,"messageTitle":"Add Ui, Storage, Parser, TaskList, Command class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":415,"deletions":34}}},{"hash":"b641c6bb7059e7400e6b023c82607e0dd8dd4cb6","isMergeCommit":false,"messageTitle":"Add Ui, Storage, Parser, TaskList, Command class","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":415,"deletions":34}}},{"hash":"128188e317badce3492a8c30fefa0c2d4cf28e65","isMergeCommit":false,"messageTitle":"Move files to duke package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":230}}},{"hash":"d58845cba6b6df9bcef7f48e1198b28cdf9b43cd","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c643abf1a12bf476302d25d59fbbfe19e58022ce","isMergeCommit":false,"messageTitle":"Run Duke using gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"524bf0e7cd06d437d3994033d3e36349b98d9bc2","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"b208d124ab24357d9e6ef2a543271629f0034b2a","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":205,"deletions":27}}},{"hash":"ec2f8efd1dc00d47b007f8e3d3be3ed59f81c41e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"alientian":{"java":780,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":2,"txt":9}},"authorContributionVariance":{"alientian":101150.98},"authorDisplayNameMap":{"alientian":"CS2103T-T17-2 LIM ..TIAN"}} +{"authorDailyContributionsMap":{"alientian":[{"date":"2023-08-23","commitResults":[{"hash":"0d06b90736a8d367ac5ea8470c20ce6bcffe03e8","isMergeCommit":false,"messageTitle":"Rename, greet, exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"7bba4e695e6e35fedb415652a8e3071f8292496c","isMergeCommit":false,"messageTitle":"Rename, greet, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"ce4fc3b0c5946ce48b2f6b3c4b5c3e09bbbffd48","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"f9d62ddd7e93a154b36b52642ca13d019b1437a7","isMergeCommit":false,"messageTitle":"echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"07a0894dd86753c3ed7b10fafc6a17f4459954d7","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":5}}},{"hash":"206b60fb51d741e297c16debf73b0447aac72d7b","isMergeCommit":false,"messageTitle":"add Mark as done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":19}}}]},{"date":"2023-08-24","commitResults":[{"hash":"2305b6a8e20d8ad997afdcd30fb45e270f352fe2","isMergeCommit":false,"messageTitle":"Add toString to Task.java","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":4}}},{"hash":"ea58aaa4767bd3a039ef449e9e0054d46af028a2","isMergeCommit":false,"messageTitle":"Add ToDos, Events, Deadlines files","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":10}}},{"hash":"2e9ecc0dc348fff6786db376fb3143a4d7dd57d0","isMergeCommit":false,"messageTitle":"Add Automated Text UI Test Case","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"8c5d31ce6a3cb5dd57c0637d900a714a7cf22f68","isMergeCommit":false,"messageTitle":"Add handle errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":26}}},{"hash":"33741ba9d211d693c8ad656b2ad0e1f9333aa5a4","isMergeCommit":false,"messageTitle":"Add Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":46}}}]},{"date":"2023-08-31","commitResults":[{"hash":"1e427acc29230b933e3e0f450deaf1d271d6efb2","isMergeCommit":false,"messageTitle":"Add Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":9}}},{"hash":"ee1691990b7a1481f113c372589fb256a8d67c38","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"1b0cf49e96f93b0476ef98c6418adba212d8ec98","isMergeCommit":false,"messageTitle":"Add Dates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":16}}},{"hash":"93b5481d29fd2b55f8ad0d4767bb33cef26ae739","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"a40eb544417703d0ab4b1a2512e393a1a8cd2973","isMergeCommit":false,"messageTitle":"Add data directory","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"147d2e9c9a92c8544faa4748134f47ed300fcd67","isMergeCommit":false,"messageTitle":"Add Ui, Storage, Parser, TaskList, Command class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":415,"deletions":34}}},{"hash":"b641c6bb7059e7400e6b023c82607e0dd8dd4cb6","isMergeCommit":false,"messageTitle":"Add Ui, Storage, Parser, TaskList, Command class","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":415,"deletions":34}}},{"hash":"128188e317badce3492a8c30fefa0c2d4cf28e65","isMergeCommit":false,"messageTitle":"Move files to duke package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":230}}},{"hash":"d58845cba6b6df9bcef7f48e1198b28cdf9b43cd","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c643abf1a12bf476302d25d59fbbfe19e58022ce","isMergeCommit":false,"messageTitle":"Run Duke using gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"524bf0e7cd06d437d3994033d3e36349b98d9bc2","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"b208d124ab24357d9e6ef2a543271629f0034b2a","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":205,"deletions":27}}},{"hash":"9ac54565351fda01ee36040a19c37fde1e1bfb18","isMergeCommit":false,"messageTitle":"Update code to comply coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":23}}},{"hash":"be36aad1b5a36b710f53dfe0b9086a8d4e2a435b","isMergeCommit":false,"messageTitle":"Add Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":0}}},{"hash":"ec2f8efd1dc00d47b007f8e3d3be3ed59f81c41e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"29aa9ad587280abf32992fc28a25b1c7da808a38","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"16f6e990d269e4960c03ddce7d692d71da1dfe1e","isMergeCommit":false,"messageTitle":"Add JavaDoc for Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"c7d0413fd320c037d86dbc5912edf1d3d4d530fc","isMergeCommit":true,"messageTitle":"branch-Level-9: Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"alientian":{"java":829,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":2,"txt":9}},"authorContributionVariance":{"alientian":102868.91},"authorDisplayNameMap":{"alientian":"CS2103T-T17-2 LIM ..TIAN"}} diff --git a/andrechuakj_ip_master/authorship.json b/andrechuakj_ip_master/authorship.json index 666976f7..d061d0d2 100644 --- a/andrechuakj_ip_master/authorship.json +++ b/andrechuakj_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate by;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":" public Deadline(String description, String by) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" this.by \u003d parseDate(by);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" throw e;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" public String toData() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" String done \u003d String.valueOf(this.isDone ? 1 : 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" return \"D | \" + done + \" | \" + this.description + \" | \" + this.by;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" public static Task dataToTask(String taskData) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" int firstSplitIndex \u003d taskData.indexOf(\"|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" int secondSplitIndex \u003d taskData.indexOf(\"|\", firstSplitIndex + 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" boolean isDone \u003d taskData.substring(0, firstSplitIndex - 1).equals(\"1\");","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" String desc \u003d taskData.substring(firstSplitIndex + 2, secondSplitIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" String by \u003d taskData.substring(secondSplitIndex + 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" Deadline newDeadline \u003d new Deadline(desc, by);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" newDeadline.isDone \u003d isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" return newDeadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":38}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"import java.lang.reflect.Array;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" private static boolean createFile(File f) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" return f.createNewFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" System.out.println(\"An error occurred.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" private static void makeDataDir() {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" File dataDirectory \u003d new File(\"./data/\");","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" if (!dataDirectory.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" dataDirectory.mkdirs();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" private static void appendToFile(String filePath, Task taskToAdd) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" fw.write(taskToAdd.toData());","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" fw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" private static ArrayList\u003cTask\u003e loadData(File file, ArrayList\u003cTask\u003e list) throws DukeException{","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" Scanner s \u003d new Scanner(file);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" while (s.hasNextLine()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" String taskType \u003d line.substring(0, 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" list.add(Todo.dataToTask(line.substring(4)));","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" list.add(Event.dataToTask(line.substring(4)));","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" list.add(Deadline.dataToTask(line.substring(4)));","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" return list;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" private static void writeAllToFile(ArrayList\u003cTask\u003e list, File f) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" FileWriter fw \u003d new FileWriter(f);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" fw.write(list.get(i).toData());","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" fw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" public static void main(String[] args) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":" String line \u003d \"──────────────────────────────────────────────────────────────────────────\";","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" String logo \u003d \" _____ __ _____ _ _ _ _ ___\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":" + \"| _\\\\ \\\\ / / / __ \\\\ | | | | | | ||_ |\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":" + \"| | \\\\ V /___ _ _ _ __ | / \\\\/ |__ __ _| |_| |__ ___ | |_ | |\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":" + \"| | \\\\ // _ \\\\| | | | \u0027__| | | | \u0027_ \\\\ / _` | __| \u0027_ \\\\ / _ \\\\| __|| |\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":" + \"| | | | (_) | |_| | | | \\\\__/\\\\ | | | (_| | |_| |_) | (_) | |_ | |\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":" + \"| |_ \\\\_/\\\\___/ \\\\__,_|_| \\\\____/_| |_|\\\\__,_|\\\\__|_.__/ \\\\___/ \\\\__|| |\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":" + \"|___| |___|\\n\";","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":" String greet \u003d line","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":" + \"Hello! I\u0027m\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"andrechuakj"},"content":" + logo","lastModifiedDate":"2023-08-23"},{"lineNumber":86,"author":{"gitId":"andrechuakj"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"andrechuakj"},"content":" + line","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"andrechuakj"},"content":" System.out.println(greet);","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"andrechuakj"},"content":" Scanner input \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"andrechuakj"},"content":" String filepath \u003d \"data/duke.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"andrechuakj"},"content":" makeDataDir();","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"andrechuakj"},"content":" File f \u003d new File(filepath);","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"andrechuakj"},"content":" if (!createFile(f)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"andrechuakj"},"content":" loadData(f, list);","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"andrechuakj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"andrechuakj"},"content":" throw e;","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"andrechuakj"},"content":" boolean end \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"andrechuakj"},"content":" while (!end) {","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"andrechuakj"},"content":" String userInput \u003d input.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":108,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"andrechuakj"},"content":" int spaceIndex \u003d userInput.indexOf(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"andrechuakj"},"content":" if (spaceIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"andrechuakj"},"content":" switch (userInput) {","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"andrechuakj"},"content":" case \"list\":","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"andrechuakj"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"andrechuakj"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"andrechuakj"},"content":" System.out.println(Integer.toString(i + 1)","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"andrechuakj"},"content":" + \". \"","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"andrechuakj"},"content":" + list.get(i));","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"andrechuakj"},"content":" System.out.println(line + \"\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"andrechuakj"},"content":" case \"bye\":","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"andrechuakj"},"content":" end \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"andrechuakj"},"content":" case \"todo\":","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"andrechuakj"},"content":" case \"event\":","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"andrechuakj"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"andrechuakj"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"andrechuakj"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"andrechuakj"},"content":" switch (userInput.substring(0, spaceIndex)) {","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"andrechuakj"},"content":" case \"todo\":","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"andrechuakj"},"content":" String todoDesc \u003d userInput.substring(spaceIndex + 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"andrechuakj"},"content":" if (todoDesc.isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":138,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":139,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":140,"author":{"gitId":"andrechuakj"},"content":" Task newTodo \u003d new Todo(todoDesc);","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"andrechuakj"},"content":" list.add(newTodo);","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"andrechuakj"},"content":" appendToFile(filepath, newTodo);","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! There is something wrong with the description.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"andrechuakj"},"content":" System.out.println(line","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"andrechuakj"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":150,"author":{"gitId":"andrechuakj"},"content":" + list.get(list.size() - 1)","lastModifiedDate":"2023-08-24"},{"lineNumber":151,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":152,"author":{"gitId":"andrechuakj"},"content":" + \"Now you have \" + list.size() + \" tasks in the list.\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"andrechuakj"},"content":" + line","lastModifiedDate":"2023-08-24"},{"lineNumber":154,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":155,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":156,"author":{"gitId":"andrechuakj"},"content":" case \"event\":","lastModifiedDate":"2023-08-24"},{"lineNumber":157,"author":{"gitId":"andrechuakj"},"content":" int fromIndex \u003d userInput.indexOf(\"/from\");","lastModifiedDate":"2023-08-24"},{"lineNumber":158,"author":{"gitId":"andrechuakj"},"content":" int toIndex \u003d userInput.indexOf(\"/to\");","lastModifiedDate":"2023-08-24"},{"lineNumber":159,"author":{"gitId":"andrechuakj"},"content":" String eventDesc \u003d userInput.substring(spaceIndex + 1, fromIndex - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"andrechuakj"},"content":" if (eventDesc.isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":162,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":163,"author":{"gitId":"andrechuakj"},"content":" String from \u003d userInput.substring(fromIndex + 6, toIndex - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":164,"author":{"gitId":"andrechuakj"},"content":" String to \u003d userInput.substring(toIndex + 4);","lastModifiedDate":"2023-08-24"},{"lineNumber":165,"author":{"gitId":"andrechuakj"},"content":" Task newEvent \u003d new Event(eventDesc, from, to);","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"andrechuakj"},"content":" list.add(newEvent);","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"andrechuakj"},"content":" appendToFile(filepath, newEvent);","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! There is something wrong with the description.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"andrechuakj"},"content":" System.out.println(line","lastModifiedDate":"2023-08-24"},{"lineNumber":173,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":174,"author":{"gitId":"andrechuakj"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":175,"author":{"gitId":"andrechuakj"},"content":" + list.get(list.size() - 1)","lastModifiedDate":"2023-08-24"},{"lineNumber":176,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":177,"author":{"gitId":"andrechuakj"},"content":" + \"Now you have \" + list.size() + \" tasks in the list.\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":178,"author":{"gitId":"andrechuakj"},"content":" + line","lastModifiedDate":"2023-08-24"},{"lineNumber":179,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":180,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":181,"author":{"gitId":"andrechuakj"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-24"},{"lineNumber":182,"author":{"gitId":"andrechuakj"},"content":" int byIndex \u003d userInput.indexOf(\"/by\");","lastModifiedDate":"2023-08-24"},{"lineNumber":183,"author":{"gitId":"andrechuakj"},"content":" String deadlineDesc \u003d userInput.substring(spaceIndex + 1, byIndex - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":184,"author":{"gitId":"andrechuakj"},"content":" if (deadlineDesc.isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":185,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":186,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":187,"author":{"gitId":"andrechuakj"},"content":" String by \u003d userInput.substring(byIndex + 4);","lastModifiedDate":"2023-08-24"},{"lineNumber":188,"author":{"gitId":"andrechuakj"},"content":" Task newDeadline \u003d new Deadline(deadlineDesc, by);","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"andrechuakj"},"content":" list.add(newDeadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":190,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":191,"author":{"gitId":"andrechuakj"},"content":" appendToFile(filepath, newDeadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":192,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":193,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! There is something wrong with the description.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":194,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":195,"author":{"gitId":"andrechuakj"},"content":" System.out.println(line","lastModifiedDate":"2023-08-24"},{"lineNumber":196,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":197,"author":{"gitId":"andrechuakj"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":198,"author":{"gitId":"andrechuakj"},"content":" + list.get(list.size() - 1)","lastModifiedDate":"2023-08-24"},{"lineNumber":199,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":200,"author":{"gitId":"andrechuakj"},"content":" + \"Now you have \" + list.size() + \" tasks in the list.\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":201,"author":{"gitId":"andrechuakj"},"content":" + line","lastModifiedDate":"2023-08-24"},{"lineNumber":202,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":203,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":204,"author":{"gitId":"andrechuakj"},"content":" case \"mark\":","lastModifiedDate":"2023-08-24"},{"lineNumber":205,"author":{"gitId":"andrechuakj"},"content":" int i \u003d Integer.parseInt(userInput.split(\" \", 2)[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":206,"author":{"gitId":"andrechuakj"},"content":" list.get(i - 1).markAsDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":207,"author":{"gitId":"andrechuakj"},"content":" writeAllToFile(list, f);","lastModifiedDate":"2023-09-03"},{"lineNumber":208,"author":{"gitId":"andrechuakj"},"content":" System.out.println(line","lastModifiedDate":"2023-08-24"},{"lineNumber":209,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":210,"author":{"gitId":"andrechuakj"},"content":" + \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":211,"author":{"gitId":"andrechuakj"},"content":" + list.get(i - 1)","lastModifiedDate":"2023-08-24"},{"lineNumber":212,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":213,"author":{"gitId":"andrechuakj"},"content":" + line","lastModifiedDate":"2023-08-24"},{"lineNumber":214,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":215,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":216,"author":{"gitId":"andrechuakj"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-24"},{"lineNumber":217,"author":{"gitId":"andrechuakj"},"content":" int j \u003d Integer.parseInt(userInput.split(\" \", 2)[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":218,"author":{"gitId":"andrechuakj"},"content":" list.get(j - 1).markAsNotDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":219,"author":{"gitId":"andrechuakj"},"content":" writeAllToFile(list, f);","lastModifiedDate":"2023-09-03"},{"lineNumber":220,"author":{"gitId":"andrechuakj"},"content":" System.out.println(line + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":221,"author":{"gitId":"andrechuakj"},"content":" + \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":222,"author":{"gitId":"andrechuakj"},"content":" + list.get(j - 1)","lastModifiedDate":"2023-08-24"},{"lineNumber":223,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":224,"author":{"gitId":"andrechuakj"},"content":" + line);","lastModifiedDate":"2023-08-24"},{"lineNumber":225,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":226,"author":{"gitId":"andrechuakj"},"content":" case \"delete\":","lastModifiedDate":"2023-08-24"},{"lineNumber":227,"author":{"gitId":"andrechuakj"},"content":" int k \u003d Integer.parseInt(userInput.split(\" \", 2)[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":228,"author":{"gitId":"andrechuakj"},"content":" if (k \u003e list.size() || k \u003c 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":229,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"Integer out of list range\");","lastModifiedDate":"2023-09-03"},{"lineNumber":230,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":231,"author":{"gitId":"andrechuakj"},"content":" Task deletedTask \u003d list.get(k - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":232,"author":{"gitId":"andrechuakj"},"content":" list.remove(k - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":233,"author":{"gitId":"andrechuakj"},"content":" writeAllToFile(list, f);","lastModifiedDate":"2023-09-03"},{"lineNumber":234,"author":{"gitId":"andrechuakj"},"content":" System.out.println(line + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":235,"author":{"gitId":"andrechuakj"},"content":" + \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":236,"author":{"gitId":"andrechuakj"},"content":" + deletedTask","lastModifiedDate":"2023-08-24"},{"lineNumber":237,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":238,"author":{"gitId":"andrechuakj"},"content":" + \"Now you have \" + list.size() + \" tasks in the list.\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":239,"author":{"gitId":"andrechuakj"},"content":" + line","lastModifiedDate":"2023-08-24"},{"lineNumber":240,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":241,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":242,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":243,"author":{"gitId":"andrechuakj"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":244,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":245,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":246,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":247,"author":{"gitId":"andrechuakj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":248,"author":{"gitId":"andrechuakj"},"content":" System.out.println(line + \"\\n\" + e.getMessage() + \"\\n\" + line + \"\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":249,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":250,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":251,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":252,"author":{"gitId":"andrechuakj"},"content":" String sendOff \u003d line","lastModifiedDate":"2023-08-23"},{"lineNumber":253,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":254,"author":{"gitId":"andrechuakj"},"content":" + \"Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":255,"author":{"gitId":"andrechuakj"},"content":" + line","lastModifiedDate":"2023-08-24"},{"lineNumber":256,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":257,"author":{"gitId":"andrechuakj"},"content":" System.out.println(sendOff);","lastModifiedDate":"2023-08-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":259,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"andrechuakj":256,"-":3}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":6}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate from;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate to;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" public Event(String description, String from, String to) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" this.from \u003d parseDate(from);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" this.to \u003d parseDate(to);","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" throw e;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" public String toData() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" String done \u003d String.valueOf(this.isDone ? 1 : 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" return \"E | \" + done + \" | \" + this.description + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" public static Task dataToTask(String taskData) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" int firstSplitIndex \u003d taskData.indexOf(\"|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" int secondSplitIndex \u003d taskData.indexOf(\"|\", firstSplitIndex + 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" int thirdSplitIndex \u003d taskData.indexOf(\"|\", secondSplitIndex + 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" boolean isDone \u003d taskData.substring(0, firstSplitIndex - 1).equals(\"1\");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" String desc \u003d taskData.substring(firstSplitIndex + 2, secondSplitIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" String from \u003d taskData.substring(secondSplitIndex + 2, thirdSplitIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" String to \u003d taskData.substring(thirdSplitIndex + 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" Event newEvent \u003d new Event(desc, from, to);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" newEvent.isDone \u003d isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" return newEvent;","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" + \" (from: \" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" + \" to: \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":44}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" * Constructor for a Task","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" * @param description","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" * Retrieves status icon of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" * @return X if done, \" \" if not done","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" * Marks task as done","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" * Marks task as not done","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" * Returns the data representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" public abstract String toData();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate parseDate(String date) throws DukeException{","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" LocalDate localDate \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" localDate \u003d LocalDate.parse(date);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"Incorrect date format. Please enter date in yyyy-mm-dd format\");","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" return localDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" * Returns string representation of task","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" * @return String representation of task","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":68}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":" public String toData() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" String done \u003d String.valueOf(this.isDone ? 1 : 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" return \"T | \" + done + \" | \" + this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" public static Task dataToTask(String taskData) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" int firstSplitIndex \u003d taskData.indexOf(\"|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" boolean isDone \u003d taskData.substring(0, firstSplitIndex - 1).equals(\"1\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" String desc \u003d taskData.substring(firstSplitIndex + 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" Todo newTodo \u003d new Todo(desc);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" newTodo.isDone \u003d isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" return newTodo;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":9}}] +[{"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":"andrechuakj"},"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":"-"},"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":"andrechuakj"},"content":" mainClass.set(\"duke.Duke\")","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":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"andrechuakj":2,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import java.lang.reflect.Array;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" private Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" private Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" public Duke(String filePath) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" this.tasks \u003d storage.loadIntoList(new TaskList());","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" public void run() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" this.ui.greet();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" ui.printException(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" this.ui.sendOff();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" public static void main(String[] args) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"andrechuakj":44,"-":3}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":7}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.command.DeleteComand;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"public class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" public static Command parse(String strCommand) throws DukeException{","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" int firstSpaceIndex \u003d strCommand.indexOf(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" Command command \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" String commandType \u003d firstSpaceIndex !\u003d -1","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" ? strCommand.substring(0, firstSpaceIndex)","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" : strCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e commandDetailList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" case \"list\":","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(strCommand);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" command \u003d new ListCommand(commandDetailList);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" case \"bye\":","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(strCommand);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" command \u003d new ByeCommand(commandDetailList);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" case \"todo\":","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c 6) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" String todoDesc \u003d strCommand.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(todoDesc);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" command \u003d new AddCommand(commandDetailList, \"T\");","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" case \"event\":","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" int fromIndex \u003d strCommand.indexOf(\"/from\");","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" int toIndex \u003d strCommand.indexOf(\"/to\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || fromIndex \u003d\u003d -1 || toIndex \u003d\u003d -1 || toIndex \u003c fromIndex) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The format of the event command is invalid.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" + \" event coding /from 2023-01-01 /to 2023-12-31\");","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" String eventDesc \u003d strCommand.substring(firstSpaceIndex + 1, fromIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" String from \u003d strCommand.substring(fromIndex + 6, toIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" String to \u003d strCommand.substring(toIndex + 4);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" if (eventDesc.isBlank() || from.isBlank() || to.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The format of the event command is invalid.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" + \" event coding /from 2023-01-01 /to 2023-12-31\");","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(eventDesc);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(from);","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(to);","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" command \u003d new AddCommand(commandDetailList, \"E\");","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" int byIndex \u003d strCommand.indexOf(\"/by\");","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" if (byIndex \u003d\u003d -1 || firstSpaceIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The format of the deadline command is invalid.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" + \" deadline coding /by 2023-09-04\");","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" String deadlineDesc \u003d strCommand.substring(firstSpaceIndex + 1, byIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":" String by \u003d strCommand.substring(byIndex + 4);","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" if (deadlineDesc.isBlank() || by.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The format of the deadline command is invalid.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":" + \" deadline coding /by 2023-09-04\");","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(deadlineDesc);","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(by);","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":" command \u003d new AddCommand(commandDetailList, \"D\");","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":" case \"mark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c 6) {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The task number to mark cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"andrechuakj"},"content":" String taskToMark \u003d strCommand.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"andrechuakj"},"content":" if (taskToMark.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The task number to mark cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(taskToMark);","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"andrechuakj"},"content":" command \u003d new MarkCommand(commandDetailList);","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"andrechuakj"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c 8) {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"andrechuakj"},"content":" String taskToUnmark \u003d strCommand.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"andrechuakj"},"content":" if (taskToUnmark.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(taskToUnmark);","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"andrechuakj"},"content":" command \u003d new UnmarkCommand(commandDetailList);","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"andrechuakj"},"content":" case \"delete\":","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c 8) {","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The task number to delete cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"andrechuakj"},"content":" String taskToDelete \u003d strCommand.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"andrechuakj"},"content":" if (taskToDelete.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The task number to delete cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(taskToDelete);","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"andrechuakj"},"content":" command \u003d new DeleteComand(commandDetailList);","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"andrechuakj"},"content":" return command;","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"andrechuakj"},"content":" public static Task dataToTask(String data) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"andrechuakj"},"content":" String taskType \u003d data.substring(0, 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"andrechuakj"},"content":" String taskData \u003d data.substring(4);","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"andrechuakj"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"andrechuakj"},"content":" int firstSplitIndex \u003d -1;","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"andrechuakj"},"content":" int secondSplitIndex \u003d -1;","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"andrechuakj"},"content":" int thirdSplitIndex \u003d -1;","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"andrechuakj"},"content":" String desc \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"andrechuakj"},"content":" boolean isDone \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"andrechuakj"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"andrechuakj"},"content":" case \"T\":","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"andrechuakj"},"content":" firstSplitIndex \u003d taskData.indexOf(\"|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"andrechuakj"},"content":" isDone \u003d taskData.substring(0, firstSplitIndex - 1).equals(\"1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"andrechuakj"},"content":" desc \u003d taskData.substring(firstSplitIndex + 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"andrechuakj"},"content":" task \u003d new Todo(desc);","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"andrechuakj"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"andrechuakj"},"content":" task.markDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"andrechuakj"},"content":" case \"D\":","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"andrechuakj"},"content":" firstSplitIndex \u003d taskData.indexOf(\"|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"andrechuakj"},"content":" secondSplitIndex \u003d taskData.indexOf(\"|\", firstSplitIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"andrechuakj"},"content":" isDone \u003d taskData.substring(0, firstSplitIndex - 1).equals(\"1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"andrechuakj"},"content":" desc \u003d taskData.substring(firstSplitIndex + 2, secondSplitIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"andrechuakj"},"content":" String by \u003d taskData.substring(secondSplitIndex + 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"andrechuakj"},"content":" task \u003d new Deadline(desc, by);","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"andrechuakj"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"andrechuakj"},"content":" task.markDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"andrechuakj"},"content":" case \"E\":","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"andrechuakj"},"content":" firstSplitIndex \u003d taskData.indexOf(\"|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"andrechuakj"},"content":" secondSplitIndex \u003d taskData.indexOf(\"|\", firstSplitIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"andrechuakj"},"content":" thirdSplitIndex \u003d taskData.indexOf(\"|\", secondSplitIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"andrechuakj"},"content":" isDone \u003d taskData.substring(0, firstSplitIndex - 1).equals(\"1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"andrechuakj"},"content":" desc \u003d taskData.substring(firstSplitIndex + 2, secondSplitIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"andrechuakj"},"content":" String from \u003d taskData.substring(secondSplitIndex + 2, thirdSplitIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"andrechuakj"},"content":" String to \u003d taskData.substring(thirdSplitIndex + 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"andrechuakj"},"content":" task \u003d new Event(desc, from, to);","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"andrechuakj"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"andrechuakj"},"content":" task.markDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"andrechuakj"},"content":" return task;","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":167}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"public class Storage {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" private String filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" private File file;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" makeDataDir();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" this.createFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" private static void makeDataDir() {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" File dataDirectory \u003d new File(\"./data/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" if (!dataDirectory.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" dataDirectory.mkdirs();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" private boolean createFile() {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" return file.createNewFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" System.out.println(\"An error occurred.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" public TaskList loadIntoList(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" Scanner s \u003d new Scanner(file);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" while (s.hasNextLine()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" tasks.add(Parser.dataToTask(line));","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" System.out.println(\"File not found. Your Chatbot will start from clean slate.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" return tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" public void writeListToFile(TaskList tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" fw.write(tasks.get(i).toData());","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" fw.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" public void appendToFile(Task task) throws IOException {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" fw.write(task.toData());","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" fw.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":73}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"public class Ui {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" private static final String LINE \u003d \"──────────────────────────────\"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" + \"────────────────────────────────────────────\";","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" private static final String LOGO \u003d \" _____ __ _____ _ _ _ _ ___\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" + \"| _\\\\ \\\\ / / / __ \\\\ | | | | | | ||_ |\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" + \"| | \\\\ V /___ _ _ _ __ | / \\\\/ |__ __ _| |_| |__ ___ | |_ | |\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" + \"| | \\\\ // _ \\\\| | | | \u0027__| | | | \u0027_ \\\\ / _` | __| \u0027_ \\\\ / _ \\\\| __|| |\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" + \"| | | | (_) | |_| | | | \\\\__/\\\\ | | | (_| | |_| |_) | (_) | |_ | |\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" + \"| |_ \\\\_/\\\\___/ \\\\__,_|_| \\\\____/_| |_|\\\\__,_|\\\\__|_.__/ \\\\___/ \\\\__|| |\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" + \"|___| |___|\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" private static final String greetPhrase \u003d LINE","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" + \"\\nHello! I\u0027m\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" + LOGO","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" + LINE + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" private static final String sendOffPhrase \u003d LINE","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" + \"\\nBye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" + LINE + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" public void greet() {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" System.out.println(greetPhrase);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" public void sendOff() {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" System.out.println(sendOffPhrase);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" public void printList(TaskList taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" System.out.println(Integer.toString(i + 1)","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" + \". \"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" + taskList.get(i));","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" System.out.println(LINE + \"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" public void printTaskAdded(Task taskAdded, int listSize) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" System.out.println(LINE","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" + \"\\nGot it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" + taskAdded","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" + \"\\nNow you have \" + listSize + \" tasks in the list.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" + LINE","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" ","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" public void printTaskMarked(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" System.out.println(LINE","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" + \"\\nNice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" + task + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" + LINE + \"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" ","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" public void printTaskUnmarked(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" System.out.println(LINE + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" + \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" + task + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" + LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" ","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" public void printTaskDeleted(Task task, int listSize) {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" System.out.println(LINE + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" + \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" + task","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":" + \"\\nNow you have \" + listSize + \" tasks in the list.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" + LINE + \"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":" ","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":" public void printException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":" System.out.println(LINE + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":" + message + \"\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":" + LINE + \"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":" public void showLine() {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"andrechuakj"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"andrechuakj"},"content":" Scanner input \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"andrechuakj"},"content":" return input.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":91}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" private String taskType;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" public AddCommand(ArrayList\u003cString\u003e commandDetails, String taskType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" switch (this.taskType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" case \"T\":","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" Task newTodo \u003d new Todo(commandDetails.get(0));","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" tasks.add(newTodo);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" storage.appendToFile(newTodo);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! There is something wrong with the description.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" ui.printTaskAdded(newTodo, tasks.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" case \"D\":","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" Task newDeadline \u003d new Deadline(commandDetails.get(0), commandDetails.get(1));","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" tasks.add(newDeadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" storage.appendToFile(newDeadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! There is something wrong with the description.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" ui.printTaskAdded(newDeadline, tasks.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" case \"E\":","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" Task newEvent \u003d new Event(commandDetails.get(0), commandDetails.get(1), commandDetails.get(2));","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" tasks.add(newEvent);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" storage.appendToFile(newEvent);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! There is something wrong with the description.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" ui.printTaskAdded(newEvent, tasks.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":60}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" public ByeCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":26}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" protected ArrayList\u003cString\u003e commandDetails;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" public Command(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" this.commandDetails \u003d commandDetails;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":22}},{"path":"src/main/java/duke/command/DeleteComand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"public class DeleteComand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" public DeleteComand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException{","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" int taskNumber \u003d 0;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" taskNumber \u003d Integer.parseInt(commandDetails.get(0));","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The task number cannot be parsed.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" if (taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The task number is out of range.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" Task deletedTask \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" storage.writeListToFile(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" ui.printTaskDeleted(deletedTask, tasks.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":32}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" public ListCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" ui.printList(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":20}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" public MarkCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" int taskNumber \u003d 0;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" taskNumber \u003d Integer.parseInt(commandDetails.get(0));","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The task number cannot be parsed.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" if (taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The task number is out of range.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" Task markedTask \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" markedTask.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" storage.writeListToFile(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" ui.printTaskMarked(markedTask);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":32}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" public UnmarkCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" int taskNumber \u003d 0;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" taskNumber \u003d Integer.parseInt(commandDetails.get(0));","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The task number cannot be parsed.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" if (taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"☹ OOPS!!! The task number is out of range.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" Task unmarkedTask \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" unmarkedTask.markAsNotDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" storage.writeListToFile(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" ui.printTaskMarked(unmarkedTask);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":32}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate by;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" public Deadline(String description, String by) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" this.by \u003d parseDate(by);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" public String toData() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" String done \u003d String.valueOf(this.isDone ? 1 : 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" return \"D | \" + done + \" | \" + this.description + \" | \" + this.by;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":27}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate from;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate to;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" public Event(String description, String from, String to) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" this.from \u003d parseDate(from);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" this.to \u003d parseDate(to);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" public String toData() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" String done \u003d String.valueOf(this.isDone ? 1 : 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" return \"E | \" + done + \" | \" + this.description + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" + \" (from: \" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" + \" to: \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":31}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * Constructor for a Task","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" * @param description","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" * Retrieves status icon of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" * @return X if done, \" \" if not done","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" * Marks task as done","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" * Marks task as not done","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" * Returns the data representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" public abstract String toData();","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate parseDate(String date) throws DukeException{","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" LocalDate localDate \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" localDate \u003d LocalDate.parse(date);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"Incorrect date format. Please enter date in yyyy-mm-dd format\");","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" return localDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" public void markDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" * Returns string representation of task","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" * @return String representation of task","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":76}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":7}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" public String toData() {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" String done \u003d String.valueOf(this.isDone ? 1 : 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" return \"T | \" + done + \" | \" + this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":9}}] diff --git a/andrechuakj_ip_master/commits.json b/andrechuakj_ip_master/commits.json index 72d8984f..09f06d09 100644 --- a/andrechuakj_ip_master/commits.json +++ b/andrechuakj_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"andrechuakj":[{"date":"2023-08-23","commitResults":[{"hash":"5e2603efc4d9cbe29b57ae4dc0d4104bb0c9f21e","isMergeCommit":false,"messageTitle":"Renamed bot, added greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":7}}},{"hash":"859bb2ee5b847d6b4d1542c98338fb24ab85b77d","isMergeCommit":false,"messageTitle":"Added echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}},{"hash":"2729fa45bdbb1bb463075b1ba99893ebe5d53d39","isMergeCommit":false,"messageTitle":"Added add and list feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"2e4a6b4c25be1c9065113949467ecfc0ac0d4b44","isMergeCommit":false,"messageTitle":"Added mark as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":3}}},{"hash":"1491e56be50498fdff0aab05574cfecf8fa65598","isMergeCommit":false,"messageTitle":"Added Todos, events, deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":36}}},{"hash":"ecaf469181259993aaf820b7095b15734bc6c146","isMergeCommit":false,"messageTitle":"Added testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":13,"deletions":11}}},{"hash":"af7954331be122b23db041d48c90022d1369c508","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":77}}},{"hash":"ad0cb68bb086492e8d23fca5887a4059c4419a01","isMergeCommit":false,"messageTitle":"Added delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"20f382b0cdbf8e1f2dd62b85561c1abf52a7a456","isMergeCommit":false,"messageTitle":"Add save function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":155,"deletions":9}}},{"hash":"b2dcab36f78d41ca09216d465a37309319c30f6b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"412c119e64bdc2badcaf4a84115572818f4c913e","isMergeCommit":false,"messageTitle":"Add dates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":37}}},{"hash":"b469d1dd32a7e9806c8cc16eab1dbeb5be4fcda7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"andrechuakj":{"java":438,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":9}},"authorContributionVariance":{"andrechuakj":15704.713},"authorDisplayNameMap":{"andrechuakj":"CS2103T-F11-1 ANDR.. JUN"}} +{"authorDailyContributionsMap":{"andrechuakj":[{"date":"2023-08-23","commitResults":[{"hash":"5e2603efc4d9cbe29b57ae4dc0d4104bb0c9f21e","isMergeCommit":false,"messageTitle":"Renamed bot, added greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":7}}},{"hash":"859bb2ee5b847d6b4d1542c98338fb24ab85b77d","isMergeCommit":false,"messageTitle":"Added echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}},{"hash":"2729fa45bdbb1bb463075b1ba99893ebe5d53d39","isMergeCommit":false,"messageTitle":"Added add and list feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"2e4a6b4c25be1c9065113949467ecfc0ac0d4b44","isMergeCommit":false,"messageTitle":"Added mark as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":3}}},{"hash":"1491e56be50498fdff0aab05574cfecf8fa65598","isMergeCommit":false,"messageTitle":"Added Todos, events, deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":36}}},{"hash":"ecaf469181259993aaf820b7095b15734bc6c146","isMergeCommit":false,"messageTitle":"Added testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":13,"deletions":11}}},{"hash":"af7954331be122b23db041d48c90022d1369c508","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":77}}},{"hash":"ad0cb68bb086492e8d23fca5887a4059c4419a01","isMergeCommit":false,"messageTitle":"Added delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"20f382b0cdbf8e1f2dd62b85561c1abf52a7a456","isMergeCommit":false,"messageTitle":"Add save function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":155,"deletions":9}}},{"hash":"b2dcab36f78d41ca09216d465a37309319c30f6b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"412c119e64bdc2badcaf4a84115572818f4c913e","isMergeCommit":false,"messageTitle":"Add dates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":37}}},{"hash":"b469d1dd32a7e9806c8cc16eab1dbeb5be4fcda7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"256601863f05ad491c58032607a6f6b36051e7b6","isMergeCommit":false,"messageTitle":"Refactor code with Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":191,"deletions":150}}},{"hash":"7300f7a84240dfd8510f03ffbcad31a4733e6ac6","isMergeCommit":false,"messageTitle":"Refactor code with Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":172,"deletions":125}}},{"hash":"cfbe9c2bad55ae312865643114a09e11506ecadf","isMergeCommit":false,"messageTitle":"Refactor code with Parser and Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":252,"deletions":125}}},{"hash":"a53e7d24f8906d4f40c4dd6e23945665e92d03a7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"8eb7ef591a42f9ebe030121a658de413f98d486c","isMergeCommit":false,"messageTitle":"Organize into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":8}}},{"hash":"6fcad79be4a53d8b69b408afaba728608575c9a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"e28c786f04e9484020f235d8a494a9b25428d155","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1ff12d16dc086908548797dabcd9ea3f5eef379a","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"andrechuakj":{"java":766,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":2,"txt":9}},"authorContributionVariance":{"andrechuakj":78272.36},"authorDisplayNameMap":{"andrechuakj":"CS2103T-F11-1 ANDR.. JUN"}} diff --git a/anthonytamzil_ip_master/commits.json b/anthonytamzil_ip_master/commits.json index 640b51d7..bc6d8777 100644 --- a/anthonytamzil_ip_master/commits.json +++ b/anthonytamzil_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"anthonytamzil":[{"date":"2023-08-23","commitResults":[{"hash":"727f7df833a87f2f736a7bab20e9d48577cb01fd","isMergeCommit":false,"messageTitle":"Change chatbot name and add greeting and exit methods","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":10}}},{"hash":"da6aca602548748f33d995e96916d455c9aeecc7","isMergeCommit":false,"messageTitle":"Echo user commands and exits when user says bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":1}}},{"hash":"1a1a26d6d61792a89799145bed36bdf850dd1cb3","isMergeCommit":false,"messageTitle":"Add ListOfTasks class","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":6}}},{"hash":"e0b50f9c9acdc1dc29008f2b38a2a5fe82bd69a0","isMergeCommit":false,"messageTitle":"Add Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":7}}},{"hash":"879de08903c593aaca7f627ed171eca42cdca891","isMergeCommit":false,"messageTitle":"Add method to mark tasks as done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":2}}},{"hash":"f875819267542248cad7600e35742c3d6cceae81","isMergeCommit":false,"messageTitle":"Add unmarking task method","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"ce720ff373aad06af38a35cb3ab88d224bae7d8a","isMergeCommit":false,"messageTitle":"Add Todo class as a child class of Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":6}}},{"hash":"fe119db6d539453139587aa7ae5e258cb920eeab","isMergeCommit":false,"messageTitle":"Add Deadline class as a subclass of Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":2}}},{"hash":"d0bb3da1c83f5253b78de7e33a3357d958417751","isMergeCommit":false,"messageTitle":"Add Event class as a subclass of Task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":0}}},{"hash":"631a9c0bb0abdde53de035d3b552328c8c3c21f0","isMergeCommit":false,"messageTitle":"Add Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"780a529ec63b41c12454e28875990958704e250d","isMergeCommit":false,"messageTitle":"Add exception handling for invalid commands and task adding","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":30}}},{"hash":"ee2d0ba1a8de27b9f12c272d03f509be4e8e0eac","isMergeCommit":false,"messageTitle":"Add delete method and Java collections to list of tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"f29794688a751ca5b28f30011bc8e67726f461f4","isMergeCommit":false,"messageTitle":"Add test cases and fixed bugs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":2,"deletions":2}}},{"hash":"43ba283ef0d753ec1802be972f9d0268d7200906","isMergeCommit":false,"messageTitle":"Add more test cases for error handling","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"99bb5e3c1328cd59eace622c59cd1228fc9672b7","isMergeCommit":false,"messageTitle":"Add file reading feature to chatbot","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":95,"deletions":11}}},{"hash":"056723678aa438e6d8cb5ee21fa80ceda45953a5","isMergeCommit":false,"messageTitle":"Add task saving to local file feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":44,"deletions":4}}},{"hash":"8863f787f9d32f2b25fb90b9fc06b351ad7be355","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"82f1956218a3dc0ade426b52f549d360ba729b1a","isMergeCommit":false,"messageTitle":"Add documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"1811fe605f28c60f8734016c1d2e5666a3ab413b","isMergeCommit":false,"messageTitle":"Add date recognition for Deadline events","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":23,"deletions":5}}},{"hash":"087b53d259e48b5cf82a638b0885f9f136759168","isMergeCommit":false,"messageTitle":"Add localDate storage for events","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":1},"java":{"insertions":63,"deletions":16}}},{"hash":"a2ae5af936d7762e22eb00b4727961959c214cf7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"68fedc3d3f25f3938734e40e9f4fd241d2e24544","isMergeCommit":false,"messageTitle":"Add commands and OOP structure","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":416,"deletions":181}}},{"hash":"3bf08d1defb1e7e308305b7f2b6de1bc713ad1d1","isMergeCommit":false,"messageTitle":"Add new ExitCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":6}}},{"hash":"d671dce553f15998eedf879f5305b063c38eb248","isMergeCommit":false,"messageTitle":"Add MarkCommand and ListCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":21}}},{"hash":"3abce09240dbf8d8981b4d3598950ff7fd15872d","isMergeCommit":false,"messageTitle":"Add DeleteCommand","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":11},"java":{"insertions":46,"deletions":42}}}]},{"date":"2023-08-31","commitResults":[{"hash":"20de679bd305468d6ab94882fdfa1f03c13b0568","isMergeCommit":false,"messageTitle":"Fix bugs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":27,"deletions":80}}},{"hash":"3eae9ec3b4e81a9f7806f4d9cac5f22bf63f85c2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"d33bda2038f8c83d6556bab6fba479f689efd641","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":247,"deletions":177},"bat":{"insertions":2,"deletions":2}}},{"hash":"079737b7c7b2c52c2f5d0b5d463164934cfd363f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"fc373f948ff2da2ee15fcabc255d30007972bed1","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e4393690ec35060a3163c58799b69e9a95df6bab","isMergeCommit":false,"messageTitle":"Set up Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":41,"deletions":24}}},{"hash":"8b4244ee440a08c3d46b38c089e3fce905288f2e","isMergeCommit":false,"messageTitle":"Add test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":101,"deletions":32}}},{"hash":"acbc0562b3b93b9a31fa4e31d5f17f739f8f465c","isMergeCommit":false,"messageTitle":"Add more Storage test cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":4}}},{"hash":"0efbab596f47afbb7147354918352b26da6c0f09","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"fcce6c1a14c6cd60572d9f3f4952123ffa5cb0e4","isMergeCommit":false,"messageTitle":"Package app as JAR file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":16,"deletions":12}}},{"hash":"c1d9b9789e32de328a33c48194a7f4f2171a9d65","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"177465ce8344d0feb734cbc3f3550b0922baab67","isMergeCommit":false,"messageTitle":"Add FindCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":6}}},{"hash":"390908534d8ede162422ffadb2cc73a7597dce8f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"d6db62610149c9126e58cfa3c54b11b2a35975dc","isMergeCommit":false,"messageTitle":"Add JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":6}}},{"hash":"c8f6b40323a71e5fce9fd84300334690102dd529","isMergeCommit":false,"messageTitle":"Ensure coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"26a648fae4237218a7ae5bf4d76aaadce101b81d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"71a85e940a21571c4ceb4e581900b44ccb00c91b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b157c9f2cb93ca10374ebceeef504213e79e64cf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/chatter/command/FindCommand.java\n","fileTypesAndContributionMap":{}},{"hash":"75c9b866a6b8f4b0cd91e4b38497067fc8a5184d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/anthonytamzil/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"299db1055101d572e532c345c195517aab6dd23e","isMergeCommit":false,"messageTitle":"Add style changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"anthonytamzil":{"java":1145,"md":0,"fxml":0,"sh":1,"bat":2,"gradle":8,"txt":24}},"authorContributionVariance":{"anthonytamzil":112346.45},"authorDisplayNameMap":{"anthonytamzil":"CS2103T-T09-4 ANTH..MZIL"}} +{"authorDailyContributionsMap":{"anthonytamzil":[{"date":"2023-08-23","commitResults":[{"hash":"727f7df833a87f2f736a7bab20e9d48577cb01fd","isMergeCommit":false,"messageTitle":"Change chatbot name and add greeting and exit methods","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":10}}},{"hash":"da6aca602548748f33d995e96916d455c9aeecc7","isMergeCommit":false,"messageTitle":"Echo user commands and exits when user says bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":1}}},{"hash":"1a1a26d6d61792a89799145bed36bdf850dd1cb3","isMergeCommit":false,"messageTitle":"Add ListOfTasks class","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":6}}},{"hash":"e0b50f9c9acdc1dc29008f2b38a2a5fe82bd69a0","isMergeCommit":false,"messageTitle":"Add Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":7}}},{"hash":"879de08903c593aaca7f627ed171eca42cdca891","isMergeCommit":false,"messageTitle":"Add method to mark tasks as done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":2}}},{"hash":"f875819267542248cad7600e35742c3d6cceae81","isMergeCommit":false,"messageTitle":"Add unmarking task method","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"ce720ff373aad06af38a35cb3ab88d224bae7d8a","isMergeCommit":false,"messageTitle":"Add Todo class as a child class of Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":6}}},{"hash":"fe119db6d539453139587aa7ae5e258cb920eeab","isMergeCommit":false,"messageTitle":"Add Deadline class as a subclass of Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":2}}},{"hash":"d0bb3da1c83f5253b78de7e33a3357d958417751","isMergeCommit":false,"messageTitle":"Add Event class as a subclass of Task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":0}}},{"hash":"631a9c0bb0abdde53de035d3b552328c8c3c21f0","isMergeCommit":false,"messageTitle":"Add Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"780a529ec63b41c12454e28875990958704e250d","isMergeCommit":false,"messageTitle":"Add exception handling for invalid commands and task adding","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":30}}},{"hash":"ee2d0ba1a8de27b9f12c272d03f509be4e8e0eac","isMergeCommit":false,"messageTitle":"Add delete method and Java collections to list of tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"f29794688a751ca5b28f30011bc8e67726f461f4","isMergeCommit":false,"messageTitle":"Add test cases and fixed bugs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":2,"deletions":2}}},{"hash":"43ba283ef0d753ec1802be972f9d0268d7200906","isMergeCommit":false,"messageTitle":"Add more test cases for error handling","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"99bb5e3c1328cd59eace622c59cd1228fc9672b7","isMergeCommit":false,"messageTitle":"Add file reading feature to chatbot","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":95,"deletions":11}}},{"hash":"056723678aa438e6d8cb5ee21fa80ceda45953a5","isMergeCommit":false,"messageTitle":"Add task saving to local file feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":44,"deletions":4}}},{"hash":"8863f787f9d32f2b25fb90b9fc06b351ad7be355","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"82f1956218a3dc0ade426b52f549d360ba729b1a","isMergeCommit":false,"messageTitle":"Add documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"1811fe605f28c60f8734016c1d2e5666a3ab413b","isMergeCommit":false,"messageTitle":"Add date recognition for Deadline events","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":23,"deletions":5}}},{"hash":"087b53d259e48b5cf82a638b0885f9f136759168","isMergeCommit":false,"messageTitle":"Add localDate storage for events","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":1},"java":{"insertions":63,"deletions":16}}},{"hash":"a2ae5af936d7762e22eb00b4727961959c214cf7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"68fedc3d3f25f3938734e40e9f4fd241d2e24544","isMergeCommit":false,"messageTitle":"Add commands and OOP structure","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":416,"deletions":181}}},{"hash":"3bf08d1defb1e7e308305b7f2b6de1bc713ad1d1","isMergeCommit":false,"messageTitle":"Add new ExitCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":6}}},{"hash":"d671dce553f15998eedf879f5305b063c38eb248","isMergeCommit":false,"messageTitle":"Add MarkCommand and ListCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":21}}},{"hash":"3abce09240dbf8d8981b4d3598950ff7fd15872d","isMergeCommit":false,"messageTitle":"Add DeleteCommand","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":11},"java":{"insertions":46,"deletions":42}}}]},{"date":"2023-08-31","commitResults":[{"hash":"20de679bd305468d6ab94882fdfa1f03c13b0568","isMergeCommit":false,"messageTitle":"Fix bugs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":27,"deletions":80}}},{"hash":"3eae9ec3b4e81a9f7806f4d9cac5f22bf63f85c2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"d33bda2038f8c83d6556bab6fba479f689efd641","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":247,"deletions":177},"bat":{"insertions":2,"deletions":2}}},{"hash":"079737b7c7b2c52c2f5d0b5d463164934cfd363f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"fc373f948ff2da2ee15fcabc255d30007972bed1","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e4393690ec35060a3163c58799b69e9a95df6bab","isMergeCommit":false,"messageTitle":"Set up Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":41,"deletions":24}}},{"hash":"8b4244ee440a08c3d46b38c089e3fce905288f2e","isMergeCommit":false,"messageTitle":"Add test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":101,"deletions":32}}},{"hash":"acbc0562b3b93b9a31fa4e31d5f17f739f8f465c","isMergeCommit":false,"messageTitle":"Add more Storage test cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":4}}},{"hash":"0efbab596f47afbb7147354918352b26da6c0f09","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"fcce6c1a14c6cd60572d9f3f4952123ffa5cb0e4","isMergeCommit":false,"messageTitle":"Package app as JAR file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":16,"deletions":12}}},{"hash":"c1d9b9789e32de328a33c48194a7f4f2171a9d65","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"177465ce8344d0feb734cbc3f3550b0922baab67","isMergeCommit":false,"messageTitle":"Add FindCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":6}}},{"hash":"390908534d8ede162422ffadb2cc73a7597dce8f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"d6db62610149c9126e58cfa3c54b11b2a35975dc","isMergeCommit":false,"messageTitle":"Add JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":6}}},{"hash":"c8f6b40323a71e5fce9fd84300334690102dd529","isMergeCommit":false,"messageTitle":"Ensure coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"26a648fae4237218a7ae5bf4d76aaadce101b81d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"71a85e940a21571c4ceb4e581900b44ccb00c91b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b157c9f2cb93ca10374ebceeef504213e79e64cf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/chatter/command/FindCommand.java\n","fileTypesAndContributionMap":{}},{"hash":"75c9b866a6b8f4b0cd91e4b38497067fc8a5184d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/anthonytamzil/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"299db1055101d572e532c345c195517aab6dd23e","isMergeCommit":false,"messageTitle":"Add style changes","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"anthonytamzil":{"java":1145,"md":0,"fxml":0,"sh":1,"bat":2,"gradle":8,"txt":24}},"authorContributionVariance":{"anthonytamzil":112346.45},"authorDisplayNameMap":{"anthonytamzil":"CS2103T-T09-4 ANTH..MZIL"}} diff --git a/applepiofmyeye_ip_master/authorship.json b/applepiofmyeye_ip_master/authorship.json index 8c34c451..61d8f6a1 100644 --- a/applepiofmyeye_ip_master/authorship.json +++ b/applepiofmyeye_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"# Barbie project template","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"This is an individual CS2103T greenfield Java project. It is forked from the project template Duke, which is named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2023-08-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":"applepiofmyeye"},"content":"3. After that, locate the `src/main/java/Barbie.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":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" ______________________________","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" Hi Barbie! Hi Ken!","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" I\u0027m","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" ____ _","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" | _ \\ | | ","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" | |_| |_____,_ ,_| |,___ _ ___","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" | _ /| _ | ` _| __\\ \\| |/ _ \\","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" | |_| | |_| | | | |__/ /| | ___/ ","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" |____/ \\__,_|_| |_|\\__/ |_|\\___/","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" What can I do for you today?","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" ______________________________","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" [you]:","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"applepiofmyeye":17,"-":16}},{"path":"barbie.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"T,1,buy milk","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"T,1,buy bread","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"applepiofmyeye":9}},{"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":"applepiofmyeye"},"content":" mainClass.set(\"seedu.Barbie\")","lastModifiedDate":"2023-09-01"},{"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":"applepiofmyeye"},"content":" archiveBaseName \u003d \"barbie\"","lastModifiedDate":"2023-09-01"},{"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":{"applepiofmyeye":2,"-":40}},{"path":"src/main/java/Barbie.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import types.Deadlines;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import types.Party;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import types.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import exceptions.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"public class Barbie {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" enum Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" MARK,","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" UNMARK,","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" DEL,","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" TODO,","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" DEADLINE,","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" PARTY,","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" LIST,","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" BYE,","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" // CONSTANTS","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e list \u003d Storage.getLastList();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" Path path \u003d Paths.get(\"barbie.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" int indexNumber \u003d list.size(); // Starting from 1 reduces the need to subtract and add 1 for usability.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" // Intro","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" Ui.intro(Utils.getDateList(LocalDate.now(), list));","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" loop:","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" while (true) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" Command command \u003d Command.valueOf(parts[0].toUpperCase());","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" Ui.barbie();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" switch (command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" case MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" case UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" case DEL:","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" String desc \u003d parts[1];","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" int taskNumber;","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" taskNumber \u003d Integer.parseInt(desc) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieTaskNumberException();","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" switch (command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" case MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":" // Editing variables","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" list.get(taskNumber).mark();","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":" Storage.changeLineStatus(path, \"1\", taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":" // Output","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":" Ui.mark(list.get(taskNumber));","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":" case UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" // Editing variables","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":" list.get(taskNumber).unmark();","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"applepiofmyeye"},"content":" Storage.changeLineStatus(path, \"2\", taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":" // Output","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":" Ui.unmark(list.get(taskNumber));","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" case DEL:","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":" // Editing variables","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" list.remove(taskNumber);","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":" indexNumber -\u003d 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":" Storage.deleteLine(path, taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"applepiofmyeye"},"content":" // Output","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"applepiofmyeye"},"content":" Ui.del();","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":93,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":94,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"applepiofmyeye"},"content":" case TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"applepiofmyeye"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"applepiofmyeye"},"content":" case PARTY:","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"applepiofmyeye"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoDescException();","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":101,"author":{"gitId":"applepiofmyeye"},"content":" desc \u003d parts[1];","lastModifiedDate":"2023-08-25"},{"lineNumber":102,"author":{"gitId":"applepiofmyeye"},"content":" String[] parts2 \u003d parts[1].split(\"/\");","lastModifiedDate":"2023-08-25"},{"lineNumber":103,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"applepiofmyeye"},"content":" switch (command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"applepiofmyeye"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"applepiofmyeye"},"content":" if (parts2.length \u003c 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":107,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoDeadlineException();","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":109,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"applepiofmyeye"},"content":" desc \u003d parts2[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":111,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate by \u003d LocalDate.parse(parts2[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"applepiofmyeye"},"content":" list.add(indexNumber, new Deadlines(desc, by));","lastModifiedDate":"2023-08-25"},{"lineNumber":113,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(path, \"D\", desc, by);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":115,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"applepiofmyeye"},"content":" case PARTY:","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"applepiofmyeye"},"content":" if (parts2.length \u003c 3) {","lastModifiedDate":"2023-08-25"},{"lineNumber":119,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoTimingException();","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":121,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"applepiofmyeye"},"content":" desc \u003d parts2[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":123,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate from \u003d LocalDate.parse(parts2[1].strip());","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate to \u003d LocalDate.parse(parts2[2].strip());","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"applepiofmyeye"},"content":" list.add(indexNumber, new Party(desc, from, to));","lastModifiedDate":"2023-08-25"},{"lineNumber":127,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(path, \"P\", desc, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"applepiofmyeye"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"applepiofmyeye"},"content":" list.add(indexNumber, new Todo(desc));","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(path, \"T\", desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":135,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":136,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":137,"author":{"gitId":"applepiofmyeye"},"content":" Ui.taskAdded(list.get(indexNumber));","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"applepiofmyeye"},"content":" indexNumber ++;","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":140,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":141,"author":{"gitId":"applepiofmyeye"},"content":" case LIST:","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"applepiofmyeye"},"content":" // No variables to edit, only output (refer to listTasks func)","lastModifiedDate":"2023-08-25"},{"lineNumber":143,"author":{"gitId":"applepiofmyeye"},"content":" Ui.listTasks(list, indexNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":145,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":146,"author":{"gitId":"applepiofmyeye"},"content":" case BYE:","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"applepiofmyeye"},"content":" break loop; // break out of the while loop, not switch statement","lastModifiedDate":"2023-08-25"},{"lineNumber":148,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":149,"author":{"gitId":"applepiofmyeye"},"content":" default:","lastModifiedDate":"2023-08-25"},{"lineNumber":150,"author":{"gitId":"applepiofmyeye"},"content":" // Editing variables","lastModifiedDate":"2023-08-25"},{"lineNumber":151,"author":{"gitId":"applepiofmyeye"},"content":" list.add(indexNumber, new Task(input)); // Create a new Task","lastModifiedDate":"2023-08-25"},{"lineNumber":152,"author":{"gitId":"applepiofmyeye"},"content":" indexNumber +\u003d 1; //Incrementing item counter","lastModifiedDate":"2023-08-25"},{"lineNumber":153,"author":{"gitId":"applepiofmyeye"},"content":" // Output","lastModifiedDate":"2023-08-25"},{"lineNumber":154,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t Okey Dokey! I\u0027ve added this task into your list:\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":155,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t[ ] \" + input);","lastModifiedDate":"2023-08-25"},{"lineNumber":156,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":157,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":159,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"applepiofmyeye"},"content":" } catch (BarbieException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"Barbie Error!! \" + e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":162,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"applepiofmyeye"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"Hey Barbie,, make sure to give dates in the format YYYY-MM-DD alright! \");","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception ex) {","lastModifiedDate":"2023-08-25"},{"lineNumber":168,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(ex.toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":169,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":170,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":171,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":172,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[you]:\");","lastModifiedDate":"2023-08-23"},{"lineNumber":173,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":174,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":175,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":176,"author":{"gitId":"applepiofmyeye"},"content":" // Exit","lastModifiedDate":"2023-08-23"},{"lineNumber":177,"author":{"gitId":"applepiofmyeye"},"content":" Ui.exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"applepiofmyeye":182}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"/** This file deals with all file reading from and writing to. */","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import types.Deadlines;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import types.Party;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import types.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.StandardOpenOption;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" public static void addToList(Path path, String type, String desc) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d type + \",\" + 0 + \",\" + desc + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, line.getBytes(), StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" public static void addToList(Path path, String type, String desc, LocalDate deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d type + \",\" + 0 + \",\" + desc + \",\" + deadline + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, line.getBytes(), StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" public static void addToList(Path path, String type, String desc, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d type + \",\" + 0 + \",\" + desc + \",\" + from + \",\" + to + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, line.getBytes(), StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" public static ArrayList\u003cTask\u003e getLastList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e finalList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" Path path \u003d Paths.get(\"barbie.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" Files.createFile(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[A new list created for current user]\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"-------------------------------------------------\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[A current list is being used for current user]\");","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" Files.readAllLines(path).forEach(x -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" String[] taskParts \u003d x.split(\",\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" String taskType \u003d taskParts[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":" String taskStatus \u003d taskParts[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" String desc \u003d taskParts[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" if (Objects.equals(taskType, \"T\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Todo(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":" } else if (Objects.equals(taskType, \"D\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Deadlines(desc, LocalDate.parse(taskParts[3]));","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":" } else if (Objects.equals(taskType, \"P\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Party(desc, LocalDate.parse(taskParts[3]), LocalDate.parse(taskParts[4]));","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Task(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":" if (Integer.parseInt( taskStatus) \u003d\u003d 1) { task.mark(); }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"applepiofmyeye"},"content":" finalList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(finalList);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":" return finalList;","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"applepiofmyeye"},"content":" public static void changeLineStatus(Path path, String status, int lineToChange) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"applepiofmyeye"},"content":" List\u003cString\u003e lines \u003d Files.readAllLines(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"applepiofmyeye"},"content":" if (lineToChange \u003e\u003d 0 \u0026\u0026 lineToChange \u003c lines.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"applepiofmyeye"},"content":" String[] newContent \u003d lines.get(lineToChange).split(\",\");","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"applepiofmyeye"},"content":" newContent[1] \u003d status;","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"applepiofmyeye"},"content":" lines.set(lineToChange, Arrays.stream(newContent).reduce(\"\", (x, acc) -\u003e x + \",\" + acc));","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, lines);","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"applepiofmyeye"},"content":" throw new IllegalArgumentException(\"Invalid line number to change.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"applepiofmyeye"},"content":" public static void deleteLine(Path path, int lineToDelete) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"applepiofmyeye"},"content":" List\u003cString\u003e lines \u003d Files.readAllLines(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"applepiofmyeye"},"content":" if (lineToDelete \u003e\u003d 0 \u0026\u0026 lineToDelete \u003c lines.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"applepiofmyeye"},"content":" lines.remove(lineToDelete);","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, lines);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"applepiofmyeye"},"content":" throw new IllegalArgumentException(\"Invalid line number to delete.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"applepiofmyeye":122}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" private static final String line \u003d \"______________________________\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" public static void intro(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" String logo \u003d \" ____ _\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" + \"| _ \\\\ | |\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" + \"| |_| |_____,_ ,_| |,___ _ ___\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" + \"| _ /| _ | ` _| __\\\\ \\\\ |/ _ \\\\\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" + \"| |_| | |_| | | | |__/ /| | ___/\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" + \"|____/ \\\\__,_|_| |_|\\\\__/ |_|\\\\___/\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(line","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" + \"Hi Barbie! Hi Ken!\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\nI\u0027m\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" + logo","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\n\\nThis is the list of things you have today!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" list.forEach(System.out::println);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\nWhat can I do for you?\\n\" + line);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[you]:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" public static void exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"Bye Barbie! Bye Ken!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" public static void taskAdded(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\tGot you barbie! I\u0027ve added this task to your Barbie list:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t \" + task);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" public static void mark(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t \" + task + \"\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t\" + line);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" public static void unmark(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t Alright! I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t \" + task + \"\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t\" + line);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" public static void del() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t Deletion success! I\u0027ve deleted this task off your list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" public static void barbie() {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t\" + line","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t [barbie]:\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" protected static void listTasks(ArrayList\u003cTask\u003e list,int indexNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" if (indexNumber \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"Hmm.. your list looks empty. To add items, use the \u0027todo\u0027, \u0027deadline\u0027 or \u0027party\u0027 commands!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" // \"list\" command","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" for (int i \u003d 0; i \u003c indexNumber; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":" int itemNumber \u003d i + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t\" + itemNumber + \". \" + list.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"applepiofmyeye":73}},{"path":"src/main/java/Utils.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import types.Deadlines;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import types.Party;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"public class Utils {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" protected static ArrayList\u003cTask\u003e getDateList(LocalDate date, ArrayList\u003cTask\u003e lastList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e thisDatesList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" lastList.forEach(x -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" if (x instanceof Deadlines) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" Deadlines y \u003d (Deadlines) x;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" if (y.isToday(date)) { thisDatesList.add(y); }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" } else if (x instanceof Party) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" Party y \u003d (Party) x;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" if (y.isToday(date)) { thisDatesList.add(y); }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" return thisDatesList;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"applepiofmyeye":28}},{"path":"src/main/java/exceptions/BarbieException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieException extends Exception{","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"applepiofmyeye":7}},{"path":"src/main/java/exceptions/BarbieNoDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import exceptions.BarbieException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieNoDeadlineException extends BarbieException {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieNoDeadlineException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Barbie your deadline has no deadline!\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" + \"Remember to add a deadline after the description denoted by a \u0027/\u0027 luv\");","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"applepiofmyeye":10}},{"path":"src/main/java/exceptions/BarbieNoDescException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import exceptions.BarbieException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieNoDescException extends BarbieException {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieNoDescException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Barbie your item has no description!\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" + \"Remember to add a description after the command \u0027todo/deadline/party\u0027.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"applepiofmyeye":10}},{"path":"src/main/java/exceptions/BarbieNoTimingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import exceptions.BarbieException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieNoTimingException extends BarbieException {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieNoTimingException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Barbie your party has the incorrect number of timings!\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" + \"Remember to add a \u0027start\u0027 time and an \u0027end\u0027 time\"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" + \" after the description! denote it by a \u0027/\u0027 luv\");","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"applepiofmyeye":11}},{"path":"src/main/java/exceptions/BarbieTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import exceptions.BarbieException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieTaskNumberException extends BarbieException {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieTaskNumberException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Task to mark or unmark or del is not provided as a digit!\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\n\" + \"use the list command to see the digit of your task and make sure to give \\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" + \"the digit of the task you want to mark/unmark/del. (e.g. mark 2)\");","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"applepiofmyeye":11}},{"path":"src/main/java/types/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package types;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class Deadlines extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" public Deadlines(String description, LocalDate by) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" public boolean isToday(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" return (Objects.equals(this.by, date));","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" return \"[D]\" + super.toString() + \"[BY: \" + this.by + \"]\";","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"applepiofmyeye":24}},{"path":"src/main/java/types/Party.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package types;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class Party extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" protected LocalDate from;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" protected LocalDate to;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" public Party(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" public boolean isToday(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" return (Objects.equals(this.from, date));","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" return \"{P}\" + super.toString() + \"~from: \" + this.from + \", to: \" + this.to + \"~\";","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"applepiofmyeye":25}},{"path":"src/main/java/types/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package types;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"public class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" protected boolean isCompleted;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" protected String description;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" public String getStatus() {","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" return (isCompleted ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" public void unmark() {","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" public void mark() {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" isCompleted \u003d true;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" return this.getStatus() + \" \" + description;","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"applepiofmyeye":29}},{"path":"src/main/java/types/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package types;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"public class Todo extends types.Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"applepiofmyeye":13}},{"path":"src/test/java/TestBarbie.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"public class TestBarbie {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" @BeforeEach","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" public void setUp() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" // For future use, currently /text-ui-test/runtest.sh is sufficient.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"applepiofmyeye":25}},{"path":"src/test/java/TestStorage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"public class TestStorage {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" public void testAddToListCommas() {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" Path path \u003d Paths.get(\"barbie.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(path, \"T\", \"do, work,\");","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" List\u003cString\u003e list \u003d Files.readAllLines(path);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" String actual \u003d list.get(list.size() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(\"T,0,do, work,\", actual);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" public void testGetListWithCommas() {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e oldList \u003d Storage.getLastList();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" String actual \u003d oldList.get(oldList.size() - 1).toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(\"[T][ ] do\", actual);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"applepiofmyeye":39}},{"path":"src/test/java/TestUi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"public class TestUi {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" @BeforeEach","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" public void setUp() {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" public void testIntroEmptyList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"______________________________\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" String logo \u003d \" ____ _\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" + \"| _ \\\\ | |\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" + \"| |_| |_____,_ ,_| |,___ _ ___\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" + \"| _ /| _ | ` _| __\\\\ \\\\ |/ _ \\\\\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" + \"| |_| | |_| | | | |__/ /| | ___/\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" + \"|____/ \\\\__,_|_| |_|\\\\__/ |_|\\\\___/\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" String greeting \u003d (line","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" + \"Hi Barbie! Hi Ken!\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\nI\u0027m\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" + logo","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\n\\nThis is the list of things you have today!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" String question \u003d (\"\\nWhat can I do for you?\\n\" + line + \"\\n[you]:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" String expected \u003d greeting + \"\\n\" + question;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" Ui.intro(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(expected, outputStreamCaptor.toString().trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" public void testEmptyFileList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" Ui.listTasks(new ArrayList\u003c\u003e(), 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" String expected \u003d \"Hmm.. your list looks empty. To add items, use the \u0027todo\u0027, \u0027deadline\u0027 or \u0027party\u0027 commands!\";","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(expected, outputStreamCaptor.toString().trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"applepiofmyeye":51}},{"path":"src/test/java/TestUtils.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"public class TestUtils {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" public void testEmptyList(){","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e list \u003d Utils","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" .getDateList(LocalDate.parse(\"2023-08-20\"), new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(list.size(), 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"applepiofmyeye":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"todo read book","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"todo help do chores","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"del 1","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"del 2","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"bye","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"applepiofmyeye":6}},{"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":"applepiofmyeye"},"content":"REM run the program, feed types from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"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":{"applepiofmyeye":1,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":"java -classpath ../bin Barbie \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-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":{"applepiofmyeye":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"# Barbie project template","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"This is an individual CS2103T greenfield Java project. It is forked from the project template Duke, which is named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2023-08-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":"applepiofmyeye"},"content":"3. After that, locate the `src/main/java/Barbie.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":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" ______________________________","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" Hi Barbie! Hi Ken!","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" I\u0027m","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" ____ _","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" | _ \\ | | ","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" | |_| |_____,_ ,_| |,___ _ ___","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" | _ /| _ | ` _| __\\ \\| |/ _ \\","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" | |_| | |_| | | | |__/ /| | ___/ ","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" |____/ \\__,_|_| |_|\\__/ |_|\\___/","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" What can I do for you today?","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" ______________________________","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" [you]:","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"applepiofmyeye":17,"-":16}},{"path":"barbie.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"applepiofmyeye":2}},{"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":"applepiofmyeye"},"content":" mainClass.set(\"seedu.Barbie\")","lastModifiedDate":"2023-09-01"},{"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":"applepiofmyeye"},"content":" archiveBaseName \u003d \"barbie\"","lastModifiedDate":"2023-09-01"},{"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"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":"ext {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" mainClassName \u003d \u0027seedu.Barbie\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":"shadowJar {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" archiveFileName \u003d \u0027barbie.jar\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"applepiofmyeye":10,"-":40}},{"path":"src/main/java/Barbie.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import types.Deadlines;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import types.Party;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import types.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import exceptions.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" * Implements the main Barbie chatbot logic.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"public class Barbie {","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" private enum Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" MARK,","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" UNMARK,","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" DEL,","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" TODO,","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" DEADLINE,","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" PARTY,","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" LIST,","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" BYE,","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" FIND","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" * Main wrapper method for the command logic of Barbie chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" * @param args to leave empty","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" // CONSTANTS","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e list \u003d Storage.getLastList();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" Path path \u003d Paths.get(\"barbie.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" int indexNumber \u003d list.size(); // Starting from 1 reduces the need to subtract and add 1 for usability.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" // Intro","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" Ui.intro(Utils.getDateList(LocalDate.now(), list));","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" loop:","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" while (true) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" Command command \u003d Command.valueOf(parts[0].toUpperCase());","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" Ui.barbie();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" switch (command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" case MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" case UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" case DEL:","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" String desc \u003d parts[1];","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" int taskNumber;","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" taskNumber \u003d Integer.parseInt(desc) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieTaskNumberException();","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":" switch (command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":" case MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":" // Editing variables","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":" list.get(taskNumber).mark();","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":" Storage.changeLineStatus(path, \"1\", taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":" // Output","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" Ui.mark(list.get(taskNumber));","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"applepiofmyeye"},"content":" case UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":" // Editing variables","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":" list.get(taskNumber).unmark();","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":" Storage.changeLineStatus(path, \"2\", taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":" // Output","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" Ui.unmark(list.get(taskNumber));","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":" case DEL:","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"applepiofmyeye"},"content":" // Editing variables","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"applepiofmyeye"},"content":" list.remove(taskNumber);","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"applepiofmyeye"},"content":" indexNumber -\u003d 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"applepiofmyeye"},"content":" Storage.deleteLine(path, taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":93,"author":{"gitId":"applepiofmyeye"},"content":" // Output","lastModifiedDate":"2023-08-25"},{"lineNumber":94,"author":{"gitId":"applepiofmyeye"},"content":" Ui.del();","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"applepiofmyeye"},"content":" case TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"applepiofmyeye"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"applepiofmyeye"},"content":" case PARTY:","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"applepiofmyeye"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":103,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoDescException();","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":105,"author":{"gitId":"applepiofmyeye"},"content":" desc \u003d parts[1];","lastModifiedDate":"2023-08-25"},{"lineNumber":106,"author":{"gitId":"applepiofmyeye"},"content":" String[] parts2 \u003d parts[1].split(\"/\");","lastModifiedDate":"2023-08-25"},{"lineNumber":107,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"applepiofmyeye"},"content":" switch (command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"applepiofmyeye"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"applepiofmyeye"},"content":" if (parts2.length \u003c 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":111,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoDeadlineException();","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":113,"author":{"gitId":"applepiofmyeye"},"content":" desc \u003d parts2[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":114,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate by \u003d LocalDate.parse(parts2[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"applepiofmyeye"},"content":" list.add(indexNumber, new Deadlines(desc, by));","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(path, desc, by);","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":120,"author":{"gitId":"applepiofmyeye"},"content":" case PARTY:","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"applepiofmyeye"},"content":" if (parts2.length \u003c 3) {","lastModifiedDate":"2023-08-25"},{"lineNumber":122,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoTimingException();","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":124,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"applepiofmyeye"},"content":" Ui.taskAdded(list.get(indexNumber));","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"applepiofmyeye"},"content":" indexNumber ++;","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"applepiofmyeye"},"content":" case FIND:","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"applepiofmyeye"},"content":" if (parts.length \u003c2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoKeywordException();","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"applepiofmyeye"},"content":" String keyword \u003d parts[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"applepiofmyeye"},"content":" Ui.findTasks(list, indexNumber, keyword);","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"applepiofmyeye"},"content":" case LIST:","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"applepiofmyeye"},"content":" // No variables to edit, only output (refer to listTasks func)","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"applepiofmyeye"},"content":" Ui.listTasks(list, indexNumber);","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"applepiofmyeye"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"applepiofmyeye"},"content":" list.add(indexNumber, new Todo(desc));","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(path, desc);","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":146,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":147,"author":{"gitId":"applepiofmyeye"},"content":" Ui.taskAdded(list.get(indexNumber));","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"applepiofmyeye"},"content":" indexNumber ++;","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":150,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":151,"author":{"gitId":"applepiofmyeye"},"content":" case LIST:","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"applepiofmyeye"},"content":" // No variables to edit, only output (refer to listTasks func)","lastModifiedDate":"2023-08-25"},{"lineNumber":153,"author":{"gitId":"applepiofmyeye"},"content":" Ui.listTasks(list, indexNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":155,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":156,"author":{"gitId":"applepiofmyeye"},"content":" case BYE:","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"applepiofmyeye"},"content":" break loop; // break out of the while loop, not switch statement","lastModifiedDate":"2023-08-25"},{"lineNumber":158,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":159,"author":{"gitId":"applepiofmyeye"},"content":" default:","lastModifiedDate":"2023-08-25"},{"lineNumber":160,"author":{"gitId":"applepiofmyeye"},"content":" // Editing variables","lastModifiedDate":"2023-08-25"},{"lineNumber":161,"author":{"gitId":"applepiofmyeye"},"content":" list.add(indexNumber, new Task(input)); // Create a new Task","lastModifiedDate":"2023-08-25"},{"lineNumber":162,"author":{"gitId":"applepiofmyeye"},"content":" indexNumber +\u003d 1; //Incrementing item counter","lastModifiedDate":"2023-08-25"},{"lineNumber":163,"author":{"gitId":"applepiofmyeye"},"content":" // Output","lastModifiedDate":"2023-08-25"},{"lineNumber":164,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t Okey Dokey! I\u0027ve added this task into your list:\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":165,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t[ ] \" + input);","lastModifiedDate":"2023-08-25"},{"lineNumber":166,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":167,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":168,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":169,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":170,"author":{"gitId":"applepiofmyeye"},"content":" } catch (BarbieException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":171,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"Barbie Error!! \" + e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":172,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":173,"author":{"gitId":"applepiofmyeye"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"Hey Barbie,, make sure to give dates in the format YYYY-MM-DD alright! \");","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception ex) {","lastModifiedDate":"2023-08-25"},{"lineNumber":178,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(ex.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":180,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":181,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[you]:\");","lastModifiedDate":"2023-08-23"},{"lineNumber":182,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":183,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":184,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":185,"author":{"gitId":"applepiofmyeye"},"content":" // Exit","lastModifiedDate":"2023-08-23"},{"lineNumber":186,"author":{"gitId":"applepiofmyeye"},"content":" Ui.exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":189,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"applepiofmyeye":191}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import types.Deadlines;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import types.Party;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import types.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.StandardOpenOption;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" * This class deals with all file reading and writing.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" * Writes to the file given, in the format of [type][status] [desc].","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" * Eg. [T][ ] read book","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" * The status is always 0 when creating a new Task, so this method assumes","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" * that the task is marked as undone in this method.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" * The type is also always Todo, as it takes in the \"desc\" parameter only.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" * @param path the path of file to write to","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" * @param desc the description of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" protected static void addToList(Path path, String desc) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"T\" + \",\" + 0 + \",\" + desc + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, line.getBytes(), StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" * Writes to the file given, in the format of [type][status] [desc].","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" * Eg. [T][ ] read book","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" * The status is always 0 when creating a new Task, so this method assumes","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" * that the task is marked as undone in this method.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" * The type is also always Deadline, as it takes in the \"desc\" and \"deadline\" parameter only.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" * @param path the path of the file to write to","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" * @param desc the description of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" * @param deadline the deadline the task has to be completed by","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" protected static void addToList(Path path, String desc, LocalDate deadline) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"D\" + \",\" + 0 + \",\" + desc + \",\" + deadline + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, line.getBytes(), StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" * Writes to the file given, in the format of [type][status] [desc].","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":" * Eg. [T][ ] read book","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" * The status is always 0 when creating a new Task, so this method assumes","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":" * that the task is marked as undone in this method.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":" * The type is also always Party, as it takes in the \"desc\", \"from\" and \"to\" parameter.","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":" * @param path the path of the file to write to","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":" * @param desc the description of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":" * @param from the start time of the event","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":" * @param to the end time of the event","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":" public static void addToList(Path path, String desc, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"P\" + \",\" + 0 + \",\" + desc + \",\" + from + \",\" + to + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, line.getBytes(), StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":" * Returns the latest list from the storage file upon starting up.","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"applepiofmyeye"},"content":" * @return the last list loaded from the storage file","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"applepiofmyeye"},"content":" protected static ArrayList\u003cTask\u003e getLastList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e finalList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"applepiofmyeye"},"content":" Path path \u003d Paths.get(\"barbie.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"applepiofmyeye"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"applepiofmyeye"},"content":" Files.createFile(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[A new list created for current user]\");","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"-------------------------------------------------\");","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[A current list is being used for current user]\");","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"applepiofmyeye"},"content":" Files.readAllLines(path).forEach(x -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"applepiofmyeye"},"content":" String[] taskParts \u003d x.split(\",\");","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"applepiofmyeye"},"content":" String taskType \u003d taskParts[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"applepiofmyeye"},"content":" String taskStatus \u003d taskParts[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"applepiofmyeye"},"content":" String desc \u003d taskParts[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"applepiofmyeye"},"content":" Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"applepiofmyeye"},"content":" if (Objects.equals(taskType, \"T\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Todo(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"applepiofmyeye"},"content":" } else if (Objects.equals(taskType, \"D\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Deadlines(desc, LocalDate.parse(taskParts[3]));","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"applepiofmyeye"},"content":" } else if (Objects.equals(taskType, \"P\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Party(desc, LocalDate.parse(taskParts[3]), LocalDate.parse(taskParts[4]));","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Task(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"applepiofmyeye"},"content":" if (Integer.parseInt( taskStatus) \u003d\u003d 1) { task.mark(); }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"applepiofmyeye"},"content":" finalList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(finalList);","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"applepiofmyeye"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"applepiofmyeye"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"applepiofmyeye"},"content":" return finalList;","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"applepiofmyeye"},"content":" * Changes the status of a Task in the storage file.","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"applepiofmyeye"},"content":" * @param path path of the storage file (to allow for saving to a specified list. See Level-7.1)","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"applepiofmyeye"},"content":" * @param status status to change the current Task to","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"applepiofmyeye"},"content":" * @param lineToChange the Task number to change","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"applepiofmyeye"},"content":" protected static void changeLineStatus(Path path, String status, int lineToChange) {","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"applepiofmyeye"},"content":" List\u003cString\u003e lines \u003d Files.readAllLines(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"applepiofmyeye"},"content":" if (lineToChange \u003e\u003d 0 \u0026\u0026 lineToChange \u003c lines.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"applepiofmyeye"},"content":" String[] newContent \u003d lines.get(lineToChange).split(\",\");","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"applepiofmyeye"},"content":" newContent[1] \u003d status;","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"applepiofmyeye"},"content":" lines.set(lineToChange, Arrays.stream(newContent).reduce(\"\", (x, acc) -\u003e x + \",\" + acc));","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, lines);","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"applepiofmyeye"},"content":" throw new IllegalArgumentException(\"Invalid line number to change.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"applepiofmyeye"},"content":" * Deletes the line of the task from the list, and shifts the rest accordingly.","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"applepiofmyeye"},"content":" * @param path path of the storage file","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"applepiofmyeye"},"content":" * @param lineToDelete the Task number to delete","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"applepiofmyeye"},"content":" protected static void deleteLine(Path path, int lineToDelete) {","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"applepiofmyeye"},"content":" List\u003cString\u003e lines \u003d Files.readAllLines(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"applepiofmyeye"},"content":" if (lineToDelete \u003e\u003d 0 \u0026\u0026 lineToDelete \u003c lines.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"applepiofmyeye"},"content":" lines.remove(lineToDelete);","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, lines);","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"applepiofmyeye"},"content":" throw new IllegalArgumentException(\"Invalid line number to delete.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"applepiofmyeye":179}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":" * Takes care of any of the UI related messages that will be displayed.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" private static final String line \u003d \"______________________________\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" * Introduces the chatbot to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" * @param list list of Tasks that should be done today","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" protected static void intro(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" String logo \u003d \" ____ _\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" + \"| _ \\\\ | |\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" + \"| |_| |_____,_ ,_| |,___ _ ___\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" + \"| _ /| _ | ` _| __\\\\ \\\\ |/ _ \\\\\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" + \"| |_| | |_| | | | |__/ /| | ___/\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" + \"|____/ \\\\__,_|_| |_|\\\\__/ |_|\\\\___/\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(line","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" + \"Hi Barbie! Hi Ken!\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\nI\u0027m\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" + logo","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\n\\nThis is the list of things you have today!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" list.forEach(System.out::println);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\nWhat can I do for you?\\n\" + line);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[you]:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" * Greets the user before ending the chat.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" protected static void exit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"Bye Barbie! Bye Ken!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully added.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" * @param task Task that was added to the list","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" protected static void taskAdded(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\tGot you barbie! I\u0027ve added this task to your Barbie list:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t \" + task);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully marked as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" * @param task Task that was marked as done","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" protected static void mark(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t \" + task + \"\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t\" + line);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully marked as undone.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" * @param task Task that was marked as undone.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":" protected static void unmark(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t Alright! I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t \" + task + \"\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t\" + line);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"applepiofmyeye"},"content":" protected static void del() {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t Deletion success! I\u0027ve deleted this task off your list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":" * Prints a \"[barbie]:\" to signal that the chatbot is the one talking.","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":" protected static void barbie() {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t\" + line","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t [barbie]:\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"applepiofmyeye"},"content":" * Prints the Task in numerical order, or that there is no Task in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"applepiofmyeye"},"content":" * @param list list of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"applepiofmyeye"},"content":" * @param indexNumber size of list (for optimised performance)","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"applepiofmyeye"},"content":" protected static void listTasks(ArrayList\u003cTask\u003e list,int indexNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"applepiofmyeye"},"content":" if (indexNumber \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"Hmm.. your list looks empty. To add items, use the \u0027todo\u0027, \u0027deadline\u0027 or \u0027party\u0027 commands!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"applepiofmyeye"},"content":" // \"list\" command","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"applepiofmyeye"},"content":" for (int i \u003d 0; i \u003c indexNumber; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"applepiofmyeye"},"content":" int itemNumber \u003d i + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t\" + itemNumber + \". \" + list.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"applepiofmyeye"},"content":" protected static void findTasks(ArrayList\u003cTask\u003e list, int indexNumber, String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"applepiofmyeye"},"content":" if (indexNumber \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"Hmm.. your list looks empty. To add items, use the \u0027todo\u0027, \u0027deadline\u0027 or \u0027party\u0027 commands!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\tThese are your tasks with the keyword: \" + keyword);","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"applepiofmyeye"},"content":" int itemNumber \u003d 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"applepiofmyeye"},"content":" for (int i \u003d 0; i \u003c indexNumber; i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"applepiofmyeye"},"content":" String taskDesc \u003d list.get(i).toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"applepiofmyeye"},"content":" int index \u003d taskDesc.indexOf(keyword);","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"applepiofmyeye"},"content":" if (index \u003e\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t\" + itemNumber + \". \" + list.get(i));","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"applepiofmyeye"},"content":" itemNumber++;","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"applepiofmyeye":126}},{"path":"src/main/java/Utils.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import types.Deadlines;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import types.Party;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * Abstracts any helper functions that will be used in the main function.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"public class Utils {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" * Retrieves the list of Tasks that should be done today.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" * @param date date of the Tasks to retrieve","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" * @param lastList latest list of Tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" * @return the list of Tasks that should be done today","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" protected static ArrayList\u003cTask\u003e getDateList(LocalDate date, ArrayList\u003cTask\u003e lastList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e thisDatesList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" lastList.forEach(x -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" if (x instanceof Deadlines) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" Deadlines y \u003d (Deadlines) x;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" if (y.isToday(date)) { thisDatesList.add(y); }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" } else if (x instanceof Party) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" Party y \u003d (Party) x;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" if (y.isToday(date)) { thisDatesList.add(y); }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" return thisDatesList;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"applepiofmyeye":39}},{"path":"src/main/java/exceptions/BarbieException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Parent class for all Barbie-related Exceptions.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieException extends Exception{","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * Constructor for a BarbieException for child classes to implement.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" * @param message to print","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"applepiofmyeye":15}},{"path":"src/main/java/exceptions/BarbieNoDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Throws an exception for a Deadline initiated with no deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieNoDeadlineException extends BarbieException {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * Constructor for BarbieNoDeadlineException.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieNoDeadlineException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Barbie your deadline has no deadline!\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" + \"Remember to add a deadline after the description denoted by a \u0027/\u0027 luv\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"applepiofmyeye":15}},{"path":"src/main/java/exceptions/BarbieNoDescException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Throws an exception for any Task initiated with no description.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieNoDescException extends BarbieException {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * Constructor for BarbieNoDescException.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieNoDescException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Barbie your item has no description!\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" + \"Remember to add a description after the command \u0027todo/deadline/party\u0027.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"applepiofmyeye":16}},{"path":"src/main/java/exceptions/BarbieNoKeywordException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieNoKeywordException extends BarbieException{","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieNoKeywordException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Hmm.. there didn\u0027t seem to be a keyword with that \u0027find\u0027 command, \\nmake sure to find by typing \u0027find \u003ckeywaord\u003e\u0027!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"applepiofmyeye":7}},{"path":"src/main/java/exceptions/BarbieNoSuchCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieNoSuchCommandException extends BarbieException{","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieNoSuchCommandException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" super(\"There seems to be no matching command for what you\u0027re asking.. these are the following commands you can use!\\n\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t1. todo \u003ctask\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t2. deadline \u003ctask\u003e /\u003cdeadline\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t3. party \u003cparty name\u003e /\u003cstart\u003e /\u003cend\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t4. mark \u003cnumber\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t5. unmark \u003cnumber\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t6. list\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t7. find \u003ckeyword\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t8. del \u003cnumber\u003e\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t9. bye\"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"applepiofmyeye":17}},{"path":"src/main/java/exceptions/BarbieNoTimingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Throws an exception when no timing is given when initiating a Deadline or a Party.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieNoTimingException extends BarbieException {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * Constructor for BarbieNoTimingException.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieNoTimingException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Barbie your party has the incorrect number of timings!\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" + \"Remember to add a \u0027start\u0027 time and an \u0027end\u0027 time\"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" + \" after the description! denote it by a \u0027/\u0027 luv\");","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"applepiofmyeye":16}},{"path":"src/main/java/exceptions/BarbieTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Throws an exception when changing the status or deleting a Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieTaskNumberException extends BarbieException {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * Constructor for BarbieTaskNumberException.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieTaskNumberException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Task to mark or unmark or del is not provided as a digit!\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\n\" + \"use the list command to see the digit of your task and make sure to give \\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" + \"the digit of the task you want to mark/unmark/del. (e.g. mark 2)\");","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"applepiofmyeye":16}},{"path":"src/main/java/types/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package types;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" * Represents the subset of Tasks that have to be done by a certain deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"public class Deadlines extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" private final LocalDate by;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" * Initialises an instance of a Deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" * @param description description of the Task to be completed","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" * @param by the deadline to complete the Task by in the format YYYY-MM-DD","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" public Deadlines(String description, LocalDate by) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" * Checks if the Deadline is due on the specified date.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" * @param date the date to compare the Deadline\u0027s deadline to in the format YYYY-MM-DD","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" * @return whether the Task is due on the given date or not","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" public boolean isToday(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" return (Objects.equals(this.by, date));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" * Overrides the toString() method to return a customised String for each Deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" * @return String with \"D\" type and with a \"[BY: xxx]\" tag","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" return \"[D]\" + super.toString() + \"[BY: \" + this.by + \"]\";","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"applepiofmyeye":44}},{"path":"src/main/java/types/Party.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package types;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" * Represents the subset of Tasks that are events and have a start and end.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"public class Party extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" protected LocalDate from;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" protected LocalDate to;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" * Initialises an instance of a Party.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" * @param description description of the Party","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" * @param from the start date of the Party","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" * @param to the end date of the Party","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" public Party(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" * Checks if the Party is due on the specified date.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" * @param date the date to compare the Party\u0027s deadline to in the format YYYY-MM-DD","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" * @return whether the Party is held on the given date or not","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" public boolean isToday(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" return (Objects.equals(this.from, date));","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" * Overrides the toString() method to return a customised String for each Todo.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" * @return String with \"P\" type and with the \"~from:xx, to:xx~\" tag.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" return \"{P}\" + super.toString() + \"~from: \" + this.from + \", to: \" + this.to + \"~\";","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"applepiofmyeye":45}},{"path":"src/main/java/types/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package types;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Represents all Tasks that can be added into the list of Tasks saved by Barbie.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" protected boolean isCompleted;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" protected String description;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" * Initialises a Task, that has not yet been completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" * @param description description of the Task to be completed","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" * Retrieves the status of the Task: done or undone.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" * @return a String of [X] or [ ], [X] for done and [ ] for undone.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" public String getStatus() {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" return (isCompleted ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" * Unmarks a Task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" * Meaning that the Task is marked as undone","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" public void unmark() {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" * Marks the Task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" public void mark() {","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" isCompleted \u003d true;","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" * Overrides the toString() method to return a customised String with the status of the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" * @return customised String including the status and description of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" return this.getStatus() + \" \" + description;","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"applepiofmyeye":54}},{"path":"src/main/java/types/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package types;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Represents the subset of Tasks that only have a description.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class Todo extends types.Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" * Initialises an instance of a Todo.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" * @param description description of the Task to be completed","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" * Overrides the toString() method to return a customised String for each Todo.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" * @return String with \"T\" type","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"applepiofmyeye":25}},{"path":"src/test/java/TestBarbie.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"public class TestBarbie {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" @BeforeEach","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" public void setUp() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" // For future use, currently /text-ui-test/runtest.sh is sufficient.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"applepiofmyeye":25}},{"path":"src/test/java/TestStorage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"public class TestStorage {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" * Tests if the Storage::addToList is able to add a description with commas.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" public void testAddToListCommas() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" Path path \u003d Paths.get(\"barbie.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(path, \"do, work,\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" List\u003cString\u003e list \u003d Files.readAllLines(path);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" String actual \u003d list.get(list.size() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(\"T,0,do, work,\", actual);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" * Tests if the Storage::getLastList is able to return a task of description \"do\" for an incorrect input of do, work.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" public void testGetListWithCommas() {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e oldList \u003d Storage.getLastList();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" String actual \u003d oldList.get(oldList.size() - 1).toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(\"[T][ ] do\", actual);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"applepiofmyeye":43}},{"path":"src/test/java/TestUi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"public class TestUi {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" @BeforeEach","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" public void setUp() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" * Tests if the intro to the chatbot is able to successfully print nothing for an empty list.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" public void testIntroEmptyList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"______________________________\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" String logo \u003d \" ____ _\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" + \"| _ \\\\ | |\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" + \"| |_| |_____,_ ,_| |,___ _ ___\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" + \"| _ /| _ | ` _| __\\\\ \\\\ |/ _ \\\\\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" + \"| |_| | |_| | | | |__/ /| | ___/\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" + \"|____/ \\\\__,_|_| |_|\\\\__/ |_|\\\\___/\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" String greeting \u003d (line","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" + \"Hi Barbie! Hi Ken!\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\nI\u0027m\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" + logo","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\n\\nThis is the list of things you have today!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" String question \u003d (\"\\nWhat can I do for you?\\n\" + line + \"\\n[you]:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" String expected \u003d greeting + \"\\n\" + question;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" Ui.intro(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(expected, outputStreamCaptor.toString().trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" * Tests if an empty file list will print the prompt to add Tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" public void testEmptyFileList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" Ui.listTasks(new ArrayList\u003c\u003e(), 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" String expected \u003d \"Hmm.. your list looks empty. To add items, use the \u0027todo\u0027, \u0027deadline\u0027 or \u0027party\u0027 commands!\";","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(expected, outputStreamCaptor.toString().trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"applepiofmyeye":54}},{"path":"src/test/java/TestUtils.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"public class TestUtils {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" * Tests if Utils::getDateList is able to return an empty list when the current list is empty.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" public void testEmptyList(){","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e list \u003d Utils","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" .getDateList(LocalDate.parse(\"2023-08-20\"), new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(list.size(), 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"applepiofmyeye":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"todo read book","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"todo help do chores","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"del 1","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"del 2","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"bye","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"applepiofmyeye":6}},{"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":"applepiofmyeye"},"content":"REM run the program, feed types from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"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":{"applepiofmyeye":1,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":"java -classpath ../bin Barbie \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-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":{"applepiofmyeye":1,"-":37}}] diff --git a/applepiofmyeye_ip_master/commits.json b/applepiofmyeye_ip_master/commits.json index d39d1cec..9d2b2107 100644 --- a/applepiofmyeye_ip_master/commits.json +++ b/applepiofmyeye_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"applepiofmyeye":[{"date":"2023-08-23","commitResults":[{"hash":"caaeced440ab911e6e4ac4e39e4f55de5f63d954","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"d63db97a9f9a47182b396f29f77e3db592049cbc","isMergeCommit":false,"messageTitle":"Commit message for Tag-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":1}}},{"hash":"fd1e6897eefb156971a6fd3dd791f98d94339d5f","isMergeCommit":false,"messageTitle":"Code recovery","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":50}}},{"hash":"124fa157e977274158057958aba242ae78c2d134","isMergeCommit":false,"messageTitle":"Level-2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":1}}},{"hash":"b4c7fedf690650dd0a2dc917749e378d4afade52","isMergeCommit":false,"messageTitle":"Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":16}}}]},{"date":"2023-08-25","commitResults":[{"hash":"f1e3964c29d583dbfd7d3e27df05db309e90a294","isMergeCommit":false,"messageTitle":"Level-3: Mark as done, created new class Task","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":14}}},{"hash":"a15899d075831bb22eddafd40e1eee63941b0afc","isMergeCommit":false,"messageTitle":"Level-4: Todos, deadlines and barbie parties hehe","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":5},"md":{"insertions":18,"deletions":9}}},{"hash":"24d5936476f5e096bdfd7a217bc856c2e110e563","isMergeCommit":false,"messageTitle":"automated UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":5,"deletions":5},"sh":{"insertions":1,"deletions":1}}},{"hash":"e6154f2a556be6f79600c99ae7edbcf9e9cbf660","isMergeCommit":false,"messageTitle":"Level-5 Handle errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":144,"deletions":120}}},{"hash":"9101f3402c76ad537d2248b52a28542ca3dfa433","isMergeCommit":false,"messageTitle":"not the best.. but Level-6 v1","messageBody":"","tags":["Level-6.1"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":24}}}]},{"date":"2023-08-28","commitResults":[{"hash":"45012ece5238ff3a80843036763844ab9792b040","isMergeCommit":false,"messageTitle":"A-Enums, using enums for commands, to inc readability","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":103}}},{"hash":"e1fde22d23e7ec65f0c152c371d006fb35bc8557","isMergeCommit":false,"messageTitle":"Level-7 v1 -- manually saving, but also saving many different lists (but not being able to edit)","messageBody":"","tags":["Level-7.1"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":3}}}]},{"date":"2023-08-29","commitResults":[{"hash":"64092ee74984de9cf4b8e1a52b01acb2ed9933ad","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":125,"deletions":60}}}]},{"date":"2023-08-30","commitResults":[{"hash":"63ba5deb617d56ac8348432565f860ed922e97c2","isMergeCommit":false,"messageTitle":"Level-8: change to LocalDate and added to today\u0027s list at intro","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":58,"deletions":15}}},{"hash":"877ee0a6c9cdf674326f8c3654662d0d5f200a46","isMergeCommit":false,"messageTitle":"A-More-OOP: Adding more abstraction through types, storage, ui and utils class","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":280,"deletions":184},"bat":{"insertions":1,"deletions":1}}},{"hash":"d2f84241af629451cb67b1f31be8798deeae210f","isMergeCommit":false,"messageTitle":"NOTE: working codegit add .! from Level-7 onwards may be a bit buggy until here","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":7,"deletions":8}}}]},{"date":"2023-09-01","commitResults":[{"hash":"a988b982cb5e31dd054d3f2d1e8293f423173b11","isMergeCommit":false,"messageTitle":"A-Gradle: add gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"c257b57eedd3efb94673e9dcc92bacf26a8aed47","isMergeCommit":true,"messageTitle":"Merge pull request #1 from applepiofmyeye/branch-org-packages","messageBody":"Merge A-packages with add-gradle-support","fileTypesAndContributionMap":{}},{"hash":"301ec2a3017fbbc002f4ce8862eca39e123759b0","isMergeCommit":true,"messageTitle":"Merge pull request #2 from applepiofmyeye/branch-Level-7","messageBody":"Branch level 7","fileTypesAndContributionMap":{}},{"hash":"6a703ff2a77978c246d11cbcf4451ecde1d92e9b","isMergeCommit":true,"messageTitle":"Merge pull request #3 from applepiofmyeye/branch-Level-8","messageBody":"Level-8: change to LocalDate and added to today\u0027s list at intro","fileTypesAndContributionMap":{}},{"hash":"623230ec2192cf632c1afa5f44c306b24c085cff","isMergeCommit":true,"messageTitle":"Merge pull request #4 from applepiofmyeye/branch-more-OOP","messageBody":"A-More-OOP: Adding more abstraction through types, storage, ui and ut…","fileTypesAndContributionMap":{}},{"hash":"76681a791f5b2d5abab5cc50f58253bf1b37e463","isMergeCommit":true,"messageTitle":"Merge pull request #5 from applepiofmyeye/branch-org-packages","messageBody":"NOTE: working codegit add .! from Level-7 onwards may be a bit buggy …","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"9ed77eaf03bd92e4f46f13a93a420095e882232d","isMergeCommit":false,"messageTitle":"A-JUnit: Add JUnit Tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":7},"java":{"insertions":133,"deletions":0}}},{"hash":"890c152d8f9b3aba5f33893544973bcf062ece45","isMergeCommit":true,"messageTitle":"Merge pull request #6 from applepiofmyeye/branch-A-JUnit","messageBody":"A-JUnit increment","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"applepiofmyeye":{"java":678,"md":17,"fxml":0,"sh":1,"bat":1,"gradle":2,"txt":15}},"authorContributionVariance":{"applepiofmyeye":36260.816},"authorDisplayNameMap":{"applepiofmyeye":"CS2103T-W12-2 JOEY..LEYI"}} +{"authorDailyContributionsMap":{"applepiofmyeye":[{"date":"2023-08-23","commitResults":[{"hash":"caaeced440ab911e6e4ac4e39e4f55de5f63d954","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"d63db97a9f9a47182b396f29f77e3db592049cbc","isMergeCommit":false,"messageTitle":"Commit message for Tag-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":1}}},{"hash":"fd1e6897eefb156971a6fd3dd791f98d94339d5f","isMergeCommit":false,"messageTitle":"Code recovery","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":50}}},{"hash":"124fa157e977274158057958aba242ae78c2d134","isMergeCommit":false,"messageTitle":"Level-2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":1}}},{"hash":"b4c7fedf690650dd0a2dc917749e378d4afade52","isMergeCommit":false,"messageTitle":"Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":16}}}]},{"date":"2023-08-25","commitResults":[{"hash":"f1e3964c29d583dbfd7d3e27df05db309e90a294","isMergeCommit":false,"messageTitle":"Level-3: Mark as done, created new class Task","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":14}}},{"hash":"a15899d075831bb22eddafd40e1eee63941b0afc","isMergeCommit":false,"messageTitle":"Level-4: Todos, deadlines and barbie parties hehe","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":5},"md":{"insertions":18,"deletions":9}}},{"hash":"24d5936476f5e096bdfd7a217bc856c2e110e563","isMergeCommit":false,"messageTitle":"automated UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":5,"deletions":5},"sh":{"insertions":1,"deletions":1}}},{"hash":"e6154f2a556be6f79600c99ae7edbcf9e9cbf660","isMergeCommit":false,"messageTitle":"Level-5 Handle errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":144,"deletions":120}}},{"hash":"9101f3402c76ad537d2248b52a28542ca3dfa433","isMergeCommit":false,"messageTitle":"not the best.. but Level-6 v1","messageBody":"","tags":["Level-6.1"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":24}}}]},{"date":"2023-08-28","commitResults":[{"hash":"45012ece5238ff3a80843036763844ab9792b040","isMergeCommit":false,"messageTitle":"A-Enums, using enums for commands, to inc readability","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":103}}},{"hash":"e1fde22d23e7ec65f0c152c371d006fb35bc8557","isMergeCommit":false,"messageTitle":"Level-7 v1 -- manually saving, but also saving many different lists (but not being able to edit)","messageBody":"","tags":["Level-7.1"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":3}}}]},{"date":"2023-08-29","commitResults":[{"hash":"64092ee74984de9cf4b8e1a52b01acb2ed9933ad","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":125,"deletions":60}}}]},{"date":"2023-08-30","commitResults":[{"hash":"63ba5deb617d56ac8348432565f860ed922e97c2","isMergeCommit":false,"messageTitle":"Level-8: change to LocalDate and added to today\u0027s list at intro","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":58,"deletions":15}}},{"hash":"877ee0a6c9cdf674326f8c3654662d0d5f200a46","isMergeCommit":false,"messageTitle":"A-More-OOP: Adding more abstraction through types, storage, ui and utils class","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":280,"deletions":184},"bat":{"insertions":1,"deletions":1}}},{"hash":"d2f84241af629451cb67b1f31be8798deeae210f","isMergeCommit":false,"messageTitle":"NOTE: working codegit add .! from Level-7 onwards may be a bit buggy until here","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":7,"deletions":8}}}]},{"date":"2023-09-01","commitResults":[{"hash":"a988b982cb5e31dd054d3f2d1e8293f423173b11","isMergeCommit":false,"messageTitle":"A-Gradle: add gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"c257b57eedd3efb94673e9dcc92bacf26a8aed47","isMergeCommit":true,"messageTitle":"Merge pull request #1 from applepiofmyeye/branch-org-packages","messageBody":"Merge A-packages with add-gradle-support","fileTypesAndContributionMap":{}},{"hash":"301ec2a3017fbbc002f4ce8862eca39e123759b0","isMergeCommit":true,"messageTitle":"Merge pull request #2 from applepiofmyeye/branch-Level-7","messageBody":"Branch level 7","fileTypesAndContributionMap":{}},{"hash":"6a703ff2a77978c246d11cbcf4451ecde1d92e9b","isMergeCommit":true,"messageTitle":"Merge pull request #3 from applepiofmyeye/branch-Level-8","messageBody":"Level-8: change to LocalDate and added to today\u0027s list at intro","fileTypesAndContributionMap":{}},{"hash":"623230ec2192cf632c1afa5f44c306b24c085cff","isMergeCommit":true,"messageTitle":"Merge pull request #4 from applepiofmyeye/branch-more-OOP","messageBody":"A-More-OOP: Adding more abstraction through types, storage, ui and ut…","fileTypesAndContributionMap":{}},{"hash":"76681a791f5b2d5abab5cc50f58253bf1b37e463","isMergeCommit":true,"messageTitle":"Merge pull request #5 from applepiofmyeye/branch-org-packages","messageBody":"NOTE: working codegit add .! from Level-7 onwards may be a bit buggy …","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"9ed77eaf03bd92e4f46f13a93a420095e882232d","isMergeCommit":false,"messageTitle":"A-JUnit: Add JUnit Tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":7},"java":{"insertions":133,"deletions":0}}},{"hash":"890c152d8f9b3aba5f33893544973bcf062ece45","isMergeCommit":true,"messageTitle":"Merge pull request #6 from applepiofmyeye/branch-A-JUnit","messageBody":"A-JUnit increment","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"af461c99e734a7060cd2201a11d576bf5e73676d","isMergeCommit":false,"messageTitle":"A-JavaDoc: add JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":0},"txt":{"insertions":0,"deletions":9},"java":{"insertions":272,"deletions":51}}},{"hash":"05719eb674d293e5446c43b592f48b7b2e80722f","isMergeCommit":false,"messageTitle":"A-CodingStandard: follow coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":96}}},{"hash":"2de91fed7392866b0a0c24f7a9e48f1ca594eea6","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"c89903cf35a701ffc430dec84876f3e3cb860666","isMergeCommit":true,"messageTitle":"Merge pull request #7 from applepiofmyeye/branch-A-JavaDoc","messageBody":"A-JavaDoc: add JavaDoc","fileTypesAndContributionMap":{}},{"hash":"c14477229467086d7517ec31b07c9482c083d3ec","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/applepiofmyeye/ip into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"db66db2891fbfc33b3bfc84d2cf41cd7ef55b90e","isMergeCommit":true,"messageTitle":"Merge changes from JavaDoc and CodingStandard branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e3e23d826b76e1dff6ec7ba7c9f53c799fb7e50b","isMergeCommit":false,"messageTitle":"Different todo list","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"70b2993190598afa5d4e442540588ed7d151ad41","isMergeCommit":true,"messageTitle":"Merge pull request #8 from applepiofmyeye/branch-A-CodingStandard","messageBody":"A-CodingStandard: follow coding standards","fileTypesAndContributionMap":{}},{"hash":"cb514e89badd6dd4fb70579705af32bd08f2ee91","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"614302530948319122479b275c7ca1eca40ff223","isMergeCommit":false,"messageTitle":"Merge Javadoc and CodingStandards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":90}}},{"hash":"410a1e910148356a2c04f96a53ebe5b3aeafca27","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/applepiofmyeye/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"931e65fcd2b1ad58b23270275ac0c37b354942b2","isMergeCommit":true,"messageTitle":"Merge Level-9 with master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"02f1996327b4fbb3708c3377b324394540b1130c","isMergeCommit":true,"messageTitle":"Merge pull request #9 from applepiofmyeye/branch-Level-9","messageBody":"Level-9","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"applepiofmyeye":{"java":949,"md":17,"fxml":0,"sh":1,"bat":1,"gradle":10,"txt":8}},"authorContributionVariance":{"applepiofmyeye":43090.984},"authorDisplayNameMap":{"applepiofmyeye":"CS2103T-W12-2 JOEY..LEYI"}} diff --git a/archive.zip b/archive.zip index 30ef63dd52ee4b5fc40bd4242c0a49943198a91d..4d5ddd75b3aba69d9a6c6d39ea32289f71414635 100644 GIT binary patch delta 912722 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

-dE|f+F!ut?=2>lU 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 z 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

ckOCp)j`xmWiQvBGD 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

p|??*N#HUXF+Lre@1jde-W*7b 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

blRHh)n!^Wfi0ni zEl&AbIcv&d9kc)cj<+RvghX(*S_rMYu9<1mgA_OnI6Lmt_>F(Ye_Xbpe}uEu;O49o zZmn@Fc)vDN#_8cBSLrz}lvRuQKpRf>;^~RescRrtJqin8;jA7*Yqer@dP%sJpZesx zXP$j6Il-`A?4W(C`m4UHH}PDC&1a zhQC71#SRa6El6Bh9zrL~1s2*Q&^Tbj((^VRbt)A({j<;Gw1As??yu76U0a$;qBUSLF+%G z;A?nD25Soa+j(x7IyT0BUuob&es(kqrKj!rBd#Tx&D;-S9h3ig(XrWFn=rWwAulkJ z63gK$BK7p>f}$N04$OML84CG&2L8k3xLdyry|IFT#tD#_9k2o-_vI(El_vLdJ5w z|7gkGI*gnEo)nt*RyFpu4%(~FOgbsg3WTG{@-0{oCGx_?!fb_1w3~&M9P|B^o;z6lZ2brLaAD@tdV8SX?6M|*y+oLNB#L4Z^dh?j+_0Ch1;uZ(|bd^?#9k7 z@1)|_hig*K(8`HCGf7M;AEt>Ld&Go^%F|V?-ozVVSJN7NnO0F3MdGA9+rM9DY$%(R z*C4_cR1&AQYTPfsrQ&X1+tGWsQ*Kd=b4Wlqfw}DJ5R~jH#8mtlp6zH@yYj^4V>L_A z@ky9m)17}>CUH)uT?A);_PIYrq4VgVaoO;B&XWG&%0Bjh&va#1!>3mi!f4O`iR=}8 z+iVE9EhFWoWIDOB%W)4)s5t`waKE9@upbn&N;9utLQmSf`qzrW3<;JE`>?_*H{EM! zg6pPrW$&BNG}TVl^~h;|JDR`WQ5aoSB8)0@Vg2EDW5YOKb&F4`lF3kUeL{4Z$Hv2N z{BO{_MIXZ~m&5g4;r46WiAsK2EJ@_62)qDyB7M9(9!=vyf);e3ZFOD*z7ZykPdk6(OHUEHqS4H0qetzra@xFlpIRxEVH^IM`LIZiFOg%PC9T5Jcb;LtSu2qk#wyj}`JCqXa1z6HwXKPT|Hb4b$hXjoBIyJ`U(*1+ z>ReNr-u1)?g{NqIqGQo*_p}`?%jDcD{?MGKxo_$Z1C4*KEQgYRtpOEdL#GD|f!O!W zA8s)Fm>jil`8vJ?Y;3Hm`OJ_gtRScyL25kaPU>-%yKH8tupgw)D2-|3M)s>s*5yFl z(cSK%Tf!zM1DeRw-}BR{d#jqxO>IDHqRu~IG#{-oo@7=d5UK4{PVecSX7?fcj%9X4 zV@Zt@Gq9?vEct%T6#mcn$yyaPs<)b}(W#)}*U!JuUavLXzw5s}d84@6no(|iz8_QF z#&h2&Vj2!&Co(G%Yug9L`tvGs@=7VMQ1EaFVJYY*Y76uHBmyT;4s+teMJ5135%Q#2 z*u;X4P<2#C1L@5ZNFl4tl6s2!jU>5(v4fEML8+&{mGaO}%uiDt=v>p7|CJm4jTisB zj78^@QK;odW-vtZCL3efvGHMC!=G+0_XTCaHm}<)~byd29?4 z`1}e#D}Ss-+$dRQ%CMZw_-F_~owZjd<$TD4ZCcVcsc;Ly((booCrPj4*a&QM4>UIL940DUSs$S>`KoTf3nuc7EE%ZiVue6}DVj~Be?u!7rF1(luQ4*P< zCHnL||Nj2rjhA*h4K7~!wAFKiC|v!8v?5{Ke4N@XpxS&cJm6}l)P_IbWgpdj$S7Fk zYT%e*7$CXv$RaqciF9gkeM@uvGt;)*r&aCoGgv7axt#yfy%c?CdZe8cOGqZTBOq#~ zPXv!Cv~1b_J59;94VwX29#=BNFw12prX#F$4$KZkV6~Zl&`ls~5J$y^dtuuSw%RBy zxrfLq@?E;j#^Ae;&IWEHBvQbj$aolsMvIA8#pNI&;YK2VCgz+GhFm&xdov?iCH^%| zvy^C_4{NApnOBRPz?b27wkNL_R8Ux?2=bPe$q;jwrb`9m7RmywLK&rpzi~i_IpfIW ziH8rH439hgw1vPzw-i-)*b(5oz@R_#FNFu2S5}*+xjDp;hzI<^TgJtICtyf{MQ>CpL(jkDpKQJ2FF!`!q7b(;{11G&@v6@ zszRa?p|)iyu(z8s;F_Rc$)VAn8h^v}r=&QrZ6X&n02u~E-SA@seh<@8otc$Yo!yRd zW>?YKCk*;SAy<%J?D=q0)ZKymeJKlp%d_y+(y5-iU>L@!MKY<3mW) zO^?gneMUJ@V5vG2;~tIc0XKsgwCh!*>r0M^%)fuK785}!xVOmUB3H-DZmL%vSy}j_ z4h^F(o9E1lf}SficW^xI!i zdX^$4i4rtAB+RNvtjFku$}S#eSvK~>Xq|@E>vthr9$HCndm?`YXvZKi*h(+Y3*h$A z8rcA``j7-gzMg=vNjL{mrNhcQo5<|Y)T^wsv4EYBp3CXY3aSg+mP9?#KZxK613&KU zZ-}@;u6Ukzga*47%43r(S|xBbvtQg;hzJv`>Lz$o<^t@sihdAsTE(TlT~P`0pBPOq zCU~z4MxzlY3K(w*xzrlozDw>}PF+|W5kYWS-rhdfRp6Fy`Mf?4jf@NlZN781b$tze z{p+=$VYqBQz1m?wKtPHAA09e6!sK6L)1l|SCmF}^{`mo?tyEDb9#+vdDb}p78s%EV zNSM4ncck5DAp$|(D*$9`j zVeVw}W^;ix#iK8M`N86I^K;Xc`Ho2w-sqk3YlR->!|dvLY3o4iD*291Xp@f+xVUN= zbHNQ`0=C*mQ^pC3hYE5Fk;q!-z^eB_ZJg9K;j8I z6uWVsJ6O1Gw!$6s`L#E7XvZxN6jfnulnFU?K0A^I&VC&ZII!bipPiT1?KsJiFGIi(t)lX>QGCxugla>SVRjM%EbBE<~{IUa){-mM?s7rs43uH4{ zeCof;oA^6_lNuYS-9%RLVtfCI16BIGB@z2t`+C#)t<_oRjqC*)`V|>zT_X15&*sd^ zmH=LKbgfM2R650>&q>75cL!TMn@+-C8)rT{s zk@326vN!U|^g_anI8V3H!j|8)>BLuHj{KT0Dv`)G!`;a8&U}UktL&HAE1V*#p(z?Z z8Hf5!hCZcW{hCyd!|I{Xgajv)xpr(TitcKvx zKW=!C{&@&H(r>GW!0w<)xOQ}1hv0dR@t%d?eOCJEk6u^~0wSptNnA5Ap4BGutcwtb z@J)z7|I%Y@>hoIted@qaAa-o-Zp6y@nbHcBUh13twov0pmR57_*Tvwl3H!#89e*m6 z(L2$4Kfq+0W!qc|41i3Z%gkL=K_{IlO-0w|ih<_88>e47o6ArUiOx0?%Y50_D2EVv zJMRqgX-s|pD{uk@o8{&Yp_EQ6(vI-L`_xdHO*R7q5HcoNH=Pq{$(&Awhzt`or)Pf6 z|GhiAj=aG6HF_(H9v#Z?U70Td6`_g58CRknNO)&5@$Mf0EXIjeLZMvAma0`g-<4MG z3?l#xXe~M3ip>^yPp^~OeRm#WgRgk<+07pEEd1F&&eE5SV!h2`ytcvjKNs{$fZl72 z#g17~ZKcbot7)sR2=Ag=MfK0H5f4vhBXP&m>2ZV;MgcE8g>@Xnx`)PbT|Xpx&EK5- zVW#d6nmHT*@O?4KW@xE-ud!gH-eIqw=u`X)?=CU0aey-c!X0s>+J$1Q{@8`~JPNJev+~IApJ|gGo5G5;B;%iq;%4E9ejW`A zq|r(`N_N&p$IOFOfv_uGL9y?OG`(>S;Y?@yhF3|d*7TNO)_q!AGwIyg$Quy_J^Wt&SyUEWr%g1%lj!wd zE^E|a*^^>mW9&IEi&R6M{qi?^+#0c21k5gbaEH!Y`CVC+&)DXV&34JLF=`fFra90go)F2>1ZvkL*FF6>VtV}fKlfIy8=cj#C(-K9T#taF zXEg6efgy!P8L}pS=K~`tM{~CGWe`g1Ul!SMhn8CpXhY6wOD)m)En<@(jS?G7CUcUi zlGaM%OSiE*_VV>p|8i3d=v4gsQ^g(I^$R+inSw_4lxBNd5EIu|JibW}rw#)pKFBZ# z#v2?mSYv)uLfk(1Qa7D!7-~FsOZz})ZV4LXgr*nX%(=xT30@`D2Qy4^XWib$^vzL( zi^g(9H+yZa1J!m~LmDEm0{cY)$4`a%`XNa@Y#r-`c}=H5I?`bNELpOACf{*OeaaZi znIdPA{J6X532(uBLZ!UP(Se&o7^Vv~;fLddS=a>C@0_3ZF{!H$>c_~RE@!9vN3=XtRk3gVA-hmTamFFFj+od1L3QUtLZ*FW zPEsC&Ass`LdPdm1Vf-jvP^AFdQ+(ijk`Ol$wBOkf+o!jdfzZCOwEf>VBokarFsi;y zH8c=V1WxRmYVs*<;y!>MkI~IYCd)P&4BLG4t1XnwI3*m9Tj%4_7IT9Zx#pQM_U1<& zsi}~T_-@ywxb{I{HlO_|CC&@i>d@o}7FSA(R&UCpU;2KEz_oK{;v=xk<4~pfNkVhU zG7%&WTX%H#Vsce<1fxhGO=l3EQ)N0ffBt+h1?Q`;i+|+q=zRZGAxq&xHP({R8WBVk z*QIW_)SsCAxfy0M^i4AZf$gmP%J>C&d2r5opERpO6xUr43a+XI2ozsotZRTM(kiv#GqvE03#j_uSC_h>C8MBL6?pXcv{qaoB9u|gyV z39_ls(Z{6K*8%LLFalq6kSb2d0qN|qYX#lI-XGmM!9Qg;Z5I`0$+%v@3*)-tQxfW` z3)}_##&0D_2e4FIc88#K-7`h7F-GYgi3{1zrC(V`A~KkvJ>vm%Fussk`@6P#;1BsO z)h>q5lbDi^){|(i&#W+G^ljFRQ0!3r^U$##iRG*aOXdMq8`{%x<(2X~+XLoHbILhW ztm%a}dFCycBjmd*!zPx0Sp5Snj0UBx%Y`^^xff~Chpc2^hqog>Z&;Uu>5Y~NTc`kY zvXHLwvl*-F2mqW63CG?*I?*R>*cITpq>eQevFa71{h_G8DoHmYT!#`DkCyeUn4h*u zWd_dmFH23;Y(|pI=33SEAe}ZdM{AOkdXTMF1F6BJ))V3E3-7c6)CtIKiRSyvl*zfd zKKCo6ubAg+NQvm?h+DG*|Ig38n4zo9k5Y2w~x`R+D7n1HbD3FLlnH+~S)^O58W;fTXqDhDcDKF)>?RLl)yb&^U!a_n4+ zpq2{z9ppOXh|R$w6*(iHTzRt{Mo>v;w0^IVsGa#M#M0z;TU||CqN|#pVQ-ejYrjux zWS>EgGSF92)0T1-^c%KC$JbGJ44OlT@OBaRUQ^c{`~^PIK7g75!cmV)yB)%b(@6B% zov)Di*tgMDK0s_+D!Wgt)|t}hS|VNToa_(-!HIW{mKsYAJAvF)=&dft#G%Dq5pqO2 zdXf%%6&F7k>KHH&GUqktxeGLp&qpiO@VpaN1lA^wDnF_}%~D^T zgvk7RK-TeYxLOz44`p^kJ>&AaZN$kk&q)A--I42G({@aVTN zFK~nE6w`@Q&AFpWDB0%Lnte=zp7d4azb=w^` zNbq2GY^)psZ+K*uQP*8^DHY?eh=713`3FPZeb?9*s;GxZT}sO+N!?|v)@OqPmtgFo zPvCRn7*SbdAzvU$YLZ~O9M}AdoK`udF#sNK=6jR^^brx%8rR`BQrLl{8mM9yVsNav z-^Q`?AP)cGcl%DD!Nq4*0))})&3@2{k9g>33w6S~ zm@(GXfl~G1-oRD(9@Qi2!(==|Dq}d%j+ZXxgc+U9^ReH^W+Eh&Hi$1(%(;%Cqm&c% z?=MOJ3v9D~EX!Q=6fQ*XTjb;M27Z5jR!Eq}7&&P~6b!tZKxKofy&UNH_6(H|@7h3A zwUPf`NdWBEM1*1nm|hGf)EgeKw~% z6yy_>y06-mHb3&rV_%{*bbqiTww~@2+8?cAwzO3sh`$aEaV0=oMU5c=HtH@N#&nR@ z=Rhrrc@~c(@D~AtSf+C9lqTA{5dAdgE{1~NuK~JDu&gaX!&LokX^(`v=(^esRmLV7 zWIf9$vIKFMj1Ow(QuP|!U4YU@GDV#AwEtS1a$jmm@jO_XW(9`2nHE8fCO{S_td^~9 zU(S{?0wGH<@`C*5^Yox~Ml7HD)-a%i#wrR0s$n(_Axu49y%5(8Ug#g`8^`c55|bwD zDIaZ%rzScFs_*FMS!r+tc413{?#T{PsIN%#jl6t0somv>orNgr1PD3Hw(c_-$so%q zvst1qjf@@ZAb#JS42;Gi2B+YO@|9&8H|nV#+C8#~{8gydeYZxX$%+)9&cq>rQ(s2D zjpBbA_sUI>3s!KcC{^GD!%graA$T}<Dn# z@>X%PUcOh1!~G&P3F6Z8`?R#qqXF`ghxn=gZnhCR#heRAt>ts9k!GP2K0% zYNCV>e!vMR#3W}po1VgrxsvAg&6$@sJLXV}$}$JAlz>a{AWlN6IfHQKkOsKu`3M|p zH4<~xv2>M5;0s#DTPG}48n(pC{=vzXwL_S%Ot9mFSIE;e2_G>t&W1M4p@#f>75Rce zi2*0g@)h7@&f#<)A48lP0=a@i#r(DG4>O*8FY(xy@8i|^{DZO;h(SLo~*T&3(8Y_T5D=eP- z&oB`>;^GO64z}MHNhW=G z&(0;!**AOMmr3?fh-0~(jo#^uD+=TGT#MQPkAyI#Z{e|=%#bR!#C05oBw^1HOr3^0 z8o|3if;AHzcRb@}_*5PvPZ21)$Q4yDkig82GWW`aCX>JK@`*0@OUSZ$fRnm1)2mnA z%Ty3TOaIEdzzbgq2-8<)REIBFD<#4#RMZVok9;cI{!M|aCmY&&OW>jI(ZADqy+?o# zJaV+SFc@L}P(?kDY!L-VKhoHddZ+!2TF&Pbh^c{lifngLqrUAWyUDveW71===Hl-R zh|A^V^_=|--(V)8HM|8=hk406dw2OmzoabEz<40rl8qutrr)laW4e*cli zSKH-j_-QY{HPe z@G-1l%WQ0GO=2O@*D8*#7<0q<$(+!%WNUFu0sQ-HWtfhZtxcD(e>Ah#SXD0MNrd46RkdzzgUu$50kS}?}m zAPpv0F6;XI)OjQR4!6x)X6x|71R@f?er!qU!+}MQviOn~Co*<^*h>j z9oTDwcWzJk^+{jzSq<*H5CK4$U`K@{==U9FPy{Z^>?m1^YQWLQirD{q;p2*wQZ!$N znnihbDBJ1rZ%1h!;C;snXnu^4ySX_|j!n_rUI_v-J$U?!25z8yQ+w_9fGC@#d!nHG zYP((k_ut)}6*z)=TN`PMHOJe>PLx#2+dgF?m~j!G}LP`b|@_fWorVTFnxd zVNYI#>z%W(P?UP4b{A+NjV(t#sn&T-@Q%_k9Lr%BTFJuU1M&wq!Ir-c@p*<$9W;!h z2V?rbX1hFqeJ>?|93cA~sCB-#GI|%9WkrQLXxdPbUYb~JN|ni&+?B67`o6Q)APxGb^u|Aqk!x)&EgG6XA6kh7>jk}`E8xsP zG+zLoWsSSvu>QOTBh8DrCe{rEB3S1vSQz)4k(wQ_;Q3qRAJ`DtLoheeIJyV{Zx6~X=pfs$&3WhTBKPNK;$7(9(lhc}uO6e;Y-EhIUnO|}Kp zGHZ8D0XK{=$tQM%;`!gbQ-a$)Nw!};Qi6qVlwc#*M-%yu*vS~|Se-~ZKG zRVFS61_~qo9RA@@`P#0~5Ak;m*z{ZLj$1ZRZ)B8OqVhjRSM>uw_%*864k_@LK*Ra&kx2QN&#k`U5?m;|>r)>hX2ieuQkbD&E`tJ7mihQD z*kl7j3w?k4PGaghqfg|Y$mZ&i8%i7 zD0e*G&6k;=Q^~FJ?!udCJ;i%}QYv=OV7E-}xC$Li-5fSva`HY<^{i)pusc)v)N$Gi zi((scBzTWzwGZA}R0%%Bl#T;1+!nQ@Wb57C5#ebiFIEWBW*87ZM5gq1V2saNoQ0(! zLv1qSR{ZOjgw2OoPyGBmjZ>~tOtOsR5>OwiGgr=RWIdL0@gaF=hO}4y1S50U`DhZ2 zMExdrRrxyQp2AXm5U|JzI+UEZhR-~s6*2TtN`jF6eMPf_w;l~ z=)uzGv`_VVwEJ`*$D;2q3jOdZX}{N>DhC>E?k0)wYLRewzwS&CnA30n9)z?0Jz)Ju z$rcH9w|mFI0<*3HEK&Sh*Y-ratz;DRAVvQY3Ls%)4@&b~uVCH4e^5)&qxWP<@F11mV>|)I~3=Ck9bKqR9{6k+@<;N8Eqc0>@3MjmZ-8qnn4HY;Y zI5S}mOA+V`C(_iNlVyJ#i$8S8c#*&1i-Y7*DRG?NDbL`~s#NZ5=J;g0CC=1cEPR>5 z9)*g}QzkJ{)LC1Vi8x%Yqu4(z{{j0IpbDt$71GFy4l{WUrR3s`Dz8I-;smKbPn^SC z^!x|%pQ!Knk|WguTJi<}+_^i9;v07lptqA`Gbq&RpD(oZo+yvsS5s{E3W}lTu0> zQL1Xr<*KYj&;OeB{*xB*wspWyX_r{f2Q6d{}z-TIo94ssis(_Bp}k_ zeIb}QTd#u9m4igmp_uNLnl-5^GWK*3D8sy zITmYr_DbE#x{328fijCrxkK7S(P={dSAVih#qB9lzrBBo_=hxB?55e4OZS z2nJ<=P~2D^dBA{Bl1J7Zt~3#i8pIjKhmt&Wf3n@p$qWO+X&PCeT$~f-I0Qn^#H*6y zKOS;t=t+O2>k~4uSZgaisJOsEW5TI$<;5(*ImlY_D%JRphoI{4&`GAzEq2|+>c#X* z(umMf;zZZi6(Cw~Mc#l=*&vNo?pc0NxTO=KjFqELtgh__`K*%7ip~LNUnjFAU71eB z#mKUWfL*65bJy{3Ihz5JSoNnW6S0Z~JeI2n^@@M8P8810Ss_9H&8kY9ny#|QrpEhI ztqG9bzaSy3+69z^kk?vB0;>YteAmXl`x)pFW}U{XU;n^^-o2G9-WsIB`Zr*;V{I*m zbw9s`EoluyTft)X!6qzk?+K zEzo~Ft8RgFj?_|M^Kx$)#{ML_2?L5UUtZGf%lV$pMwxi7et=B5H9E^F=Z|ZR$-tOa zPz;P`g}o)?1HIj2jjgherSXB)ua!TgOJXV0ZLoG2?Mq17FaODq(zu5gA5K3YJHiU4 zTQHdH3*0Ox?)2>B^zHfkGhp)UisNhzJ^O!xH_Mqj`^VY)3uM}?P#CsI@S?ZYH0{mF zFK?k4>lw@OYPg0qiH0Gq(7R@3q;p|kUhLal4;bx%wO}DMkg^W}@Zq5fj-x?(ut%20 zOd1-2Osi&D6y?`f0bNRU6N05{gJk9Wt{97}Ev^ z(c6keGpZc{kOs6HCULAR!Wth!80l;$nP{_!qc4HydywD2qP-Q+;Rf$mwYE4E`pG-s zHfp72lBT7mf0ecIDW+Xo9&lCqYyf|VH=HV=VNqf_pl_+VXl=oEQ(2m1>lhfZep4D4 zfT*HT#kK&$<# zOwWhWOlY1;pZ)BwZlf6B9|M|L=}(@1pp!uTA0#K(u0#YSFPgcAG`A}4QlWo*^85jj z39p)>4O*Qi>Vj>3L}SHNJGN+Pim=VeFTJwZoLHYK)8=vJ%Os_`9w3>?qW{#UYP192 zKwZ~v-N>ejBpbhw)2F_aSMlp;8G?Wg)Ph;)Oq(rPOwWfwm2@(Va5x8Qxa#5jBFeyg z4Z13LF2se=9H`eapm|aJ0Z4xUBWQKsUPP?`I#7Dm6wr%V!geUu#tPh_c%!Q74zj{@ zyg${tZnT5wKy4Bm(bK3MJO^r#EVRW2ZwsSP7mWeq!>GFfB5gQsfEuBuAd<}yrW8O~ z5Uv!w>LB3xczbB9y*yU6lYOdPY2;xbzpBY`la)pnk<4;iJLRC2w=#c5tFj9ngd`tf zl3Rgpy$4XT8g1SQ_lu?3&)yXB4B{0?cam6$wDj5yT0!{5odsUrm=*%tpK-3fXEMy8-Z0 zCBtR>ht*Ec>eULriQ|98OmyKABe!wk!b_Q|cJvRcc6N$gWmB^Y*VU?>3m0Al1?(KW z*r|Ns!cP;t)M;H&TJhT06+dmga21pwaIhS&jY2fTCYII0RU9vT+R%(PuHtsZPz^N$ zHf-^7DL^w??ZIVwJ`8~1ecZ05$lN8Ccd3<13N5^qE1~{Un{j^xuS4v9(FPY17mxPe z$z9g2BC6B7EM6;xZ24{pNWi9DheX{+Z1?g^<&TOLF6CEQ8X3CC;zdW5)ZvbDhVi1L z5}Z`J5DegSVP2gP@O%h9i7mzbBC($6_?)RLZUJ5ZsUQT1S_Mf6OaX1XvCg{(ERyH$CuHK)nH zmVR90vOs9{+n``7HM1B<@c{iB^9qT8=c7zaZn#RPH1kx42aF408eEe(#%h1oR)qL^uMIEyF=QekmO?pATj1;m1|FsDux+gX3z*1?Ze`p|YMNi&?26Tl}& z-qH6$@tl7@{&2oC|Nc^ZyzfDG-xx0y+OnfU-#yX>$39>AK&D3>QB&=dc z+Ywp2QOW8gz9}n?Y|{(OEWefrnN=1RHW=Vj_Pp28_P(RzCyn}!>dk*xI0<|1L7MeV z`xbhU%C|Zd|HFS7xDB6bgeLw6;2!RD0$HaN(iDG(cj`QLe)bo!pO9gr$n!JScSZUy z=aDS~?<@iM(^>Fe>48@4Xh-PF%$Fuz&ZiD|%-P0ycBvrkl=ItlyHKE1jr&fBq5=l- zV{zn(yI7b8;^_u`rLF+VZ-x2Ckv=B6eS>tL{AL%ZMw2RBop0Tog!GMl$e2nL}9K|u7Uw*!h@ha`{gIat&u~3^~$iqn9+e`@q zc~zPC(RImiMnu6&%}bYEEtU95WZDXWE~L-3TuO40ep7FJiT z-y3Wq!!Iuf-irlzExKo)K4W=jA6$R4e-+nkw@z5ZTH_s^Yi?4h2YHCF+NzUp@o+u1 z7j%oIBq`<5By%wLgzalfEca~+F|SsRI+5hxBevqb^ykVhpV!o~wNLLYdQ>lrY(@SqE53EHC*iw0olLw%G5-4=f#m;yz0jS0J0f?yD2knG1h2uqs_v z*N5<^^x}_Y-!E!C8c6x%9i8=~=d827l3)FB;y;}D{hs)xKvPzMp?x2npZ9z~VI9|% z=xAk^wG$wPlP)RSGR;yg5$5%7W2C+K6rtn05+hyf<-Vr8&TWuROJP%)Km=GBP&}jv zoXREEJ>BW6=(-Xx685Z;8;F0X-qRCY@4EG>p_0a91Q}L=)$?+(mCe@cAzPdm#_c$Q zi*9d#qud-~?Pgm;5nyw;Ra>fMIO-|-yB>9wj`$Aat^gDQaaT61S;SpYaBDU03LzWC zUDej0(CeTIbV&FWivHS#UwcSb;e~iRj_#sZ3J{8$!><}kx5w%Ve_MY`(OAgP+a8V8 zHj`~U*21>i9*?C%s;BUQ>8y`PSUIWm1o-iudfz&E~yY%l_cWz5kxvwUf#I zJo+Y`xZRe{Jh*W0mkXEn#Gs6853bt>*R9EQTd{@ivE%k)>aTw)ZrRLzyM7%hy~CY& zZhLjlKKNR{RbOk#F7DUUTE6jWx#&l^m$f3;9s5|b9N%gg3`uBl>^(SE|4kgLM6Cbd zS$*)V-i2p1)V(j@Duw&(Gc9ebJ93&rzD2|zQ6<;0UR9**1#s4}PoB(KS6bPDFiVhb z+}(Pv*tRsJDM){H`)MRJgbWmMdFsQj*`-GcU?Vc76>2}!L~NYg5taMnb8nR6UZ;M1 z>&70?j*oAXBO8hhP!^6UK6_dRjwu@sPS7>f2g_!+=*0J5LVk4wowRF6`c%j(R6fRP z+(Lj~9YL{8$Bz(UMnu!%ze0Vd@|P8X0iP7$>+CXR46}zZOo}5byVS1arbs7bZi1@X<=1&;kK}` zs%6BbFspwH&J<}?-v+Z86%f(9`JNLk)2t#JH?4t=9Y|75kES)>ZP1190Ukv9c3NqANcM9$X$Y9lrfX0bb@zGL<_kGwmMRz??S$d_FzcQK@!=U zCWwQe%VJ2xSThzwHdyao(z*a|3L60}yeVw#>&$l_`l{&RPI8z>+Dcc5kb#U~oRcDH7va!i(8hi zK)PBrD_t-O)F$nyaR9uHRB4;vbswp6*XoB>QmE6avUk?&=;Yi29s`S32C50UX=nA4 z;n9C%SE+Ju^Rh1Y+*zv9^&Q=l!!(%t!?)4IozWnF>H8$> za%_LQ?DhhQm<`MeVfAuMEhll$FAtp7F2{dj?+U{`p@TT~1tcfBEeA-*!86ew3kzEf zAB2V@u#Cy(+>vta0uUzO$ zh}+VIp6@Hx7y8VG2$D0oIKrMi73%_AN7!~*CPI#vQWt=c`Gf;mS8P%-(zC8xS@eH! zw?zDZP+0%e52K6^sJurt5hx*_4>$yon7wl@GX-LwqDWz+q0foJieUSNsKQhYCN2SD zGL4oqj|4tFdvo&3+Y7$L2n`G0Z3svH{ct%~8s1l=|Kh{x2YyQ)EXIF&c5?dm{QVg) z9u&XsMDdkVNoJq24ao}ljNfcpA(>wGK&@VMEk(P?##MNdtFgZxPp!|Q)AZ45% zB^@~sx)1O7L$jg})sp2ts4<=Q*9_YI!pww{FYqYCIwX&thTGmzEKCtm?rK)MZ*^2t+>^A+e;Y>v6eLza?)>)Op|cL(1?z;ABcY3PO5 z2RRexE(#Z)_RI`y#Lxz3^aY{|7Eim2rj`;(^ zjoc~XB<}9F7m*hw1Jf}F1fZTl*Ig-&u%F?D_pF*m==f!A^r^=1bR0!On{w3wB=In}VGekfm3{r(1G) zL9)PhT{%jw<)RJmKB`603Sb()S`lu zZ`-w>KLDhUI?Cx+!d7Ttt6)Bz?-ycEp2+bB1+!QSf!FFbtDT=R3H7!_0#K&7Uir$>aa<4RXIInHG7s`)j*9%3 zvI?l08x557X$&|v(7#^t zJ%O~v9*KV=_=%WZ1swUwnwjlk2soB*o{%hXOsVYh({j;|@_=JSFuZ{$99F6Z9Bbo@ zB&Pm-Pnn?Q&t}Z4d}%gGie00z6jHunfaQkTg}(Udp}>3HRl|^HyoMnk-7o$_=<6Z$ zb=RSB+GYP<{X^8ceye}&LrTl~&~+4YB$r*ZQdI)6Ehfu2 z7JqCB2j66C(t`W1i_)`)rlj|%DXFZC5L-e#--Vic*jUye?OzXuH7{({L&yn=y+Q4e z44%aD@!EB74+Ox@({-sf8++s(JuHm{tT$O=N~Lym~~Qb z5bVMMWe0fqDLtjgdc2+%QD+tkq;- z!{b?yRQ8A}KX0~@@7z!z;`aA5b63JHSxIi2(JBA~Bj8mGEa?P*QDGu!IVvT+0D~f6 zRT?xpjetR0%L-|Me-(0lajB$#6gJ$99HWzopCok0kjA_+7WP$Y12G87M2A~CcYuF; z5R+3HNdDv5MHNrDdexm)^(GAQ{Ta~B97(dcn8wkqytIW`y}RVhy(Ys&C)!V2q>VyLPPg*_w%KjGl$uxN!Wh;vaa_V?Fx`pc_z? zao)7ZBv*re;08J1^5JADmVURJ&oF-^l#j9N4rUmq^_Cu+WAL03{KvDs5m1&Ok~mf% zh|0QCoZD{boPTiqIF5kU0tg=};Nju((ywE}d9(=zrR&f3ZD>6Bu_W3O9F#=bg#%^* zVAcZ|2QVU2V2`%m7tJt6n|;v?E(zQIjC8)gcaghktL&qO$KPM}(e=ClZ3lm*Q#WYR{?=jbLG?!T#@@kU>GIU{}CR2}naRc&p zv@U5YMYNPTG4-o*1ffH6@Hc-iKq@N4NXf9Pz5B=;V|H82Z-^Zyn;Jwbn_$^3cEbc^ zTR{NlC;)eSqEQWZxu;hG&4m1B@+);4eB9I%|(p4l*VnwYh}R)2|D**MXu_U?bn-JX42l2HF> zaE%BBSBTzDNrwg{nTAt0c`t5ZgGb1*kFlTTQzY$-qLH5WPQ5uVP|w?eK>%|;poT;|C@Ais~OiC-Md-+ zp1sebqgLF{WTohu!pptUn?$8P1bsaWn-ppC$q638AwuICNt8|a;3;6&aRhQo3oax#k& zP~WXvdg&=g#>TQ-GkeNdP%5Y8j51sx90EvFGS!2wB_oXCKi7fbL|7%M|K7iq=^}^* zU=;srTF`1<#t7qBsVGM|=RAmTg}{hc%$QtBL1=RX zib^V^UCQGKBS`^|OpLvsJ_Y}SD#wl2^DWgcnOT>n)q<@$CD%~?XCRjeI6v`T!R5VWzTyZZ6yT~Bky1Zq6^4jmJZM# zCs30NxW5b`P?f2rM_!;dC}LPx%TJaBUad{Olx|ryIw#fOa%xm4rM+xd^G{$VZH9A_ z4<<=isi_Cqg+5U}1W2(W)1lWn({ZIzJA;4AyhK|j_3k)r$4?BW99n$4mWtMd)u-lU zYH#S>L}P*rdVDYaEC5fOnVda8Hl)3LL+c1rCaR!fuLGpuCgn^Rmk3Y8lwN5RPe+&4f+J;Hf7;S&H{V_bg z7nnrIjIv{Rw~Z$3oyE*uDFf)2bAb8Ds#m)tW!)jFSyH~Bz4UA6b0IY~(l&1h{1%*5 zBQ4ctPXj}3b8xK1W^Sncditqksg)#=*4p4|bu9kN7s@JCug*9;RhqYE8A?eXUG4#1 z@zyOw!%TGB@r=)e1o36HZXth~ySivZY^Q$@pC@Uve@}3oyW>hfR*c5EYpnDeKuQaj zVFyio05YUqhV7Q6=8M;h7m-hTgm>}ba~XBj#Ruaus%g4?+SpfW5CqQQ%VRcLqSG}$ z=AaM@?zfF|66sx{PFlTeYl1%Fi(_3ZxY=Plzh{_*Z0?jXhzq6N@H>ArVJt>=ZMOLw zMZkNp0I-3%(lp8B`Ku;5CbH1*A;IJ!!Q>&qpv7z10~@=7fZV&9O$+vZ(&LoGd`dOXxvKfNs^oKPEGV6QeRRtLlA%~|$$vZ> zC!r`m0(PcQmqIu3#nfFa{E+r!3wcmL%1M`bQ2gW(W4Op~G+TV>dg%zr&pxrpfI>Tx zc9j7I!Jl6L67YXE%YQQcX*v0c58qhZuIy8ZoaE@d@h&IVR4`qAmCe7ayvRfEukLag z5Cq+l#+5;RW^pgXU#55(msRtxEh$|2iDZzHFJv#k%Fk`VQ@HpUE^Vf8*`Vm<-mhoo z6fXV-v_eCbFh+Lw@iu$5lEejC-B`=6ilAxKTuSL~!n1$O+HNFm&>&vMN)JgY2r>f+ zC_7B=y1XMkECV?yrew09`V)O{NH@Lw!J3EO&N&Zcs&tuJ24t$#q?YYm-#*e(ki0TB zzFOp!u_3avyfTR8r6#XT#tRTB@V;6qDywBt-(=}zS{gW)4DYqIC6|n!LuTK2Ycq#T z-PNj+sqBBCMrXc3Nb4Q}n?lkp%p_tHADcnKPUrv)<3R3FyWBQ@%Pru&Sn$|lZrh6& zO>)~PALAjl?f$2>b(^~e8Me&)r=N?YD_wXsbya@CG7-mNEFjBI==Ls5GS>q-jPvY} z$Iitx_I+m&B}s5K^PN;^ev&m9KNeDW(SDKdFO7dzEK`hUvyfcE2qbn&=ZZQ+$tcIysL2mc3MC0et9d31WFg=UReT2$e8F)J)|hu(bp*jPaKT&xhdRzB>2kSC3vieLq)FM1s2(S2yhO;YT2HF5%|YWo zzL%s5D1)qaPl%hk&Azy=xni69B5%?IYz=>qZhUiVfR+|Njf}rHczI&{$M=%%4^ati zL_PE-p@JEktUWdlOQ7g6}dk5hGaO_p&i z(=IfDj+-TENT1F`Xi!U8+HLXww33f~UpanS%8}+1{*-p^pnS;w&AHqgQ6d6mBOHHG zih=Weab*LN4SMKwz{{ZGKfaf18j`|fOg2!xcK5QxN=hx!DYiiJ7ZR~Q^{<04$TGdE zk|@G1e-e0NGheNo$uyXG%7F+`>Odj>=;LQV zHBSVVZJ+^r1|a8gcyUPsGeGNZsZD>h=Vd?fAKwe!K?zJ6?}F>K9YO|8Wv9p{=>29W zjb49 zQjHLl0WyhpCD)fpQY~}qffS-96sc`w)C0Lgzz*kU4mHiF-;B2KGlt-ddc%Lr3SRKd z;#W{^x?QsKtG1g~nZ{s2UV}rwX|nUHr%jWc-v-G8m*-y~;ki7pSoPWPB#zw`tsZ|q z?J}`JT%^*)?I(8J_xM7gUCYUp!7g_Fh_gtPpiY0#!LdyJ^8E7Fr z(R*>i^0_%x@_lq0l11h^*UNAseGX)Q$15GLbte-)NwQ*rAoTpNPPCM(9J}ESlG59Y zLC#NP*2|rc=cT;r=k(4Wmg$G^+)j*0#qUZ zsb>Qd$S_XpUR49-W1D|o)i&C?X8Mtz(b6WLkh;jPRPI!h!`mQDo7PYp^qElpG!hds zS2xI`PL?=?5qRDK1e%YX*Rk)aj?-h6Ux+(+$WauUO!%t=|l{S#RLhuH3Y;|;+ zYPL`Ex&|@VYr9JACs&WZ4 zOL1~Q-dBKB6UjM8?WueV?>?1~O^%Ud8aFw9IJVA!X&R%&Vhz*d?=J)9iRa}P5V2J< z{&HQ>hn;&iT$j3Rx@cVKdLCZ@0Na2pR+Q;iR*H!ClCE(1qEHq(&QP9h#vutI#|J!J zY|H{u(OLMze>{I1S)gr+)Mls}D%V)-tNa9Rf|X|gDbV@mR3qoRQ-2%DswYeupb2U< zv!kF{$g5UJ8s7uufuJiTPmkH55nQj&mtMrA;_2ZF+6%<-ldVgJiChT!LKlh##QjB6 z@W|ORVLxL4olKoU zp$I=j%g{>-7a*3@3`ee|a>`q&(HGbUktB9pww_aM8l&49l6#y}-RMZB5@)Q0($zN#s^84&?Z-1N6I3{I2S+r}$`ncdwqZ6Y9no3MdRM13#wLlK(l}@2j#D}>?B^c> z)|8R$9n^mqZDdymHO>#&`a#_d5u{<99`4S(G;aRmd$~LFv#e!Z<;+)6oZ6!rC_(7p z+U!X|d&t|~eJCqY_?|W>yZbHUOquXo} zev&nmI0-Q-sOBF@9=po&CD)CB>tL4pF;E=z%7RFtK0xg$x%tvq5O@Z(duL0JdK6Nj zL0&2pIllabl2MpZv)FgN6?R#Fg^*;K+TM{|L8#=)7>mhvp>AUZb8)o|-9BGj#NI4_ z!sUN#CT*BVIyjV`5rGH217Dn8sI*2$d@e1W45#xsWk6FaF#&SYARl4B#Kcw6#8S^_ zxV_!z2)b=k@zk0$*ywOyhBf=*{949{kB?Qg50Vpl1YNIzq|hVCw4^DQ`}?~r8%*pV zY|`=2%*LckbUx4;`<={XqJNt6u1LLvRs(-BKatgd3{0w^Rd@s+1Ha|o|54I zk(K2H-+zxS6&#!SxJpugJ``8Mp{(1Vg@ZxheD91@UH4Gebysc**h2Lbvl%f9Gr&Q* zjoOS_ufi}^>x`f>jKV0C<_us7)(C@Gs3%FXlvG-(FNCmN0t(M)F(h%cPC2Gt4bFdn zS~MJH_RgWSakiGH)`)6hwYF|2)`)0f%5E5n+Uz0{#D=CKAaL8!otk0L@Xn@9){ebZ zBPIlwyRF2$YP|MOAFVlNCbQiE8uL5wneyqA7u;6ny0CILW?RlNB3`?$gPK8F^BvSY zzZd7h2&zRX4vOf&i}2&3Mx<^qSVMmu`Nmtgu8;aDSsB4KD-~1|XJaj@L3Sxt)N)rS zR`U*6oPEa?XrKc!1))fE8bO9N&{6fpVXFcUWPa6xfGVwjj`f1r!r?b1kS5uXWBN(;(e8@*MGtiJ$`uYPFCbSlVsS z+G&OKTIm0@g36b6oK~&G>PAo{Q-?cFAu-O3Bp)jl~W00DR!!&qY!bG4QFN*^K^(7kf9HIl2_~mJii}%5-LUd z=zfu>s;jz+DJxR*Bm!0tQe{Lo&UFwcvd0CrJW~xh#MZ1N%}MGMDc64iS&%NZkiU-N zInrs`!iv-~Xd-|8wGgc|kAOfBu<2ZE&1N}#6U_YcsK|m<$?GbpE3B&X4~`$lVgz=W z1SnuaV2)ptR5m4P0ZyqCo1Ttraq^V)x@iL9i&)8$YDDnEGMIVd9Fn?H;+(4d7Q#xb zbV(-J`1|fedkUlggLwOBTL?A;?w$^);{p@n@@-n>KgC+;c#{v!$e!~j- zWX!a=7R#w9npZ%t+yhn7h*uK@fI=^1MI)$+N&8~*4C+K>(#&OfLb=8Z>S{H@s+qDP zFWJkA&M4oFg*fuZe(G<9{~9@ZDOMW6)k+Hfr_t@tezKgUN!EWcO3ne&W?+QXCDl6% zW?ec8O!7luH*1=7szFK3FC-s?k!C-^O!^2UMSsIMt4W~Nq0%%63o096@u%#0ucNJ8 z{bJ-sWc|@;^gz_#_~{V)7E8@a1ng8koaX@n9aov-o|Hy&yvSFi9aFmFxSGIHn2lLn z7oZp6$pf?~W9ffoh5cRZf}HqU+Qqy2hHbXvVqY)2C-YaitY=k~9d zE!6Nv^*dL8kTE}!fP6s!`w7V&LyN41qGhIvZ1e*t8jynSWR&i5On$35exmuVt}})) zTI?TUdOX|wfbJBCD~#@bwJj|3y_z+$q+6rv6)8+2qz!)uY?Gy^REl~$I@8L|^43*4egQH1set#+IHld#%R%xZ+d($ zZhR!?+1b(iwm9TlX@JYmm*&Gp8{Ke$1Zo6A*g(}3LN-q>e!4Q;4c9O@lpa@f!@c-a z!jVD}z6pQAZx+BeL3l~a{F^4*ih{Z-Ky61%-EIp6>7nPXO-gbHJ#V4pV{^~j+G#BA zUBz_r1?>gz_({ol|66`maaa9svE1Og{E|tXY89t-;ty$n3o)kS}%{y-&J3rA?QPFZr+fR-wMM&MxzD)PjQYGSq_}5Zc zslI=QR8Dsty5RYAE3u1T&XH(0`;cAZ+qw=ycb45SfBf+C`Tza!{^I2A|GYhaf0jkP zFZce(;&ZtNFcfr)YVX!Kap&NT_^Cy_5;FO47h4sLz={Bk}p z0LH#y10%Oyz$5Nxg5-++Xo$7LG{E;=5k_lDSr!!9`0j1~O_k@|=HIq@flt73P4IvD zC8EwSu1=#=NiQlLfr1jTJE2Rq48`8WzOVjlnfNikYy#?j>t3f>8hK8fKZ{&X$b6{b zCja?V0Q?LwcWqkW=E)rL3q5sL5x>srp0~YK`KP2GtaOfc9N&(Sh4Pp4;hG^1c=-Uo zw?Uf0<=&6}Y!*4!aWr=tB=5K4*EWAoOOuqBRy^J{<6rLmHzkNqs2a!dA{j1OMa#cI zv%>d{1CGiznL69>XG2Ms2!>_we>pl-ymE;N%R4Lu?=SV8-#tDfmw0Ud(?us2lF) zK3+4HfMn|X-R#z|k9`l?#u%N0apOo@n3>u=*fwdOyumO=o7@eC$M-_r05LaIwuz}~ z*jX;3Fk3;sOuZy?^63~hw~R*k^XQD;de^ow-pl!P4Yk|mzn1Rg^FFOZaiNPQlVu#s zwF+iFb;HvBrg8~-aV}xI4dZ`)Fuub_x*3s(%KIo@WxhyPB_0q=z}AT&3}dv(3t@PC zFZrYpE5v)+3xTf-S}6~J;9wHP@p3`=nB*^}C`FV~mZmyL`EC!0EJC`fWye6}ZE>Pd zSBxy>XMgD-|B%7@GBHv4kM_bnOCjt3oBujmuJVlE*x`}^XfV~3YiU10z zY%{Nv%ZbPqUT10p86jAw+HGh$_vcZ(a&E=KTvOvXook$H_jeE=ft(PvP696?*MI=c zWGb6-MVOZWBZV-EH5xkqwG7gIXXdA35}nwW^(Psnp6krraOuuwD@@S#jLq@Tp**M{ zT>5o~4klu^A!Up?LRo(SgEU@3E=N8|L_YOd5`Q8rLxH^2=9r)TbIP_5tMQY7gM@tM zUNE89uFz@$+KPK+FghGRI>x+$KsR3fNrX~R1IbKuXx`v%krSE?v70W%&$*)lG!>5UQsG7$1KNc$8R^D#n~nQ5=T;*Ys_GwX*_R*><@=knyHBshl8yV~F3^7T_4- zb(#g9-%G?6X%oAVu|sKAI_X6FTIRmY))Dpw@z{jQ7o$`1=of^w2;WIBab2LJY}vc5 z%zh+29BUG5yqN#6@`uik(Lyn%`tmNQ?Y$(5Ld@|3HkW_x3R}Q-vK6GA%%TMA8pv-H z3xEu-L0*M|WyU(97(W_9P42UWi zKTwOP(ti6-(;(fZ<+b1b(|oDK+JE{&r!(&6)xs}#N4hG4sN1vJYvch?ZtIS&8HP^^ zpmu+>A1>z((Gfwr7xMUDd^r68G{FK|Z;H?9*~uyS9FYMbY&!eL+4~D*Gzeu*&)%H; z^7aB4t`AJ%l{x^=@23SEuYh6QQqe|ArR$nFkZvNKU@ibgx88u5bNJ;C1bA8V0dJ$( zPLL-4>>3fo#(W|Gsvz$mjlAeEYk7Yty9s|k0)(=-J8tQ}?8{$dQ)btE8EJQEZoYiw zUsLAj?KGIE>{h+F*(@g6Ur?8cR@yTIMH%My%%qD&Uu(EMGf-dwwGM5eii~>h3@$Rg z-*;MT(`=F#^TX+c5+R=Y5-?r))fn{2Qb}oO?1iD|s!VGn>x7@@hqUO_pJILsTCabC z(l*(_(p4i3oW*-3pbY3Bg!J0XW;`>|fLRB6Xl|MH94DbU$4V+}<{T@IkaI4rRAj>8 z>|N7@t3wEzZ8(<~o^1%q;LKsLvMWXSzNCM3z}Rppf*O0UZma)|x~pUn1@R^2ykG7C7YMs@ z1tFQV%)iTsD22HT$N*zq`SUkrPiaWd0+9ha%no2cGOO~2s&rzN^z{VNUKlOcKgUkZ zG|4j)kPOC8;~bT5Y}ib}w&CVX33-TZ2@(S?^(ucJi7iHhmH4cwnUa4I={A4Da{mGQ zo?li`H$%we0Ob~IlXAIt3=IqcF%s0^S5p87Jg=Ancz!<)NTBqg;(+wGgiBoyqU#v} zqODrLF;M;hHOfTewyOL@EWw~$VTK_KWQkD|COKx-_~>%)UsRhc-~y5YXmGp@ z<7Az*^RME6F&G279TSo`{wzTv>SLgKV&^REJGUk3lQ{($Bq14nm$-i`)rVB64>ChN zb*&n=-XhsJNVmCl<9?bXkD)HfH3p-nXr&xB1;S`zU*83zI2kH1?*-xkBG1Mwqg6673 zMXBfp65ov{Q({J2&Vbf;W1IfR#pO~mSG^KaJdKscnsY|Fg!^F$k8$- zLsx!zCjBY=f_i_X*DX)7i)kF)0+O*#0j6ZvZZP9Z)LO}IYYlRXcE{PCJNr8EC7U0> z)n_GuMZaYh)YlJ8uaA(#*pCj5+%Z8E3)1w9nRgB$I8xZ!ad8;yj3_tfH5^b#!Z4o& zO7~RV;Bdk6l@SYxkWbh|;uf}?srveq@R^De6mDSUj%x`c8^Q5pYvgHpl2i6&N>nUUM!gvwUj|WtJ;khekJQl|uk~0br zsbq5jTy}rpG&;L&3Gkt`zAZ7IVJF)XV@m04TVg~gmfI3&C<|=M(UI7ei#f6}0dFL} zF|n?*Eo@9{aBN{?ww7XCY)sk>VnneY#GV)*A^O=$#_`4;9f5n4?_g|Uk79f)&G+c| z=x{VXBmu-a!5bB0Tmd&K(8#v3QI%7Sze#|`wL5>7g1-NWZWX!bXeckq`;NF>9LQ3J ztu@tVuVQNkXCrjqtubaPVYKb7^=%6pV-2hQXiRH3yIo_R934uic`9rI7t$JxQU=r- zj84X0YcOJ&-nE8LNP}t3sH8Q=FHpsSvAdTZz4ZChnaH5%VE5`df8=vk{0t&q0GM+0 zr{aG?1?H%yhCzIi8(@rXlYaPoGnjXj&keKT9hF*%I!Cc)yO?v7PY6@RcJ#7`5xbN> z)}9ZH;bj|M=S!big~$~GV}Jn>8Yh3TTz+eVaBcaAi`gSjS{c zUN`Z7h%U4qs;TJ0;RsiSKBF{vUt7DopB>ALY5F_4``J;?G}V?Tqh`oq7O_v4Bt|-O zCpSKvo5u3Shf&V}?OS{3QpBT(;Xj@Yb=ZxMPwBF8<0FlPZ+sYM3wGnf8CvWPcZ`3a zrTp0lFe5e|&t2rxTEwNpzm!rTEOg$%SM9dLJuI~K0g18g&H8Obt`&+8u&3iG>gJ z*{%C*QaTigS(X->D-KIuO_tHN7ia_&T`rOHl z5a|G{KbBWQq~WiFb(QU-&s)b_G(i7d>{`g|!Ak>`?}Z+zWu&T*#b7RcJp_977KjTQ zYCz}S(nny_SbMD~q3-B%4=~X%+L<~4U0;vEM!skfJ{YV2KY9cha9D8*)Fpow0xV0t zu&ZmS=*83H@e52btc*un#dx~!j9);S0ojs}WNNL6q3K&*aBB~d{ zqM|U<5sDWO&_Z2ad!UA3b^->T&jvm4^yk;2te^gx${RoUvC0(7ZH!l&sBK)7yNoDF z5!l9f2}=Do&S=#EX~h3u+K2!-ZROsoR3oCgFVyBdZ|K2@BfdertX!2$t0xe9Bk zK@0BlB0WRFZ)t5#-9m{oaE#xXmu67I7b8J{knC>wFgz`I6$15U%XHV?tVV#IB=rte(-E$I2_yeF+WkO)di?`I)wmyO?F}WntVAi z^zTyqOcKqL}I&37Kl#E-=7%LugdHJpEZozi+WT}KzcOK&X!aE$b z9O&qO>cI0wnb%TjkI7GmN1|HAb8ZT`^gR`^DGzf|#@8O|k<|CT7nf=n@-wwPo#Gg4 zVa^JM6?x|Z_QO2S4V)-s2@@&6YlDdgTf&NvjaTK1b>hl!GBZZN&o0R{1yR`VzuSc? z#|-UG`_7VlO#iGEA2>83LQ(@ZBJx$I8fSWt1gsmsrvNnqYc7t^4K&d9vA{k~7xyp> zZP0u#cI!v8)c&yef*Ox~er?{>ps()k+BIU!vuQ_8$y4<&PKD#E;or;>-Xv`;fW?UJ z(&8D$VgoxeKUXDV+8sKic3|pD%vaDLPPk&mFTFU!6@pLmsW{>Fvf7145&pLHTN^?) z1iB1d{sKWYd5J&tB$8hbW@a@`VS|^D(CO<|r*F)ckuw)it_%ec0yxGy%VMR)<~OKIjU3ktW7ekGHm*=WPHR-` z7UVah6zJ-x>o?im)s$)TA6;7=n7#*T0#lIuux8Ea_JWDrM!~e|lgu7SNPp6eTUh;Q zFMVc3-WscP$YFlEmAV-tC2f|7X-X=VPSu&jSy5ahMw|%eSK0U62#qYkJUt-LAD-b0 z!FRhPC{iLSanmRK5hV=MCu>CfDmhk$^*kAaS&pM#vccO;$a)|T$zp|Q2H6RQ5A@w8 zPmXQsQM4&%uo<+}UQAx>St?;j(^FAT*BAywJ64il_RT~6F$iB8o`9NyU&DBT<$^=o2@g}=T;HJYv zs>?u@K2z4N4Kz?oz!z=1*a@k_z@@+qs7cuU&Z`%ZjXU`IABl(H*!)=Ifd)?g2z>$d z947?^(Qea{-wyBXoS!?A4_m&tg%8`v1haAl2d@rIeNeSezk z-t{nPIg5V(mN0Px8;plAzrYdT5`;Mm_SlhE8RBRG7d0ZoI(4QfBDw&KIP-FQPAdZ5~kEWh@4M;l}MDd}Yrt^$Bp8?D_}$3KoG`IMa(!&F#O zzd4(>Q^5`;1JQ)I){ozG#ODKIbfUbAV8$hx^t|^e;tU!?dzhX3?F6mFXA~6&WTBxk z$o=mm$27G$E9XqZwJAi2&&@&*z8#SYCxie<+{<;os56Z5Ilb6QoZ@BLLx>XC&-9T_ ziW~WO;tEXh!k&y14d5ym<3IAc2^<@{M%zwpL~5H|E}oQvWlcWmEGX!o(QIDvcJ(%; z%5{kh8WI>YKMR|j^Kf*2R&Ex-_(!keG7uBKnJYHZo6 zECDhl0A5Xbk%l)nD)BItiEPN{Mh!;G~*vooWXd-cknKX}DK~Y0B zu-NttF(d93e}<>$-3o|C$@_EvBS>q7r?|C?&2K+m2a+18=cE=DGuT08)#SUo7-l>! z&Isr?E;-pm!@`3Q`*Q5)<~nIL;meo3U?J`I+lF&?94xV^GPc~x?bL9u?&cQ`JcAe6 z&*eGd7e0{Xn78o?P}aA)NH~6Y7Uw6PyHc!466#K{qx`1vs-9oPcdgW3gEiP8pjFpH zV0KXl^Vh>hI*#wm?j8Z(BMzwWPV6^x@1ww~BEBZ01Dn3vHzqsu>v&Eb7o-Ok4={gHEOTEVY-OEStuGI=C-<@ZsBA^vKC!2~7nkm0#VI)gk` zOk|OvOdhVYf<4GU_|*zFAC=Y^dN(5g=~%ffxU~3x*3dH1pcCj zxB{MNQg_wvH1s1Gw7mUxyR&M1HQ>UEjrkMZcrixTeCopDKB(DQjadz}8ngD-ujDwN zGC#DK3Bs=v@>nqZkf(!xcr$Rpx~&%dZMI_QeXx-Gz{^j6d5O-JRgj{lVJN*78IBbNYo@`=2P|jn9dplifP8b38TNOGc!| z$>PO08zKz9PZKZE{tGKm@WD*#m;~n@1wll8n*_&s%eCjDE8$ZuP*|Fciu2?4bu|v6 z9oZ<4qhTil4&EiNlAh_~;iuJ^s`06x(8IDvYbq~|i=;H!#{}P|Qnxwbzf$U}Wo3^m z!1S#M*9YB|o+txA@$Rftb@PlEA>I<#7Fwg+gkosejG8U2y0ZgVA}8*Zvup_fP|uZn zUW2iGyj5vU>$GO+{8;F4AJ>fBz`edT1}Fqk6WSKM!4Gb!5=-#H!MYR{&?G9vr8fMZ z-H@c7-iMgy%SSa>3P|;iXeJb9Oz`o=E*fBRmWJ_Wmv-Yj44tiRTEBvz*7rW}NqpV( z9TAEA@VFnG1WN1&E3U4~(o5OiN%X@<+?OGD#7ccBfp9#!{sDHlkF=<~??Fnw>eaqw ztqhPMc>nnMekF4)d4g_s@3bx^q;hGftp`)>XrH^O$WlC(}QL?5Z>WfBkocYayHUI;;` zdg8WkKQ#b4KZ?Lkf41M^ zNdc<`=z5fW_!khH{y7IVO%#uAcyqlE(XgFD2wlI372t zfD8*#;@$z_$3Yy4eQnpj&=YaKCbBHb_5%wUn1^}7vh_|u;qz^33g*iJPv(NV|`77BDlLP5q5u5mYn zYM9U(KLR^Fp+7tTarMT!tNXmyTJKkH?*^Ha{Wt@blWf>sN)OZOGa6OTjgFB4&jo*k z1%DB)uX=EY;?3v-31Xu4eVlz?-3w!_-`BadHbM5;=qsw%r*gC$@i$Uxa&6j-zGx%v zt98N4*sSJPS32bfAp@~I>S>%G#lX|e_*wi1M&HgFcgz?ct1)4y?hM4}++mYC<#_>b zbzdD^izl(-TF2ABlsT@1Cl4D+I~2y`le`*g)4)k^!RUgPe%(zV+bt>nF4?5!Cw5)L z!WUZGUFYNb41uL9IyqOLy_-bAVCEHPKuD5F7uX+D8yfzC%X24>W!rjN&LM)R4Q>v` zF=vwgx;2E=^%2by`DW?b7r*%((k!0uLAOux+gU@|EBD5L&Da!3_)0v$#)H*CbI4S| zs|mZgJ4S6i4@ovuZN3qe(VkKQ%cw&h&-5;9n zG+R*QpT|Zio2=uBcD*^JUVl=@YOu!#dLkRI4!o`vjERiD{TF&yk37Y*-E^sfJ7It4 zG<$XMtvPhuEAcU)&JJB5E#E@Lw6mN$h4A7&ruBCkjCJkWP_1>@H$Cl?l(wuq6k_PR zax=81bgq#huF6$_%LViumxQoJ#pFGm{~T*adqf$Yto&KYUnj9S?(1^bnNVn=k zLq=!ibj&3S9JVlxVl#scvQFLmrsrLuLEPPZt`RleuoQkFRj)USs(<)7{3B8|*uJu; z2EK25yWbT(vPUCDXA?%|u=A=eWl#E+D9tSrz22?xTA;n{YE7!4@aUsNI5CB5$lG5) zlvb$1s%3{&sT;`}&DXKh3>bQFN3s&=>&MgIO^Kuf&v_qfBqr*!l=d7fQk5_489&3l$v;8uhN)E5~9|i$bb|Khb9mL!+TekR*e=Rll@_zA#3^`2~ zCe3)0G!^|kN)yYzf*{cnRry=8G&6p8meu1Dm=QD3I0JO*Zb2XBPNgq=q`29?b!5za zx{db*?h(AJ@GUv-aS1xQ@-)$&xmO1%u~%>`QXJw)zRdoeTnc+0ThHo4~m%7V~-zvEN`m z?{8dVqel#ygCs_pl`bKWDvpbYd2Om{BeZ9xG#F?3JwU#(_oK>1^Vw*lk;pXuaW_Lv zJ%X|`^Vr%tcbm}RHs|XfQ@0-1>h=s3cA8xiJ%TEpSREQmwt8)&eYKFkz2nfIU4@Qj zbAZ0DU!VVxrCmj@>euW*K%ku=|9`S{bHWTG#{W>xWh;y`od4mSeNh1ru>VEDcmRw4 zQKhd`0iNUB0$UkG~Zf4JokSZ`WfI6>c0r#7N89HFES!w0{&0i zqhboD`%kl1Vd4b;FDg@KT0{RY3bkU=``>ZL_Dm|w|7imGOalMAK42NsEXRME>JC%n z|ESk{=S=20|7ky^m>d41UN?iwF|%R*r|}pwhy3q+1HYK9ssGbh{)?~@nPss4 zi%iOxt)TylrfZo^|98!tJIp=*(_W967li)XJ4?d?_P_Hj0a$4Ncjpj1ELi{32!&X1 zDE>Q+%Zvr~e|yF3SaSZmkCek)7F!*{OBC2#IJGn?Rt0m4FD|FEowke37Egz#Hk&_H zk7s$d8J}4?S)K2D=N3!N6M*V3-y76q_nq!9t_WMd`V@;uCST!k$O4Nai#$EXvmLkN zrHDL$f?oS4UQSAN9t$2Ufy)FZH5BcK4?DaTAThbjv!GI;rP0WY343yi^ z+yO?il=SsIe0VfEyQnaLHsTwo=csGhEKI8tl_9-iRuy;AU@x|;m)WYH87bKRP@*lb z>O5Vqv(#zL;be&dFNM4Mo9V(MwZ zCTi)`vsJ`$r;0?knHu)0?`YUwTwwq+fw#q&x5ju9507w1M%=1mK@6{)zBnwOIRIEQ z<1q>$h^4;LA<*`Dw>R|AwIO6WqrZ?B0C0)H85xy~YoVJrW#7K;`gNz4R`$B^h2F;` z1Ftr>nS4}FIf|nx!iv#84vspronE}7Xii@;3>)%0$RKEc8Z%EDC3k}dfy+bv0285P zBIotC_y@aV!1G|0mPPreq9SIo0b)<-Pk_ ztMs4m`Z$2{?qnZ%c|+9^Mcd{xbGEkI#%M2XemTbZ%aH@3WPfoQ8yS6`qR7EY5mIs~ zG`-n$?Z51@pzo|t?HBj@$%=}PiJZ+s#L-)5Ek+x?CTr{LQm$pfw^>+8QCm2#EuL@>(G-v}_Jto{gC4OYRuaq7S?CablfAo6-6X4h~h#`EUTA zEN}Y7M=0s;`T5&<%6*=maMPL6?|PDA7xcRQ_49?X zRf&bDa{d)nTy79)Lypp{mG?9sYhN zzr?YqM)fToFp+|2mym}1jDp$*10t>iT_k{&G~AHcK9tzlG)&NKtv#75fpL8cfJ-j^ z@K$0)=Qg*93OO(IuepuaSpl`IMW2Dm`iM}qd1+deyC}JZ2^s?dQx6DrZIL=GX+wv2!@mF&{UC>ns=y3L$|a8#h9T4U`;9I__bk8iY$rRut$(*&HRmH zUVj-RkXaYQ3l}re-#nq-LXu+&_Hb!(UG73iYf@s zk882w6*FxaZj*FgKNwznh<$lR?gL$e1Y5&|H&4n%>(ynI&f}Mnm_>nvq{}Q2C?e)U zL-q8YOw%=rrB3Z=PFb+S$_#Kiqov=7meb~|8dbx6<{DV5pE7SuFM zvvxMSLux9b)ps}DbP0T0o-okY`zdm)Al9@RrFcj)M2^f%DP2H;5tYSC)LAP~Se;8?ZF9NG1LG>y}m0JFqIx~qV9lMMSsU0jKzggRVMxNQnSn59l?)N~r?JR}ol z6!Dtaf^d7R>$18fVWH(;K--Lf5ct5q_pYSP2F>Dlkg!K%PuJX8pVh#bvK8f#Cp z7pkmINT}Xr4x`b38 z_TK>6cPA0{HppGCg^Y=xFZH|0{;c?1v(1yoK3PG9yke7EKj*)PrMvo$>i($|`4Scy zP@5F@5*AbN!8QDptr8Y4*2~Rg3`+#$Jn&3-|9BR%9#~mdb(yTAf>fDC><|QQr8aA( z%!V_hJXNV-J_-TV(cwGi6q!;MHqfXPU?~e7&>`oKNkC5Mo&O0=H@x`OPE&ezMzg-M z6U&07lN@2f#)qS^dCo%HPmfHddSS*0k7O16mWedyDzXD(9%8#nRP*87BUEky`ps-X zIA$LZW4{$=O7qP;Z!<*}^WgzR(W3#;M3jJA`G`5E3FQ{o3Fk$YIwuUNs%p+NU9D#& z#q)DvpK$@MTw_`q3yOTYI*3WMoIxKziu9FO=}>{Fy;PI}{5pVT zFgQ_YJB>6jj_=Rn3Hk-qGc4=T}BNPEva`fhCIr zrAP2fGIBJW6?q;XDlknJHr3DG)`PE&{E<9hYoDTLE_kLp5w71IECzz9c$e-NWj?kY z=5kC?ue}4XcO+VbjoWAUbkRS^l~g%;Ng}TbA>I*2guDEdeOi|`L9Os|!}Q5%&N3Hg zbL2dYHE-E;U9Dd8#DK6hhw%xyL8{&nOm0B?TE96KG5V1|J3=FJ`Fz{Ol7Z z2_-H89I1o*nmWzE<9gg?jv`zGTNI68`H`iKSw-T_=qVxU$eEBmd?%?&K-;*F1<7`x zr*uu-uhxowve5j``TC<@Peh@u4e8ChP%s z;;{LLnoFRNCKk0G$KGAabOj3`B&lckO-0IW1q&B^S{Ii|Dr;j@`mI9>d*%1z@aj{W zL`A#Bt@^l*qTZz&Nu(FE)TPIokgt2-bT_kb<~wj=RPS?mk> z#Z1Wm8svmb`TJ*ed#0-~!7%R|o0G~ek@NZCcpdmuyEe94BHkOuTxF-*k1+p*6b-q zB2}M*y)?j9dAa~?Ss=ffOl}}kx=BSrDh2+19SmF^3Qe!0ZRCvdn!9rh;l&}7d&*%) zR-Y<2o4884-qE5**`1HaA+z>7s6~or6$=^ARK(v+!fW<>hsA?m!q~VA;-z z|8ZfGP-pF{!u&lko>jV@@1O(g#3y^OMKU&AKwJKEG4rlIfGht<&;xypqLM z|3SX?kgzVs0Qhk+P*1xr%*%wnFMLYQ5G&S_JV`l(!qsPzPwhOtN)>S_Zbi69cCZfw zucA2O2G_OLzIN4>TU*d@xkESSz}6t-(QQfXIGxi!(qS|&w;1rO!a&EtDiFJ-%V4td zM1(bk!-~D7N}HXLq)prUYOFx3Jyvh6^tH0_JiXu7ci3woyXOesu_t`$4Wm1J@DG$$ zrUf}mP$4nyi%3I~R%cQKQ!#XP?$ZJK8ef-=Y@9Q>aVq>tFlvK8>D2p5M;1K&^x^FQ z46ez68#W!iSu(~MA>FCs2yc}8@|0}(e(t%lu6ouNLQCA#pI!5QPDBXIutf?uJ6Cgs z`psa0nuya&HYHQVbdNz&XvQj8Q{n z74U-=%!#pr{U12ECR49=sj~p%!Vqk+u%fsU;cXo0wes*gA|8mzqI%H$(5tP5}FVo z6JAPt4T}L3>hSgc1z8GlEekHFKnhPS3lA#zl4k{nO*k>+p$e%$(s6NKN^mX9cOhk; z?MKGgyGcZX{hmn39|5a;nitjH05|?~GV`~dL$fMTyO7RzpNyoVD_&fYuItil!JK0* zqC|DqmjwIGkaf1aQus|MInp^lO3F+oDPjsr73H`qg%Zwm{vnHTVlMVltPmFQJ~Nit zTb#6i2bfTiRDSz$d{8M|ii93gQ$QPHz?(AfYlY*M_Y1{o)Y+--$+?ppZmZM7+Lan3 zcc0Bdb#;~FZdT)+Np$G5t-yqbbcvGUoSom7N&0Qv3DG;8dv*?57`ZpDtVm85J@$cU zGG!W?CxQa2$1s&F1&GP~`_KjFhXs~6`gYv674Y%|JPGICW~B8wfB5wcBwu#tXAkwx z4}gHOXKz`KfzR{9V8rQ_-Bymz$E)2JyrL{LO!Y7@dKMJ~ILzJ?h?CW%mQoB3Cl-Z`j33PN7i3c&a*C6TR3u`Z|~U zcsIW~*i=K65WeDh2n@Y&c^Wbr_)|}_*G*#((U)rG1pt1=JYUK&w;G>pjtRR>0d6yb zfNwdSXH4BN&s*nLADbKa6b_TSz|1eMsPHqU$&Rn-;%BW-9@svIe*r3jRB$05{hz*H zE1x^8pB4`ag4Wk3M8LkDcKX+k{-f^K=C1e2^u_O<%}-~%U@}4E1RV00`Q&}-wEO2b z+wk(u>Jhojy61FpbiqqAPT$z|5l)Y0`Ux(TQ@iXZsLp;w1c8;S?rlCsAoFttXkfPv z^4l9!j@3ur6u$Sb(IRQALuot~Q_ikmExPDm$%9nyNAoc}F%=^OHfFQXA2#E!xg+1e z=fpwK2+8FJ~=)FduJA+gU~|B5s!STWDv)0W>v@k?)qDW zy0Zxp$M?X5RO)f4=NL>erfJ{0bg*U79Xwb1X>{)NHyCI)C5etu5Bvr@l!z<1Cah=q z5Y^K7s~;X%_MXFX3}P^6r7v@Dx%N3QQ=Ko`K&(m!~>2qrcL<{21l>Y1WxDkTTY};653AJmdQ{!h$U) z)bFd7&E^mFreNcE|JUd?A&2z0G2bQr;(&rA=MKZ$%+xY|71RlM3AP2|K&5VC5l*gD z1fg(Fmenrvu=?8!C;z*0=j7&)H#C${@|PV~5?Y)u&g;paDB!R8!)$A4qHJqOqHGTT zkcQ9;x9vH~GJii`$T#ephJO!rz*IBtjQhUjY+G5bYiZy(>{mHk2Q3Vt!JEqK{3|!9 z#+ZQI!PP*-Eu7iOu^-c=-#RVyEeN5M^Vy87i$a{|V4p(6A+ogvf zJtDuCY7IGxJg`VQz5M20=A+zglr*`1o0R%N@U0imzh$C#70kh>rZwkd5&!n`>uLbouZ_WUp%mNb$^=HSagf;y4%l>DI6OEg9Rpuc;+9$TiLkCr z?U*zm82QfiXAymnkyH+;d$ZhhUs4Q)*fzr85yM*ebo<7{i?qpopZ`&6;pU``rrW4b zV0GTLX}XLHFp|Z`@`c$i$1=A*VU9hAu{08^>M6yZ^r=0%}+%1 z<>-0yd2agr_#t@2VYq$td9Ycuci)hgQm*GZ1<=o0;8rW+u!sTgJ0dV9V9vYHn8P|P zn=3dHhp_>O1~;#0m=6Xn>hjH+pk(x8p`~cW0!ITmAzfhV-zLHXWAZdWJcCxmm&$sB z-H%c7OkDeHhzB62Xz<^}6TRNCwX(6ux)OqeZrD+%G`j1QYyno|m+cb>Ss0e12BGG9 z0JAUJzQj8es_YznY;=c=cq)CI5RYTYoo?J7?11nAjnQWd3vXj%*J1_VWy<_UiF~T4_VGhnNkWLo^&?Rpq7YBibr(_)JNx z%~aqDVxX>B+2YA-OLD~WS}7?K1&(R(9{4aZJzt?l!Q=Cpexkh+x&r~o@9&{>-Q`?9 z`u~6gQSpgLdTjMah+wjx>l^lFTW5+0ICWRuA&L$HfUDLM5`PN^eW|aMZfUInTkZhI z@^?{VgPH%%c*lPG7o&?GDz(*u+ml18Qt(pV!W06 zxR7px^|6d>t)sBRvxzx5K-eG9X`hcvUnLN^R0LjGuaxJtKuq667sjW5FZQiZFraxy zB`_sF=PXm@$bjlwf2@*2ueea7F|^m|BzRdAK4$ECh`gg^;!erqoBznu`|wMLa~;V< z@J*g7KIM6c1xq3RE~Hmzfun2E7n^azCffRRi2n_V|;{+O}Hrgitmumd+^)0LiPqb_*`G*TzWW?`FhNK(+}&+VMW=BY4*W3MyCQFa>rW zwO^qWy6=!emI+Z(0+pQ>V1IZ3%fz5WGh0W&KBOiGm{mJKcdV*3V+d=otGJM2ogwvS zAuOv#1b1)Tj#y7H^0FpwV&}V*_KS^d?eIJ8gAc_u4|Baea7FFk`XFtS?6r%<<=*c( z6(c-%^8b}nyu*+E&8`w+&YDpxYjQAKSCYve%jVUP!aml-1M*|P+bpfh>1u97WV_PIzM*j7*Fjd|*bzKWmG@ z#_Cb@&Hr_oM%7JNNTGCd><5I@t|6BqcIsAe)l%@;jp>p^50h!k7Z2+%6Ex=iUQ=;d zNF0O~a%iot@?rK>27>AEf z?F`!Aj-$)0CIJ5cGa13`Jv!5w!Ha_=x?fYQj;aqlWeDt|JO8?jdiQqTb4kt{4%D3r z^u?F5OQnzyIcaqM5b9bL20p<(=UxR2BC?H7TYZlvA;;F3htoQJ=jtyXfXf9gnQMQ4sa3or`-cgYA{PQ?N zU_u8}{&L*U7;bF!cj3_5^PdJhe{Ffl8qSTOdsMG@3;-{3S2d3c7;HWl)$q^g8~@y$ zRIO@S0Gk{AF&J-i{jJDueyG`;-)&%J+mv%GwmL>2fRXFf5~|wdp11yeSkAWsKNw5P z_9|QzDs?U@c3FUu>DKWE=?PH2)aG*0aVo=^4|B9&I6==v0{wf;zMJh^Yev||Gd9)o z1?i+GG}ir25c$y*R}c`4!|=z7sI7z7r3-q!T!Uz;p7 z6HwEF5YKOC|4)?fSg2f{ud-(+!s%aPPTc*o7^zwN1!H=d8ZhrRFi$Omp*fWz|NQr; zhN&`l2bdkmJR;fb3chp(5x=?Mq(t*S-jzsi8;%Qk zkQ=2STrNA#bRxN#7Lvjs7QYz-f2zn|8G-tGcOo^pafg1(+s3Xrh``KSOLmrVXLYlbwJMf~#-C=BG@oJDgZW9 zCw3K923V$onq6?qHkEH4HqVXi4}+gOPqM5V=AHCppgL?JGG;5bGG)&H%zz)Jn+sBX z%Bdsm>SY&w##0*VL>nA5WHH?)eb4wN(U-nL+R*?+!3Na=_EABs6oa(kzxbeKE&K8- zY-YGBFXwj|7gZ?~L<==xrKV(htcsK8-qQ!}7xh;cE6FOO?EN&dK63hpk#8RIr8b#o zLFRhYe~g7~y*=S0#+0H|x`0;X{8Fsob@!DkP1TJi@L!E^<3+#4t1yR!4<`(?=oX`j zr`5$Y(f#_k^1!xY(Jfpm)xh1sHSTc~s00X2S0}W3k;S8$+nKtR7URXrtUTbhUtxBq zeeXo$GEN~<19XV@u;xPsNJH}xRDGo(d}T0h>y`PY$GWJT#lqgOi-APbB%|C7@#|cK z@)>JO%|SUr80SMl{6GL+$XzM=Tw4)&J<;+lK2hcgO1k#aUM z^oiBMh+hb=%CTz+pV28{E}t;J{647WH=or*O8%I_kdRsM%>;{Leb)@jZM^0a>8ftC3X^QQ%=fD1zk9v!*yqaUu z&!u@!H@N0n;`Uw(AJB5ICz7^(21Fo;{S6^03gebaP6V=RRH~QhQHXo=+QY)xz>5(6-I0rI45iW zVsQRgMmPiQVhw$&Nr>^|zNY&0wTxlt!_n8QHOFxPjtYqIqyhV+AR#(=*IU{*5B;^I zaSi+c?HeVUXVkoikApB`T2dX*3IAEf%Oj!g{c|OLDF%1~Fy(EiE{qxRV^CTlMTJyv z%dU7maIhrnM@~GN)TjScx@Tx6u7tK3Q(tq8nDLx$)Shq5G-+tcvs4v#su%{%u7A_is;Q6oGL&!t9R9Q2{}g;Ni0dW{>3v)6s;Z z5PT(4RkZOpC;}x?YpQYMEl;_mK7^PfEqKVZ$|jhlVy=&AqR)Z8`(;1E>ef$sd2h^y zS7Qrpy4`KcL?pnPj(9VFCa@VO-+GRXG(QG5@*m*4Gar~QvzmETa5AaE&omqjJ<{84 z7XiV>A3K(bo)J4#t7y+XYSqHjZ;aW_{Qt}_)S6)ANx|z-`342Z=c8J}wb+2vs|VjN zbFDtL2!(kLTb@ppWHQV$n4R_4LyAiwLs#(ANJ#78DtUDNOy)>J8+2_*I*8X(?8>}r=5EgbS_YO>m1uNlYf~ic(OcyUHLYM}wH9U`Fpd{F( z|7mufN;~kKgyu#nwP$av;OlmGdL0{CTdIzES=w2fYwqsg7yPp4m`{4nvEi{)NWml- zP_-V~K3TarDUaZ^fd5GZ`jhmJ2`lB)_dBe4OV7>|NJ!|;a%BI~@YRbw7Gw4F^H2CoHP32 z6sxt6^Xhlbg+=7Q0SGds%(B%c%Ex7QH)#55w~e*oY?ZXPW|w9%a6k zTQ(Oul`dgBBjvkG-tS-sso=PNAUKc~dyx=bu{}3ARpuey3AvSU$2R3LQTu5oZDbiN zgC7ziBex$m=^c2E__4Lzffh%~Tq^pu-v7b*kX12GNg`eA#Is+u-ax8Z* z+m}6&$!*VBKiVEOpyx!iu-6rP=rox+sVdtO>LkWIPQD}VH$OQ4m#U@E()aQx2l!R$ zTuV@E3nSH^MZ9$LPux`92EX}Q|An!T9c~>gzRhr?Q;(yYR1vJ*fcwFXk1G}2lv{x; zshF;KD4Qh3R(Al>Wh?<5q5=rFUSB(#|C2GA+9~#ff86dFEKCa8J~)$yJsF+U!>>L}Dvdd?6rn2oe6FMUe1~W!B-T*UFV7McBR%Tn#(>Xs zc$mvfJSvV5-jO_hH^x~I(2n$K3_rf&qKGH(+srnmCTI_N8=NcfeQp;AYw+7`-{>1zcm&`rL6qO0SSs#@qe*c};#iG#FHmA+D+G^j;;FWyeOKbE)`II_ z@V9(8ciHX#qB)qZxM|rJP4u%NV8h*~bmG9{p<%AFdGU}Rz_m+`vDMHEwLzz|S+R|J zxZ82Ov}X0%lfw9&S$RjpSXULns_LvD-d9ClgDf8-n}}I{W#a+EB4jk-iRtxQVBmur z*qp4;cn3J_$@Lp{%|yZqn7X9_DmJb{nVvInu2V05HK*d`jAZ_5s=oqD?<=hC9HNa> zk|kKZi1a|R?xY4*j`$uVWn$<7GN!}M9&v->%`MC|7E`E~PBKPo5T);5D;-3k{4tC@ zImN7|UhTQu{1`wsM+zt(ROs`1sIlM4UtB;;*THW4UVDgP?EJ5`#@Y)naFF#F-JVVs zsF9H}CDoVrNt~g;noClYRTMZ$#x`ISD7PRCJR{h)o8A6V0e*G8eCLa?^;{@SIT{uowMm3p$g zx}SD1_X_MdU9y!ef&eK2^0V!sSLmF_r0p-9>I8%4_K$f#D4!+kU+hp5<7E!>X&<)Y zH7?Cfp2xsgUHnDhw1dGJl&aZ1uZbb=KzjsNSs1xuCH}qMM07lO=ROK{)uQ-Fur5^) zbj5M7=lT4YCvPEO$g@R}AF4t`;(^{;_=3Ptjro2Y>|U|8PXC4=M7I+3VG>lAHZc42 zul~?`q8(e+h1{u|CyQi4Dn!fgUb6=I9MY;knI=Hhz<@Qz#TsEo67>pjtL_$JqkDQb zw9h1OMzK20;-YkBJqLsdobVIb;+n{c&UEJccVUk***nnkHbp2}7@#5}4L_}UwnPL1 zs<57^dy^Dgtk5=!%yq~u15I$nJ=imk9m#kHd9?ZF0CJ0Js`6oQ)i6H1qtNIGh)ipu zB@+;LOJPY@2P=<~yz2O}c(g`lP|=!B{{kHVrMUSwgdQt(O?4~+H@wJeboaU{wSygk zrw%zcXiUa-e9JDi0hv#2A4bTEx<3I8U}MNM20h zA!&7h+L}lrtCoU|d10&i&5Hv;(W6_LFIXKeftk5iniB{P#xKu+c2gVa4!UgrkUyHLCqvE7jta3~ zsX}D2@LBnb`~Yb%d32$_tw!~M^al9&-cy=2_PZ&6UvO4pX3$4li-Tb>IQB?zd}&f8 zY+SW5=DqCxA!vZg9W1L(_-ITUUz+nVJWx}{gqzaz^ z)S8()7%LMwTo!N?zOB^7>%mR)TLGgmAa!oi53&R~kQF&ZO@3<`;Zx3soCiYG+)Hqh zg(8y|1{_FP{;X*W3teAI_4#fb7Q!#r07D5-tZh)IeZjBkHE#LQ8;^_{2suj4hC{#5 z5FkSymYy+DVwVn~DhGLiRlF{&TtN%o#H@!P>NW~j@tgj4)jMyBSA#{l7Z(X~%fBV% zO5|q_tY6SisP>~s5QR9IP|HASDX=+%OtiPA{O;{EUy#bhx9;j(6ZmuxSm=gA`<`Iu z5aib~X$Vrj*%R9_qs@&*4?CEi+~qdX7}0OXq1gz#VFE3rDsz4C0j8TjyG%ycEOz1j zAO24VvLhA)yJzo3cO{?MP$Q`SOnLuajEKo8OFU$b7WEWH$nO^&tKR|1Q#fNjINW5e zbU^F497H=oHC|DC#mGF{}S{6DVFDLS)gY1dzD+qP|YY};1H z#+RgH+qP||gN|(*9oxy@d+)1rZr7+;W38K7b5yFur`s@p4z#{;6`V8@y;qUL7Sb zcks!1+|=a`ax@bP$j||bc>BQ}fEoE_V#-(wwbEujNN)-sudlk#P7G&i`y79f%%T}) z#)Wn>OXE`OhjxQJ9WCZAL<^b>qqX+kFIAAuWt6-;W{+UyJ5S`5XlKJRedch%l6xfm z*Rbgq(%pG%S2W$<9lb24xqufnuS$k!9Xv0b; zwu9;rzVPs&?V@c5tmta}C8&O8UgyWIsV2rNA@t4$B3jcsU5#y2%c1X8SoW9F-?`X` z;s(=@ZCmckQ{08y5fM8QRJZTuIQmYSXRSo+I~_xe@!vxmK}_Pdwk6Nnz|ltQ{|@N% z@~y)PwbN)Q2o`G6D`9?eog!9dT*%dJL*Hxo9rbvTcrSB7=Hc#ZmCUo`DP$IGtzd4gNE-+VBb1UO?3V=eY1Smg`Pg|De zzOFt>fEH30NjkXD)?3UJ$qH#3M?7+?TAHl!rmO`w{%Dv-UI&9K@irR9r;W=7>%c9u zX%W@PgX=$7l!^Hh*$`VoX9R&yi?lOV7NPJ3L={gN_g7u(CWeCRrjM4K1c!_^DAU14 zS)*rbhegqNDG*HFLy%QT4co*m6;;|)nJU&!p=zwlLoDovLwc=WbpV;_uQT zt4A5(`+=Qt9HD{?qGBBr3ICnu=yG0g%Gs9{=`bjsT2wT zmh*EBu7e(O(u&$)#OK(EuNIN(L4XpsWU=#~>mdA_6ovoTWYJnV|C8HZnh=<1egrU% zt=x^6A5>PF4AAV`YVcq+@~gir1G9A(cxIV}hi@@wWIG(g$! z$v7wVFnHNNt4w{1L_{O0Y5tt1g87RKjNZqBS|0D6T07CJlTkTT!%fEglbf@(Oz83# zS6?V>dnspGFhyth>hHCqI{hx>PFxx2pKC@f#)kA9OBXKukT7Q*iXD?HVXsctF3F%@SDpU1f%r4gvUJ5W< zNZRPmX8T`9Ef5xv3j~*L6y=aX^C{yv3Aan^vXx3CIRCDi zg{!&+A|jVQ%GBg_O8CblJ2~H}z?cJW1;rAia1A!pX_7qeiKHI+gj??@%g!Etq8uyw znV98)UMV>+dfRrH-+$LiK*D3nABcGy;I31ze+;qcS&O((=ok!%qhB^Ev#tuXA+)HG zws@q}s>vSl=`E?0A&zzy$|sc8<(KQ0ZI5_xk?-;n$Q#Tos;`q3=cknu16T4M{7a|q zIWkF9eSFpeR8m0=t@twJqQZU0D0rdK8!Vf0N=Jo&s1sf?>%p~8MaOMv@Eb5mijQ{@l^8O)p!dqt7V#K1-q z2gJ-U^(U?@JPK}d&Rafdfi7ti>jab#2mP#w; zE2L*fsVC5I#rWJU{03Tis#bn_1A0Q{-4EToiM--R4u@lTMDJ92@fa>4k12REC*$Sv zC1HDwJ)4;%ZS{Sd>v&9d^=xLpI=J|j<3O$Eo}921Qq8x}03}=RKzye9Kl}Zoo2ua* zoVy$CYvMnb@db~f-8r6r`t&l4hCO%Fm4mstXIIh_KV*N5(p*W7Y=E?3!S603dh*%3 zdaR0}GP>oXrD0$b4{j$>^RXJs|-a9=t%KQQ4h6*{q|Z!Zi9vM@09{oC&87ZAWP!Eg*}j&cKW9%kJ(P zTN5@RW%&oOHMe|HcFZZE`OgmhsS8OfhL`GR5b~?VR3`gQV5CQxF5WHV=ODkuqQz(= zjaNAjTGmsdHK9@6r+oTjxqB<)J;Lly0q<$K(y3D(Hi#dJ4&51@aJ7n7E(MvNzAh=p z8>I)EhNZDK&#hUL!d;(<+!m~tq^S|0L0Wi)^q{v10v=zewSil|Jggd5wYQ_h5J%aG6B8#9XFV~hndyi5MkRQ|2H8MFv@sw!qM`Fe2sAs-@6ss$y3JUgoMz z0<`}WJVy0}L&lU@*fWRGZ zI&QWMPQHPblL}!a5C)f4M2vQrAY)Li;mKS?;3}tq>F5 zF^D}7J)P?6XoomRr9I~Ut(Dpk%fbL^KEx|Qa9W2CY3UfVtGrAFU`=i$55(~w7F?Oo=sEb1fmr@X6I})mOqWdX zYAJ6&R9b%?Bg%T%vrMqdE4ZcwGci(oJ_G4@nr%^SS2mLR<)QzmQ^@~PFOC=SMS)MI zysYvu-UZ+Jnji5-L}ti<9FL;MrT?t$54;)nP zD_;;kA{f_8sUy6#$k zROAni(3S@lJkc%To*6N&y~d1X&DXJ@bF7H!@7en4GqN%1mP^=D9wI*hb)2H~ntaOx zD+7f#`@>9MY)uiyg}w0xDj``fkGV3bi7T-WZ6FxdT3*pgE-f62O%R|0oQfoDGQ{R$ z10y-G0Pt$%e*N<~vWi*^(+mI2=y#;PT*NUq{hf>*$YUmt{p*lFxuWa$I_qYqJely(qFLC`6DoD?mOGu z4UA68+#oyAMy1 zg-ZN+VhKtas+{uLBRl)HvIBM7{Ok8EWaZ8bX5Yq3H(}5Q_C-=X3CL>2z1D{&vf?Lu zqr;f8BP-soZ+9ARBPT*f8H`^1w+lO3!fBvIW~?z`x0ZMp@`p0`@mIOTD3r%>1yW(89ebo{Oy{(HC-DvRd?0~iVNC?^qSBADTny1xz$sGhAEalo z!7k8j=Lq_tF9)-*>_XnT4f)gY+(kTycRDn~OlerqF)D?QaQVVm9Y9#MP5fmw^irEe zsV#-Q^7sRaq>hQK=JPaGjTpsIzIt7eP=jpuw%Z4}1&c7QqXTWb(du}1ADZqRj=c(0 z%)>mq1D*i5y{QgEEf`Im|D=Y0=fv?KBG7&V3bJvb3Nic!3X!)FEz73r7%hu--s!LF zP$^@)thS3w4L8Ba4PY->X4{%HL%wM&10~TMKKKh&Sg`HnFG9S9Vom&@ulZKvY!$M1 z+F-K)IV^#gZA{&WskNU|?!X9v(xR$Al+oJMTHYg}TgzZ6S;NrWT!S}YVG9L9<3k&( z4bJOn+uJ;v`1`gNZVO{Hj#Lv7u#86Y$WMQsnnDF}-{mst@dTQR~+{jnO`xh<>h_zkplNq%s{Ve`EhlD(BmtH@j ztj4`w8=%Q-oU--R8D7_~|IJ6E8jg@4u-wdmy#fKkNebMQxG2sB3tYibA) zhyjc9>8(?|KyGRawmV7Yc&VwCrI<6Wa6vUts?%)|x^5+trT_SGmOLzS;_ML4Q8r?d zLKoM0Xuu)VNddwxY5!1DGd)McEm?bMl?4u(&NQ)Z#h{xL$YuwbAAhnAznZk!83_l$ z&Xm8t19N&brDcK9Vsku-VOdpHUuHT9OelgHma5zE1amy#Y4Zw+Gr-gDs$!dkvh2qI z4=h@-h%vwa?53+-iZf^_M-3UK_!w5(E_2Z*-F1)n%wfitwdakpw}MwPdi;x^{dXk}&#G%wwv5eCh(*9S z&bviW8&GCXUBYnnT34DSnsB(WHK)}4n(EGu@73!s85Oh*x6z@3O}OjAhaEeWK^MT4 z*VO3B*>8@QM!m<%1^jSzb;&L6G)nh19-W6N{6$cp)TX}ki301*YxpoSWAOfZTI%J- z%SJ?9&9Fn#u1|vB0nn-Pzb4bHQM1=IIc-)cu+v@vNu5wfT4EE2e>k;Q)9Y5{F`kX? zs4U8C5<1gI2w8jDn3X@P;C1{OSApF~d+ene%4#=9KWZ{?0e)${&5MP+oQzGs$$|`P9V7uDg)AWrVO;{R-aj1GR-}dtx7YTSE7+ z+O1jX(GvNC2_(jwtsf;ndcZ49q!e-9nV0$wurId8?VDnpr!CEjo2g~><;y9C2qMEOtD>r12q%y;T(r>Qo;NI;4bDozz#ZWbm|_W#S(__UDU=MFiBjq8 z5H*MZUtfRpicV2A@vM@sa88lqt&rE4i>UZpG!r6y%c(rS)-Kh19znc*zwg#IM3Xks z4Jdkgr^ea%@iJ?>+33opzbI6^k?j*)_kEG^*H%Btef+)k%VUY8OKv`=|4IOsaPfbt z2!?7^06`Z~EEOvr6Q3^8{p!o=LqHcUG3<6v_6T_R%tkle#?zrI^6KfySSltaQNtHH z+7Z?W97*dVx%(p=rv%Ys^ZLrQ0~Db3mIikHJ2w}q&Ge6e=UzfEQ^WTz4youBf3S`@ z@mWThpwt7j#?B3s_#F0Uy5R=U$evzOVLsNrf#RR*N@vjdz9L!brWQ>gp*uV1@K+1 zqx~LtP)Ab7-f^~P&CjeyixhWwwlmhB4`_l=kI~}Q#d2mrA;sc_c0pE-TtJNgoCB340-fxPRu;AJ_Q>!S#EQ1#`!8?HBRbtXOzNVwI*qg z6tdiUQ@n#unmbbSoyA6VOKBse3_rKXh<9OWD;m&uRyd~~ad0gyD!y(KcB2`F+MSpy zQ+zt~+n2x=QJ%S7uLNyue0*C=(bft95q#Jic7*-ZI3$)Vrui2SqU*{WGar3#FL^L4 zEu(0W9mJ>|Pq$xtY-+n-l_g9z;`uNNTkwFI>Mx=HopL;I3h7jWQod*i>;@^B5 z+Gp++JSt)~ztHI|b{MAZ`Pk;yKCF8YnkB zV10#ktgeqYa~I_iRA&614r=T`m5#X!lNrD5h8T;*t)5f|?f9fow*uDb9@MopBGdmq z{26(n!-wR4zz&#!DAeKN!SYA%p(!k%N(%gYY^&3BLqiAbN}=TOL`tKzEu0FIlH4(d zSMQ~g>a4Ox8L5od{lbxQ|(9h)nN*g){E!!IoZqJ#bKR8Pus}}o#gz^wUDje zvr%6GZ|h&N80emxf`1-@2}*{^E?840Xz3;Cd7KnAnAbBYEe+0jqr5?m%ynAEXyWdE z2r7w36>yNcl`dd6xdCOL)6WORWwV(2zq~~fcI=bo7x5}jtt3Vnr5BuXk&_2qGnut0 zO$(>u3gHwU*>+c!jF`$cyLyp2D1LHXtQm5HQkXBe6d({TRgjF$JR>kE zFHMv`FViU;-be4BBvl*Gnv$c`WeR$`i+4QVzjyO;`=WtpjQdZ&oX>H$$G@@K1U|4n zd|y}e>iL(S<<6C^XSe#gLRe-~)RREcUH0u$b{OCT{0Lc;iwKEAYCyX~l=Jz@VJHo= zeJrp4NkqQ?UN~6RbqB6A2-(RqrzgX4c1m~uIXd`!x!qr?@bLG&{d@4Z1?Gb)U+?9ne~?170qz4sc`#&Zomsq%AgitEPjtJ5LX#weqv7X+mi6ZPdZ=BbM0X2t1S6Xf8AbPn0dNKGI(X-{5{sOY)$2qzgc8rJvN8YoG#JH_4=Y_`k>DA zS|Cq?5PeBjEfZw9rkRMOHryzln#`%GVc_178~Gi4fZVRg{qTOB_cikk^&g|$qBKNFsA_e|2pN`_Rm~{`>6xn62c0aYdJGn~eWW z5QNVz15~G{3QI;3U=tuEMKuDszPWJ$lk2Ze=n{IsS`dK#ZZ zt2J1DZ4H@XTvT+qjgGlai;PZ$$+FPfFxMT+Kt_uz$pmvxJ!s!`&L>-R(f83 z+O$T0{_9`=rqH)aXp5c z5ATpI>l{L`p21fn-(P!Om3($wh}4Q7${CJ<9*S?r$H%828M_iepl3K1sbuZDWX=@G zY2yU!n6TY6mEJ8^&tT|KX@3dWNllngH1+4&keQ+=v7#!^;mTDTY^pl1BQ3VDc22ag z7{0n{b>!ZSC&Y}KQ0!QO7{Fw5DP&bh{`uv6WE)}u!OOCca`n}PIdW^5G^XK=FFoOK zr=6r+=tifE&tPg$poP+CPb(Rv(v=gBQ^pA2mN!wQPbTxA5)bY6+Wk zTv+kr`EXoJu#d(@Y{F9 zkClE-uynNGfGnUNl>2c~Zh-SZlQb_9cK@pq_`i^NJh^aIkI6r1a*zPTBf!lgQ{~2d zmDyY#3O^H#vhwbtIOJ^YiVWd>4oS|(uk=cvV@wp@3q;|DkP5vkVypvgm>U`%Mkx(D zC4RCYz;@!U&J;CX6LV6C+YPDu?^TTRC8Zn>+LNq>H6DXU!^-#E3TAREif_S5&owZ3SQ`~j5=Y!S zyC--un$rL-H22M1g%TtQZh6B*U-Pr{^lEQogUQUZyq{lr8|Z|xy!j^FKl&|$SILZ>+Hsf<%HE@}dM8O$@{AakX=z9){x)i=Yb>)X4tM_hta z)Fz~iTQs8IV&q?i{*JT3a|UEI&+&1tm=Hscp4}H4*c;>L^H|FUL5vfwzEgx!ktZ; zR=n1w35KeAa&>W&hW})oS5VWj`mx(|5XF|T#%U_c}45g+~6q&04PQi=!uU8^G zHmVG}3x{q2L2hp^{`5|~&luU66U#O>M#72bUaT8W)9(}DXr2LZstk*NeU<2uE8B|| zW;pJ9wf!y;P1E;_6TTLdsU7z!Iu!5w!XbK)cu$1X|DM6+gy?lw>SMq{`Gt;%ihge) zMnq;&$XS$x4Glf>P*&y z*7s~}C@SM+MmrM-)&);?`$D_Vk9_dT_#Wkw<7d~eka+*<*#1dw5y*DL=)#Cb*kJa1 z>7-PF9}(>du4aY_?8)*v6Y3)9eGkEfbh?{Zq41Ua_BXMGaX;n07iyyyy?+XPby?@e z$eTdrP05b`go0NhG@|i+Mmh!`O5g3j8~FJgVH-;b6-F=cL4JtrtE~ge2PW=$%`om1SaZ5>qFOlsz}Q&|I=N--n7;Sqt}()sLqmqhhq7jaqZuV zEq)wme+)jUrtZBj?rdkwxQNepy9=L#xQjs-5ON~y+fPJGBE(On`g1%tV!>I^m?N|| z(66y53e95RpTF}_`-cPL(lMN2MN@N0CDJjWm`#O&3%A|Evq|y`5yMVT!+TNBm(t9j z2cR&~EF!}NI+Ucxga15VJW3eoYG66eh9>I9ziX-5Sz(Gc1YJP6wi;G|;?NaA*^%){ zvZSKSNG$Pan~f7*Kaj$!&*&o{SPoe7XjJt5&n7>Ci9dthoJTY zxe0aAu4Y>K)A)27-kq4GOTXG!6gf|trVO{@kRb1}qnSwE46fEgsIoSECR}QR`b@AC z&=39q_c2lBc3<|?^I%vH2g8saZ_Rqq^rmv?rhWaV{2IXjDlC*g?Wt8qZ|5S>XH$6m zUYCiC!S2-wUd5>g^RwlZ&U@WUN7kH2lRT)Y&^oO#95(Mvk;Vn{eh*9#Ua(B?;E?9T zDDsK0c$bz!e%QO@A3aI}@l(AXfQoQ`cs!T|Vjv%R@3+q$5k+mJ)yrI*$@#J!D5FaR zxh0)y2>WGoCj_&;rBO-#K~kwLQ!kZe!u)0~99&6LqV2V3)Zjec2LlyLg89_lc`vsp z6%Wwrg*h3s%dHMAR^Oj5AMc^mI{5cdPm(p`N94WlK7rLFUFd%{{ljTBQ?P?RNe$$H zeT_ubVH>s1Vc|?)F_1h$X=I;wS)T7v_&fgHkys-RN8k1h3_QJ`o*35%ETP${Z%GwC zzH(LF=0X<3bo*R7zZqDn4E@i(Ng*+XW@q|7EQJ2G>GEl3`V{+Q^{}N6^(SF&40zez z{-PQrSTst@ekc}7o@-#a%y>X)CLFv0yQ>Y%XXw?cLue*HUQ^nQR)sD!%lH2YUP{%l zKvf@A={nV|=`A_YgfC}#e~D>qe)~#+oPgbSjD48g*mA>=66!et|APPW+;88Dc~kQK zJ_p{LG2`0Rkth}3)fe_Qzdg|{@a`SNIXR!-KmNM5NA#$wP^^M#`}(5gnil#7`k@zu z&;0&J^o}EwtVz@n#p8Di-Ud={OUCZ#)_hgtm%*B>GWk%*4}R%Z1q4lmI3L~_!87`* zqa%0vI zdVuCiqs71ER}SU$%YpV`^d1Ubr&=T#WGz}pnefX5& zoe*P$;>w(;4AoU+vKV+yKCQ7oM06l>M?>?6pd2b@$PJj+u(PW4k;f;^X1sYG7U?%_ zx%^8T7c1_;2u1N&xu5a(O_AqwwqgAo=LTWy(=sx1HDOrpt6V?eFL~G zcz=$x%9Z!A4M;e2H?;EwHrXMD+BkcGfF&IlM~8Xa{?S%|0&xr_aP!OOLt2DtAw665aL&W_r)D58pTY{q2!D_ zWzU==H#TW8fP{)p`ZZT|89^b6qSFmEhUD3AU;6zv@LC_@@c9yk#LDsMZHmc3@$2Ig zhgF@}gtX`|k}3>s#)FLTfe;>lMd0R>@D^wRG}cA_4S=pT+Aha2n2pc`p6?BY^8dAc zx+U?s@?lFkDoMNxCVY(;zQ6rp(N$sA`0*4kz56hEk`^&(mV{hKG%nY+^y*31LIw^- zRI31~!-E*$R&nY`;LX^DZo4FQrP!3zH*F1c`oQP8IED^*3{HL&NJ$XaiJxvzC zq%v5S|6+dkfKoo(oEN%c0E1#hK^B@g6wfZy_f(vXo1MjX9v660=H&&EaS0Ypl0XGe zw~XSczNm`anVY!nz)Y(mWhVWa+Jigy(91dnWpQN8f%68(2ta`fkbS@83}a<)-#WH} z@a!5(*nV)&Dk5BVcy2*sc_zKT;RH6F6Yq9lfw|d(hy}frc5L+kLNCC_CkN07c&6M} zGA9>6K@9_1x?!HzFo`SHV)LhhS&Kt`SkFu(gA54hqgzVDzIPKisNGB?ktHh>3qd$I4rvN)qZ&>0? zC6T2bnSTpI`X)-CPJul}=&0$ylKm(VfYXXZ)73RMWwD1anruoY8d`*noV7-k04Hd8 z!(*<{Hc|I_c@Sp9F$P5cL@*eh+wroy0{NwLpnY!P#K8ovY$v~CL+%thJXIb!219O* zC~t>wM8i|F(ck3tZGHS>S`CN^=1s=v2UGVDngHGZ(@dLoY^sr4{oo)cnbEu$-N3X{fo0uIfXf+{F*g zhFQ2$RhsKarc$c=3biBi%LT8=EvP3rBirtgfx+cSeNZI(KdIQHwm@2^my>5_|S7HLxT7a_b3qZsXCB( zPW259yEE`~mR;g$jbA$cEXxIkFJ^(m62pW%J9aql3lC}y(It~a0t%u+piE~PfYb8( zByB$x1k`4DiVL0Fe%dUUvab7!02pu6(li72ib(!}Mz(u)3rILD!iEPDwWsl1%#5fbk zC)&B=&XzRwN3Ie@6%F4=3_x=r;6aCGONY=DjRqrc|KoOWS)$tdMPICmp9g_F9`DuN zh?o2p-Jf=5N?vG~B+OiLz(&&>pd<7H03nPHJob>Sa{!Jdv!)Ob10rtb!Ks~MhxZSQ z61Pl=z3D7L8J~$zZS$IADiq^Kms?$Dsf_BYW(d<>$QQm z;L$`|>pnp#|)zs01KP<=N))4~69@psdaYkQepjs1plwp&RbhK6IcH z0Rr~Vb)K*$Cbjbux*s8G4pA;MLV!!K^oWcF6QBadM4Xh+Nv^-~JF?Ek^xEbx<3uLX zV$a!$73lN}gAL<1AL@Mq}$gGu=Z}LW#BZ(DXvkK{yZ&UKgJ^jnm$ZiIk$C z&_GWd7^WWK6JjAqm-uI4;|8gq@zHGv8f*kzrc@U2;qKqVq!w?K`)Os{I~|$Uc?Gh9 zxUB}9rs1GE(&>|w-DKqCPgW-=?Al6`bV+xgA!t1?Ar_t+6BPcJ?%t_iHaCA?!VcPy z6UxE0NdFCReh_xQ-0lh~kkD?V!bysuqX8$*9WP&8w($bXz#xWE5&r$-=+*kcF>A09 zHZX4`TBT86A*Q~_vZKydpF_g`nA^pUntmd?2wp8U29PZ-hfk>b1p}v> z-G;=X5RWoz(Io~myp`rTL;%h5H2?`fNbg;7UWiFi*;#i}PS{C|1`Vz1V`@N&Na4DM zpQM#|;a#)g&4lZ6M<9G2N4Tp8v(&&%5b6@|MS*%`^KUtZP5m_eX)x{A!P}n0)Y{_+ zwDw;2W}iDkfRxzd5h`gPqCsd-G*HY2ZDz|r(Vf|=pVKV_qZpJpJdbkCXv}k^C=u>X zjCF+JgygN9Ug`;OyAT&|BR!G!x_W|`%+D57Ngc5wlrUh2CJ=xkyjD++)q{w5SYaJR zGbbaJmqIgFDJ{=Jp>qLkDuZl|Kr+hJv+2z!vt} zn7ta4R{qfKIr7KZPW>&B6}U1qg~_HEx{VHNZL!A-2-u)3uqt%Z$sw0Z)0kD05+V`6 zWQTPIiA0uGQ7VoKtkIRwwsYMdx}c2Kb4TN08v#Q_iU-AR^`eVh=1cmXgtyPi5Isna z%4hnAeO|DV&gb1~&7kd&Q<<~VAGdo8xImybIOaH*5lzg3HAc5N10H6Qq-=^j3XqjV zux^rVWMdkED^V^&ac42I@&JOayJ@D%8pak=FvtMJ&|Ar^V>Gf{N1TqTq%d?LS*#r} za2&;6o0i7?I7Et~IE7hfY?XG+?VzH!l4{-gX8qw8zcArivtHZIB*DhR(s+dSW7>B_ zjhvxb1=)8_F5=a^fa-uE?mF3q56~SkS~;p-bQ+70d@^U3r7?*FlwH|EqOOLODgjY3Ra^i zy|>;3w{@0z(U~6|IH={Mc`|%d(rd^(1;twO{lWc@Q-;byL{SVgO2AJ8@-a%LUfQL> z{m%lTv8jM7pb`6=#5n}*WSabtm&fxk-&0N@#MzTt7w}Wc_cm$jQeeVrh zdpgqHG~K4RIu-MI$#K+cI6AJlfBY#bPGTunXkMCZ@zCLBr+;!}|kV4xR zKT#9mkGZ@PXZRDW;YRKE1k5tV2QyZ(t(VEFA4QhyP4oO+z_hl8N5|v)xZI%hzoM7x zGenRE?CpZ&(Xysxg^dp;Yq^kG|nAA4D|_7(!e-Mvnj|G3*~G5mm$ifqfHuPe|Emp2hjqxiv? zDb7E}FK4PQr{xB^pZDUKTOtL=!2)ZUKsBWe>;x$mn46Nhv+yd8C9gZI=@PfRFGmQi z%76lxxdhkc!$*W&aHlJdonzl>@hfInV2(s?v70vhkg98d)kHDD>DtYlSO%|5rwQ>* z1c)t_`~R`lo=4pRXa>$=5*F3wmx?&L|oXtS!J|&tK{zwc;Q?fdNwO4zrEzv(}^|*I~zxtdU zQJ5BUHX&51)bB8SvARM};+*_p>j5@DMXpFiP2Sf>hY$8#m{$bP&PnaUu(k8NDa0N4 z=?o_LW*n0-Ek}j@T);p=zYI*Xp&66xS=iv-TL^3`bxzKxZY{u>0=8!;^>JeW^`Pmw zGM|Xkx_1pHdEF{n2*E#8?|v6WntM{J0(X?q)u_tx;ws1vo@Jywev|=_QxY*s7@d(AQ zu5UUU0(A+oM0R^Av=rV^H14uMfivmU53d)(wL@H*_J{d5C7FoQhM81c^|{MA&9JgO zXIn!_R)ATXJ`U0N7@uB0`Zi~e3RuA=@hPIY1%3DYb`*KyZPU%EHdEL3r3a`? zpO&XSG|4R)vn#@Gaas?rWtNk%5FnkIq%4WEm7Yg?nX`?3K^ctTtONqcM(a(^-a&l( zYdcd8h7E^<7;SZ{l|q!9gVc|M>u8Tw%(A9Vs5X#ge&T+q@o9LI1I#KDhF z%A3Uoxi$7-)s*r$wQOL0b8c}^3#*aPu$>>-Ucjt@^*bF>ai9*CAo?%uF z&USMmu*e|7!DcZDaUWfzMC5qf$Cd^v^)Xm)F`n#~>BnX)lG$!hxeifQnE5n|v*bW? zn#7efff6yQy{@%r$uLBHtbV`1<~M3-7pmTwI{a_pXPFwBRT5wX?AkQ)uX1=Sv^e56 znstn!F9~r}lmO-RW!Z#a(8KLeR0zUGQ*%VEqtOU?O>X#Jr7A=t8k-L3d7rmx;y>YC zWvO&HHfs%srmUUmqvl0^F3ASb5(>gK{Hc1fKa9IiwMk*eB8I?e|1=IQrh|c-I9H4n zu;;=RkV>U1B9#Mqkd8TnG6T)fX{wsn)vTYE3gdhckyT|)?(R`g7tUp|L-87KpdyY$RD} z=lRVEa=n7_N`RK0YkU13#O2wUqt1kHdGI;^*=c#!5Eap8klrN5YD6_KC zp#p4M5;qxAd}-ijOB;m!D}rC>TNNb?&q5t0WiMdBDGXrsJ5YzLGMit&eijKr&@}A$ zn|k<54YSsKro%dSvUzRt?_~Zg6-o@1vXu5SR=l?(1gU3A9qQ|v>&U2YovLy~O2JdK z(edU(ZW#x5ddcuUX^jq|pSoK@q+y6H-ehi)EcuQ`)cHi03k^WAuCHJ71;4Z?}^7g za=;MW8oZ-dJ$40YT4F^vEFjw{BKcv_OW^Rqo7;fWPI1~#U;%0VAwl@_&}K32jU?@6AyIqIhJo4Ips+z z0hdL5_fk7R6nihAFEkrBGB0MQ2O28ElD0w?7eQNRk$^`7WZFhsG-0spN^O+RIac;4^O7kv%7%IY(zOVuM z>{Za1MG1D(j_?7ybxA?VmwqXv%Rsu&y1>aBh1SdEFx|G%oZ?9QQ3*~!qQThlQn7up z0xRkm7F;oh4W7t*Pjxb)48?B!Q6-2Y!NV^aL``?(QUaN;afb>ab*32u{mp^UYI3Qf zj7~t%v0}%^e8xMBV|zg;Th(fl{~^yZ8RX$qX%PcO@vj;dArWKT1X9{SVIVd_h0-EeKb86!sN<*;CNTBF{2s4IW z<5rT^7^(=DizOA+!}C_F17&G1U=f)gl~(_kJw2) zb?lQ(Yd{8*z(pKdZP8p}zrdh+&0aC(^Mf8)o~1!bx5$pFiCDAAc2#Fs{v(Pu>sSKV zaWJr9g-y(`Wut$DTJhum^?M5`wyQm(dvKMXfXIP#*>Nd&d&cr%1bXi6c4##&Z!lnw z_+n7bR2;~)yj@C=-VloZ7#cgr6*H~DKAa82&U#U+6@@2{;bMNkbIQMv9Lc1okAs)P zwXK{LHbmKwawNt@&s>kJB{bo79`hxUM_G3WpB0r2-O>L8UX4~(;!BpLQ|W!r;?mgt zL_?&Q-5*uPdd}ir3ml6QNktWMRZ}-n`8}o)xJq5!#R%YSqhL+J#V(fa7Or{4&Ea6` z>A!V}OPFcc*nQsqAtF`hggW&nF;7}oyLxF>Jqi5X*e0b+ibo>z#;i z&(S=m@VY;s{}AjktpDPkX((Yf z{{wzNfxo2v9!#AcE<0|2H=vs^#Dj?wzv7=jS3sSRWSlSRh6>BgP!~CUZPo~)krog& z(?D|Cets{H@0(&f1{x^~Dm@pk->}XHH3E&(*F_lm+zFT`lQWBz8Qy3|SQ=%{|2B7g z3JxD(#I_yvQMYdaz0wjZ`TVm;Jm_5240ofK3{*VdI6L344`!-=6TDkG-{zz|#WVc^ zw`{-1)uNG2+?%1#5!<{;t*idCMbQ2qZZM})d z&?dIs4yJCy0~41Na|vu&r1)^R4&O8Y-gWq<0icFMPU}P<7hi^E7Uvu9gfKMY<3y`y zvQ;SK!IJ`oyES3U|RbIP?noKGuE9=Tm zous&h%nMi?PPH*_z}^UfPC%H9=Nv$?TAdhZa7#N)(L(~A(^p)hCkF`L8NV9c@gTF- z$(A!Q=~-qGQ#}kWiO2yv3B1G;-1~RsFJgQ;OKx*#5y+o^AY22S0%Ef^nka%dst_ub^|46OH;zE)4j4_M85}@BkH~t|kUfCFJUWzi;mEWaH2$+0F zejp_7Sle`E0q4B0TqFHs(YRz~CVDpae3wUyB{HRLvG@U~dj$w$Uo8N`FO$wP4-tVhqbb!;kIZ*EaIlet=G!+ti6A zmfp}=!6ho=&uDLJ8~f2{VtUEYKh=SZ9xDE0^-4Mn*r(%$ODs}+*}ptcYC#TB7{r-?KEcosQhNRo%zJwOnFG;jb$ zv4p$|BUBF_-y5xo9e?NDhmC*ENXyo{$+jN`X$!KYD9B{O3(bZu1!kn_qC(aX;-rH$ zJh6_s&9M`OdB4sT=N($!<60 zaZI^?G4@nK(M&+>EFeZ|UV7(2Av0(p@H8GEyb4o6@_d8+_kaB#`QQH*pGbespD_Iw z{r%tn^)JSx;?R1yI9qsqCnyy(NecBJ`p@i)!6D6!pt#cD$rPuj} zy`+PdJ2$F9-*ev&Ww@wZ9rCgXSOT;Sw5qw0svoIO)z}Hx33Eef;<*jyf2?3DX)Gk) zUOll5x9=p-9?D?A+Bv?V-6N4gOA4exdjWX@Rok(w2*$*T*#+kTqXqyJ&L4|S4v++Y zhi*EKLqYT<1NNb|m#W5z>gTXf7DTR3bISr%;{n2zk*uMDY1`CyA+2$lFB%lf+$2K2 z^2YodcA}~cUGsE%$l#}TPjA#dgiUDub0eut#Yq%b51^&L(CdW(-CSSQT=zIX4*G@sTtrzqx_9%^!l&;HL#iP7Q5vM2A^nBKzs0s zBn;TYr)}teCt>>td_uLnAF>k(l?AJ33YrmTH%=^rc%*kH&HQ$$%el;o(}}hA2m!_J zBM1SYXAvRdNqF-@P5YSE0J3eNQTfJ$b^P}2>$fc8ItgF9)%tAeT}=`S;uwd2Q8b?= z+=V~@3Cg!Wa<;Meodnk-M-B>q&m|V$&#qzd?%MHu=R)R~%Ez-Py!O&uOBFrWO@KVG z4z&Z5;=J&rznFEJhA7EX0IWer@kvNb`;s^!!)!|NNil*sXn^|)!v z!+9k43KKWbD0mh0EQvetePcs^!Hxpk+Ye;#BqSYjuhzpoAwt9xuJR(KN%Go@=Z?=} zPJkdITQmk{9$5Qh4~3Wm#~ukTFCP1V-yF&1P${fPY&YoWF&_3`YP_)EZU8ocqt|xx zSR`^BihPDjZLg5>odv^)YKo4;07L%sPQuG`IU}`x7%U-r;&M5F*+X!D2t+^wkXD46 zLeG0`85q&AL3l4N_1k*;C!R6Deox49LQy8yXOiL^bNrc)^P>3 z;V8jNn>Q3%eN-Kt?9U|0aAty4SXUbhy`%bT}Gf;$dcc zx(Y-0;7Hh7L z=W!BFS+<7KBrdIgQna+Rr}Yw#Y;V|y>~zM*;>*Xfe2{FGmk}3}Q+)2b;)(dYHqgin zqBVpW*3CLgYYm1PhOoR>HF`SKK-C#1IyI_vtn|cVR=J6qfvnbV;}$Ms!!(feEWut! zs&p2q0V;h;@H_GRLhp<+nst=ZWzS+rR+i?o(hS$%(x$1Bl$2Dgl)kt>X<$~}t$~u00Q^GIjsEodnn#i6a{JM6J4zau zo3ooeUP7IJJXluXOY(D}7KlB5BB@9A_-UJXRAGeb8q4ij4QVODnpIDLS>5 z?h+KVmYWF==!sV-UzvzaO-on`Js~%Tho4o!0it{$JwmAutILjRO`@z{tTWXN>nb_+ zE|P9cdzd3;l`^psS^)b`NA^D8!q<$pYO)n9f6MHD1eKYntW%f5g*W5Ur)6 z&~D&tL={1WcGK`6An7eW-}vwU`~TSM*Kbb0`Q{txi8hEPn(YT`%1D^$>jb}SRhJ4Q zSjhB$yVf$jZbor0(|=7ez24M&nSKS6V={ex$HnhUreA`VuUV#FoGj)iXjP_f$T0!< z2^y8@8*oH?;WB+0zVBuF--}FdG7)zu(>LUGxLc;rBmc-b=H$#yy*fjg951_(tQYYc za$5jq`({P_2HX#g>JZffne^Q!Tb11_5MPmh0>NoV@3jXLd*7=L9jFcqi1HQd4dt2M zD-HKb1E@3@YkdO z{9A|poP|f>y>9Up=@vp~aKrn!9|L#as}UWj5oJ92iWP{`MDJCHd({C{9g28=eXkim(*;lZ1lNf7b~D4Y~?Q0h6K*kGIk?7hQ_)h4Js)z`f0(VQHJYA&lQ|$sgWy z7Dfr9wHi=qtHFzK?D#Yc6$G@OUfY4MmiM2Y-a<{~Rb>x>F0?o~;sE&ZAf@3Qy#sng zep%vp7ozw=7mTc21J;ApTIha%C~ox9n6eG7Q-XXaaK)22?S?`9E?hy0d@k$9UEB)Y z)f-Q;9&l-Qj0CVu##$;qIIT@QV+8Z+84AQz^~fDR8RY-f_=)Fo?k{8%5YlTUR^MI{e zQlPLb*nCo1uS%4jZyc?E?_t+Kr-qaS>bo_NOhbWeJ1#2;paaE8XJP54=*e{i>f0g) znv_Pz73@voL7_D#)Hnlxc|c*dL}+`z41mqZt+<0>Y;O2dkVDdjMkRS4x;$|Nf8{c< z_Q)L7yAgIEl(ioQg2Ov{{W!*3Q7;m(3`lnx0Iqic+{2B6I{?Igm5qW|JULQp3Yi6W zK>X6%zSzH=^)7Dr*&pHu)TX@*yM7UF&r(xnhSf+r_nqc(&j9f|&Enqj0J|OG-frW# z7tg&!_H>sm3LWvY6O*VGMo|0U-EN?6w;QOFHjjMC8d{=`U~m^v!k2*QqMF0PY-I(d zzZJ;zhnW4wihmG)LP^QAuY@r#J_-Zs2mMF!cqE`~U;I7HeqEGk?N<{-+4NNbNuP(& z(M3Ht-R(q-+_i+$M*S|kdlr5dStjt_>2mLMxp%sJZl{a2Ol1i&ka5-Ct+Ej0Crj#q zJ{@Z}2sMDb!@lzL1j{BxfM{F!4)Gp;SmIR4cOwzMw&UgtEsP`$ z!-gHsOv92pFqaLY#;$PLND2X;P1}ft_)^xp%WAAS;4oRW=7K)J^l6EIo%li!AP4;z zOI|XC9&21={lXDc*ves_8Ro+1#DihwGplnELVk*jIJFm*fUyaO85VJ>X(c|X047b) z2}PaOa_otJGZgX0Tzin)8*uF*5Uk`4i4}MG^&~%L@5G+B;p9U+E-RgU$B>f`a>k?% zG<9e#ynON>0B%0W36oMu2iAf{+G~J9@7&PE*g8k0)W$yBND?|)Dd}H z&b&;_s!m$r|InnLa>Hw)d6VI&JI+=qPd$@r88jEA1v;@(~y>X#>cu zI7%Nu&Tf0Ke$)tj)^U_RY8F429HptZ)cUMGstJiwrLcFlJ^~{bOA_%)Z?HW%pdY(L zj)nJs*{~0tdY>y?pyqW#5ErI${Vi%H5}8sk(18&d-RZZQdh(z zE8BbhF2oJ&j1%qQ%I;yhc^q-~1Uz#5DoUY&8tWn<>@-tJ1*61yRm2`2Tn+k+iZ1lC zfZ4v%SRbT`W6Ccl0a4AyUMjG~;&lQ+{pulqS{881+XT8E8}+Iiz8^q8a)BK!oBXBB zhj_gJc{KNWE!$gx?mCwEW$!-*BueRMq$Smvm9*00B2MOU7e4gzB431|~26rq3x zZq|Qpa22EebAeeU{!LNq_0emATE_=RFHT+^3)K4I_|@5i?)~U#nFv89uv=r6UIr(MFnI1LZ^tb^v0pyIg^^5>Uw(P!V3#I8*0U^=q@~WIlD3q;y<5e!LFh zOcc~f)sx()$FBge-6ZLmf^ynUR%s=FNv|ota6#Rfa`A6v`K>FSFvoR0;#;BWq~0-A zv#7(AJa$5&*)+3(=H)Q5fCviRm|tiG7oe+~cpxkl?+%-=)J2UuR1xPIJ6R3UfuKiRy3WhM{5;l+)SKy`V&~uqN zgbUCbAdjzjo!-U?pAN!#GMLeB_(AV{5}4+l>GT(XCQ zCvAH-pJ3ii`*E-$FDs;pett6g3rW*~Yp`9}AD<@>eAy2Jrpsl>u@u*8#1LTq5TpU& z830VJ5HS{21fRFA)6)&zR~wANIX7(QMR%7jpqA_(Jd4HUU>2EvMg>BNq@z%xKyZh za1ce#Ev+a}ues%^eZG>o#+_`iw1n~dEe|1bh1*IB3w;28eZeMK&Lp4+TaW%mg(Jo~ zrjjbE2sJhEW^>=s1?W8SaT&-aOApb-N>p~yq_F+2;HBEIDe@sVS=%6l2nLkV_M*s8 z(261=LgZZ&_hiT?O%CHTEsyOe(Tsip)UCFa89GVPqoqC!=Rskuy&yX)(7GdDEWPfY zF1ey8()ONzA+XfV*6?no!Yx$)6*IydF4lj|5JJ^{4H*9<-jN(!6S%S5KKo(ns>&@B^(27LO2eK5CU?T{<7M;tK~^9bzaAt9h?~c>^hUoutn}$zGV(ylB&`dAVXm zSUbs{E7~zr{;V@o2%UhmD5OSR>)&K?qMlioVXc7syD zun@&U3YhkT%4Xzchlk_)%L*8f6xK$tVnf+*#gGD-K`Td7V8{JiT1u zOn)AK=K|^=_Wn+{F7v+o4kE8c_@XTGLX@0^l9iUEXNsrmc}UT~8bOVQjJ2M}zGI^Y z;*axiH3<(jH-YK(3-fMgzarPAkB4;wFV`6r+b zZwtwDreVP3Ic2*D!t7Sr?|~|$ z-C!b?k(Wo=p+IJZMUucbQgXfEJ=g z8lGNR1bOv)+8QPWmU&(!yreTMx4V_p+g~-dnTyRZh%rby zW3yrmmgorGvseOSgMti}+1Q9A17$8EOWbz&36z?MCDmanvXW+kLQma#m+wwA7Jt&D zx|5&EKixE6A`#bHsr@BFRxOE?dT1R7Zo?#j!e|YFOPs%mHzjgGxs_NB3LbWx3SAO( z>?JPAkJ&rwfM}f~1?Oa{`>lqow}Kq7;>9XqPp)iP($lL(%Y`%x1EtY=0^bN}w$!l1 z2lZjX#1SZgqe+PmO3-LV;zN=)kbfm^+Z8-Q(lH>34@$0h$PNX}MunP0$}7rVg$dsm z0+B2~!j%bNOdriZDI-U`B5o*rnB=UnOn)RlWBL5l$z?+_H-KYg zo0tKN06-CRjKC&HM_eckJiaT)ObVruj=d1)reaZ5Baz*7L>i$jkt&3r34gWHm1|Zf z_-ur=Ln_6BtZbg63d<0QXp@Z*mIi`!HmzO$Rn1iP?5h`NHiA+@#7h&Re_@VOZYl0; z1m%#FM6HNV!)sn75NQ#MN_?dYV{;Q3x?Xso{sl5{Hv9 z*k*YEBXkr+I6^W#s$vUX>vn`Ch5+N#iY%;(FX=+m!Wb+y1i%<1!^4a*X%XPMFjHGt zGs8?)qZmLMBQr62*Rz1AaVgQ;i>C-0F+z%C2jg@J!7eo>SxNYV(xVqY|h zG1-hbl?`=qd%o>OiR9;4GIps%C@mKMB!1znQp!%eTww z%PM8LX36$$wB#=@Lcg;xry9i-DO(IkWHT^38m$!1XFMv00e_uuoIzcD(Fi5!sW3Nn z2Z-pTEzj@0AZ%7Gd$}K|)Ya(J*0{W}DzNO-3&y;7k58Oy3Y(;hDsoZ+`;y@@uR9g5 zl{F}p(-$BXf#VwNg){xBS5B;;tRGE3Ha62NUF6p3DXThBMn zH|#+Y2|}_5Nq^fwqcyBDTvlKJ@PaCLVsMm$%v0?9ZDRqL1{SgHtb*GU}m0sxgS zyFnu?+Q_Q8a=s+#VhObxSdflz3kf@_+Of#M`i7Av z)9z@E36R*P4^*W8vh07weokcL8oUU{j!(k?Oxe`Xw4e6FW9^>u z;dSa&O2Bh{mqqrJSi<-^O5Qk8T(R+#ksM1*H@Em&%j(PHT7vh|xK+A}Esxr^d}?bM zY`d+Pt$!`het-rc%RE5)5u5EhMXXJA1yzE$-4j}T+NF#{WARBLMoPJvyb)Q~GEbMD zC}h4~{L04(l3mb&JHpm-SMo=c?slX>aI*$I!vJ5lLGMuU5b3I=yH&FcMXDLJ*m8oz zSK95#O_zdV_*N~>1y7G5cf0BXRZ3Y|vo~4tihm~k>$3l8D4^i4T*38=TXmMU=Phqw zx*SMPaVT3+yq2U!Nk#rnhYc-#Y!F_)kv{}NU4HrUC3D%Wc&&HUm}m!;_hs6X(z{Bu zPxhx%rvljq-e}wH0(G@wS)P(OaC1Kk{L0RnHgc4<8R@swc19&+=VU6x?3-RT-7B7a zAAim%KUOV78nGweZa-Fkvf{^Idci#5OaA~0M?)KCDch9Xzwa~w=Nl^YY;hw?JpW*j zgfGGy9vwPyXKl2q7-{O8Lha36_1c)LZSlDl=0Z5q=;lju9Otri?)PC+ssN-Sbs$FE2|5O0^^S^V2RN{EeMa@ON<8E8z-lV{2Ag*l#Cz{;(83jheBtWURBZ1LCFeu^Ld-WP_B4!u> zti*05FdBvhfEZXkOUSez0MO#07Hn7{&4R#KHbZNnLkf&0F=@a~=QDDJ#B3_|*MFP& zsni0PuCX3p_VN0)>Sv~ap|6GYHE2rfSzD@v`hb^1ijgL6cd-tzZ2D z=LYXMC@|-3l@)EevGPm_lvy`)<$tXnII%1*YEK;~5~r`COwN>uyDq}Wu;Vo{Ry7e@ z?v@1!hIObNdXU@Jn-hBCT({+*Y>!gn^jt_GInpA3H#dDyc87Pqg!mn+z zsr>+;NGem*H8N_TVfz{6Ac_gpIZeNk=oT5VZHX1?hE{kjTN5sAED3ry0DnUQ)HAK{ zB8^v%o@d>kZ+w5g@qqpI8#DZBB7Oz6Xsn5c^wM%&>DC`esi;@J^!xexBYm)HLMPCf zswPfmE21QD&2rh(+G}KpjH}_!Dr_Z@G;k7Gq5t*ek#ma}9&9_b*$)6>uVe-xz$fDg z>!l1^j)i29k00&SmcF*OsDG?KafM9!Q0Zs%aW9zjw2elxACHZtA%xM@;MaNJ36`4AJQ8r7nKyXGg_OaMo$QDZj0EK&q>Mxra)=n+ z4DC|fHJobooF;Skmi3|)WAVrlL~aX_1cp(XwaXd?03Z%LmNhF!7mg(r80T(U3LZI+HHt;vTL+VFqv{rdH=+l=eg-|wD2CoA2bD^Ey)CG{C{LP)W`Bro0gIFE~9X|&rbP_ zjTn)_l2E3&IEyU2pc*%Sl|h}R zR$XPOtbhLJ$Z_W~&b`2bqha~}qW9SS1*I{xcz>Zis|@#-ke~C#OK+{$;)oY+EqdGT zt<_D#tJeEn*`^&d+Rx@>q2=(M^ zM0h)xUkN&tkhVRe+@JE18JMe>m1c@{y=(hSfx>o)x3>4$%X)kTirB09YP%X=4aI+m zJAb(uJ9UAp5RQWE)=0bs;0bSAoJ8UwKu>rBcI#7Per_8IKN9F*x+~tPObD3~!%C^A ztw%+qBPOD(y$ zcu^P`tF!2fC7#+g@D##Mjf7uRxT|cL34gjHY(q0zkIFDI)6N1j<@wp21aTPIX(wl= zd^m`oKpbzIpLQUAYTMR;hJcj#X?G<*VfP*y2eQOeyC$ZBFTO^?L0Y-^cDo800bH4kHCRsJ*CYMHRJ8Gk%h`J4nsAv_)Za4`NRFQBJAb6o|ao9Enqft-hqn)BBGvS|- z&AGQJy_sGxn^n$HEm(kr*8MQi>By?3H%=I&>=X;d{U4#*p z1-J-9`|&K<&E<|u|2!>HLSwS6i+@{oIuBfDjq+|7-tw;J6oRr8^0!676YOOekUgGl zB_Z3Lt&!0Uq*&hfzPC=`GK^t)flr<2Biptf#qv&-qwH9ZVtKL718_E$cc;sJo^W73 zwocOv-&vCqYZ}B7NaUK0hC};-03fj+1Vj(}fe@UqAEgTju=PS#x)$4Y6@LzEy9!(P z04=V|g7#%ekQ2^5PtdSp+7C7M*A0bC4A#8Co6 zi3%w!EYKl^hQhP$AwnA@%ou1Z@rxoYdxTMD32f^rD^q1pkR=GNCusW-xK!0OitWcM zRf=dH(BGp$JSpoG@_i#J#ecWoY|Z0n>%t4RcyP@woY-FaXjFNvuS|T)#t|1^%EY9Y z>qSDQ52ITuyy+#(4S5{MJ`zt7#y=rft!-fECHt9u!#2sfG8oWGpKq}DZR-)qgs-U| zS6`1HTgUXHSYf8-)wV`)>9ws*w5>&a%d{R5&Xd_ZVG?a-5x@4rd4J5rac^C{kleV* zi5IsH4$s~lyciA6ema9#(pKw$coGT8jHawGx7PI!fG?XZ%G7|;AwV;n&cqEPt5c3c zm#eM^^p0@!GW1;@^;yEBsTYXhV**qjMPbCk@pv9Ze2r7Q0i{KZ_>GL;9<$Byj8KQt zBBqYGyyz+0{7HO!vVSk@Yzn+psI>I4t%qrzM7!z_#_oV)fsZGlIM5HX7kl>ZQ-P>c9|6*N5cN0N?lR@082^-nV5tdj6oI6{s$9@1yxcZh*UsZ&S!mG%c_Sq%p zE}h1y6Hs4wx*{?&IU^xZ_InZMO^P=1-|Fi`pI3!_5cJt9LVxPmNzV)ku<4PL$)&3A z2FvZ@OuKFBV6&|@WIq4^oU+{xt^T`LCqGs444VeF1VaIU$3ML}K0G@?gZW~-E z#mN8pMk54uZ{7(jiON+-Q)D!0$x9GspW9|3nK67(nUPJ6?=Z8RVE zV|xQIQkKcIpd^@J3kpQxfx?JwY+V&$q`FaP=jlKH`Tl?We^5&Y2>z;pg@j1}0F*cb z08mQ<1QY-W2nYbO2_?6$Uo>P21F{Jvw-#zNE+qr92_=_Dk2F7j-8^0<+97v4+R|KR ze8{TGlF%jz1^~LPaOmGB0aB7dQ6j<7MIfod@-kn(d|CK8fpvRb)$gF3-@L7sZC!?S zTUN{F6Raj@KPTrEeVE@&&i?arlAy)O*+eiQXUxq6n@lIMS}e-;Pi)rnw&_=0Lvu~5 zj1-<@^1(_-4#7cxmXT?}Pz%e94`?9;4|I*P`GoZqzU?nHIm<9_a5`CF)4&y8lzkB{s~WK_msgYf|NgT|^lTIQp@pmN{*!b3j`JCte4S2mIme5e6*g~{=~rx9Xn(;iwZm*oYm>oo8%#`Z`1i0ym;k=;)B7lj-w6N5-_^pKqj zF)-m==1FAZxB#OPFwT_*8)V9Mln&N4CHb0afe3KbXZ-KFqEBNqP@fi)p#t(JLb6jl zfEP50&eC^a>wg;F2IF6D=kE1wFbc{Y?DOirXYq(4C?-${|=k~)%!NdP$wX~1(g zN}J0iF|TQF=Gb-P<<)+yo(AbAzG{R9f_(4$lkW6g!4OyQh+CpG$5;n8N2y1 z+f=;W{B~Fx>|tpbz|hQO9(-mdA_Oa=+qPH&ndgU_s4NP+-6c zWPzFjc?y|?<;p4%$x|t=ky5?KT8zx}yicGzHq-8yOz*92_grmTC0$}7M^AqvbTSt@ z%OJAzQGoCOq~`r}c@!i5L<(Npm3Eb|=LF3UW%rCQFaG%B^UGwK?TiWg6D@XsGA*PY zq*^4Itc(&ZO~=8ZBiHDuXN7232w769IH&pQ|4#Lr*{7;TLVq~f_e;kWwxRi#T#M%b zob*Z1q^NXGUP&KWim0e*MQ7!h!rt_%6~u4wMC*Nc=+AenPI4;jD5qkEc9{>8NfI0# z&4#iwz0!DLWcDsa3W3bZc+Hi6<5G{S+Zq>Di?g=(R(X5Dgq%mzy1%?kVpC`}u_at6zIWIyV=6 zB*i;6{t0RF&q~YWMP#jjNrxb!X>FKu$>-3zBRywHa#| zCWl#sL^Mtes1HFHHKgbAVYjjyC_Y2oP3K#~4BbA?3)?Gs6rc4lw>upde=K()(YRm$ zjU{nb6clHD@>wI5vw$RN0)K&y+fn;n6%TjZ-805DUP~xcqWLfZPiSf2wL&SzHPgY# zBs0^ne6By>;lP1i{kp5~%opz70 z*o%*3zM6l>V$tJ_)iTe^e|W?eh(FE!`WaKtwHU>tQk*!a9f=Gn458H8BrsWJLa1V( z2?_S_@nDzjN88QjMOUG@{87MszTM6!n`V8;QoZdi@TFURau%=lomW&AtPBY?#&x&LYH0J1nP!U7&UhQ!!&r|`0Vp{^g2ID2nf0c|bdlg0M8mQ^F zrb6OmtQ1Nbfi+`Z+U!TUWn8Wo{k(Ho-Y2}NXbS#o(_?$BrWyF9_OR6ORS6&Z22xor zoJuk>&V1B@qgFzvkbOYS5~-607mnWA{Ls<&p^0uWH7^Z{i$|~gzIJ83eKGoBd&NCh zyMHx$cVX+ve=SnafA9QbG4DTgv7tkNwm;rgjoB84pl)?{uV3%+Z>USsQXJffW=73k z8Rza#c~>^8Io$jX3*3FG$=ff2Ov}aW0~a$@od5Rw<*Qf4`TO^i+uMKq4^T@72%=LN zQU(YB0QemM08mQ<1QY-W2nYbO2_;tm00000000000000Xmp+#?CV%~N(@4_({rxNE zQngivHHw`8A>0plED7(jMSy~Ecl#2GQmk>TjV*cgk>K0i|NWhw4_UIt)^tnCad)^1 za2%uQ`Ff_ir~B!TzwIskY_|7w?=lbPfp?Yo!JO|6_om^TpRbl&{HFM99!5Ofd;0M= z`R;YTxa7&+)A4Z6&wsO7EZ+XMcNJzY1MzJi6lZg&%q8%n#yQ^(A)0lT-|b{y#_F*gI$z@QE0knt+cT1pEU%+(!;iML+b3 z!$T9kjMFfSlaNz(!Lj3XE&LlEJr_SG{(Nu`-OPB@%czfCAOinX7ib9hl1BlLCbV%M zyFx<7)9mG9Ie+I1@tFh!c9q2W@~PemadPGTl1E`C{$7R|Pt?al7WoTqz9hf!K!4$Z zzYNWn^tLkJd*qEr-iWxd##YGL(xrEKl!XiaCYrBW_eUUx5Tlnaxu6+g*}7m5{;4h) z1Y=KGt}ajnbDO99rw?Ls-p>7O8Yc@1R=8ji{N?XuBZjCbQa&9ewpwkfL6+~B)?J|lkE;hR$boBqll+=r>}>~dd1@X!sW$6Rc)iw>>ZeCu3f zaXkN9$>upU=918694sHZ2rm16`@C#@tjmVRKY!I_FDn!ACqE%&wTWHJkH z_z!-{UkgpNn3TO=R=Lndcbqb6n;h2#umV7n0Go?q?`GtUDXqKuKXkhi7~t87X*v>z zD}K~nH3(&2rEekuL_wHl{}(QmN(4Wg`$;1(S=9N5E(n4LriU)-0{*EkdO?y$gq81l z{(qz2|iPW&tGy;uL@TXa9&b&HvwUdwfH zF5bKnn1){%)@_Vl7@|9m-8_%hNAKUik3M^>N4x#tyU*moBlIB_Mqw8E^DyO1z!DSC z$Fdn`lbN4g#+iqf!tRsYBE~-c@lMwl`K8eB*+ljc0BO4-GZt&$$l6dh03kXta({GF zZq-qiNq8fk$);iC&zas#W^>^;mEEK0*t*$Qa;G(JFnjy%IMVR!v7--gYu_l_%!<;M6|}6At}d zvGqFvHn3(3Y+-?)`S_mOU5-2C!heH|-QBo-hbXuKpc%Xus#A1T9fNzj4O{Cbv3nY~ z_fqPW3K)zb!EXǑ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 z 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 delta 821484 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 z�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ßX!cm4bB_p@+s;(B}|$UOqb?}OUd%g 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

&%#GY_*zF;@HDVp{B>GR?nX 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%0A9iDS90^=#!R^_~9~aw9yF=7d_-@a=td%hy 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

YG*Zet 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 X>cJ@zgi`%d{p~&Vgmas+@ZbLdd+a%~ diff --git a/dhruvir29_ip_master/authorship.json b/dhruvir29_ip_master/authorship.json index c9f540cd..24b97bfa 100644 --- a/dhruvir29_ip_master/authorship.json +++ b/dhruvir29_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"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":"dhruvir29"},"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":{"dhruvir29":2,"-":22}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"T | 0 | hi","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":1}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks\u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" boolean isRunning \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" storage.saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" ui.printWelcomeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" while (isRunning) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" ui.printGoodByeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" parser.addToList(input, storage, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":30}},{"path":"src/main/java/duke/Exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.Exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":" private String message;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":" this.message \u003d message;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" public void printMessage() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" System.out.println(this.message);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" return this.message;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":18}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" public static Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" public static void userCommand(String input, Storage storage, TaskList tasks) throws DukeException, NumberFormatException {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" int taskIndex \u003d Integer.parseInt(input.substring(5));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" if (tasks.getTask(taskIndex - 1).getStatusIcon() \u003d\u003d \"X\") {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tThis task has already been marked as done!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" tasks.markTaskAsDone(taskIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" ui.printMarkTasksAsDone(taskIndex, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" int taskIndex \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" if (tasks.getTask(taskIndex - 1).getStatusIcon() \u003d\u003d \" \") {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tThis task has already been marked as not done!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" tasks.markTaskAsNotDone(taskIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" ui.printMarkTasksAsNotDone(taskIndex, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" int pos \u003d Integer.parseInt(input.substring(7).trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" if (pos \u003e tasks.getSize() || pos \u003d\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tThis number is out of bounds! \");","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" Task element \u003d tasks.getTask(pos - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" tasks.deleteTask(pos - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" ui.printDeleteTasks(pos, tasks, element);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" ui.printListMessage(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tHey bud! Sorry I don\u0027t quite know what you mean :-(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" catch (DukeException | DateTimeException | IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" handleException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" public static void addToList(String input, Storage storage, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" if (input.trim().length() \u003c\u003d 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Sorry! The description of a todo cannot be empty :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":" Task task \u003d new ToDo(input.substring(5));","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":" ui.printAddTaskToList(tasks, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dhruvir29"},"content":" int index \u003d input.lastIndexOf(\"/by\");","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dhruvir29"},"content":" if (input.trim().length() \u003c\u003d 8 || (input.substring(9, index).isEmpty())) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Sorry! The description of a deadline cannot be empty :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dhruvir29"},"content":" if (!input.contains(\"/by\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Hey bud! Please include when the deadline is! \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\t For example you can type: deadline read /by 2023-09-01 1700\");","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dhruvir29"},"content":" Task task \u003d new Deadline(input.substring(9, index - 1), input.substring(index + 4));","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"dhruvir29"},"content":" ui.printAddTaskToList(tasks, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"dhruvir29"},"content":" int indexFrom \u003d input.lastIndexOf(\"/from\");","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"dhruvir29"},"content":" int indexTo \u003d input.lastIndexOf(\"/to\");","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"dhruvir29"},"content":" if ((input.trim().length() \u003c\u003d 5) || (input.substring(6, indexFrom).isEmpty())) {","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Sorry! The description of an event cannot be empty :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"dhruvir29"},"content":" if (!input.contains(\"/from\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Hey bud! Please include when the event is!\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\t For example you can type: event hangout /from 2023-09-01 1700 /to 2023-09-01 2000\");","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"dhruvir29"},"content":" if (!input.contains(\"/to\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Hey bud! Please include when the end date of the event is!\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\t For example you can type: event hangout /from 2023-09-01 1700 /to 2023-09-01 2000\");","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"dhruvir29"},"content":" Task task \u003d new Event(input.substring(6, indexFrom - 1),","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"dhruvir29"},"content":" input.substring(indexFrom + 6, indexTo - 1), input.substring(indexTo + 4));","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"dhruvir29"},"content":" ui.printAddTaskToList(tasks, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"dhruvir29"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"dhruvir29"},"content":" userCommand(input, storage, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"dhruvir29"},"content":" } catch (DukeException | DateTimeException | IOException | NumberFormatException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"dhruvir29"},"content":" handleException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"dhruvir29"},"content":" private static void handleException(Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"dhruvir29"},"content":" if (e instanceof DukeException) {","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"dhruvir29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"dhruvir29"},"content":" } else if (e instanceof DateTimeException) {","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tPlease put a valid date and time in the format YYYY-MM-DD HHMM.\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\tFor example: 2023-08-08 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"dhruvir29"},"content":" } else if (e instanceof IOException) {","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tAn error occurred while performing a file operation: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"dhruvir29"},"content":" } else if (e instanceof NumberFormatException ) {","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tYou can only perform this action on an integer!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"dhruvir29"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tAn unexpected error occurred: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":123}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" private String filepath;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" public Storage(String filepath, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" public void saveTasks() throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" if (!Files.isDirectory(Paths.get(\"data/\"))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" Files.createDirectories(Paths.get(\"data/\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" if (!Files.exists(Paths.get(\"data/duke.txt\"))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" Files.createFile(Paths.get(\"data/duke.txt\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"New file created\");","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" Scanner scanner \u003d new Scanner(new File(filepath));","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" String[] split \u003d scanner.nextLine().split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" for (int i \u003d 0; i \u003c split.length; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" split[i] \u003d split[i].strip();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" String description \u003d split[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" boolean isDone \u003d split[1].equals(\"X\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" switch (split[0]) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new ToDo(description, isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" String by \u003d split[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Deadline(description, by, isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" String from \u003d split[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" String to \u003d split[4];","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Event(description, split[3], split[4], isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dhruvir29"},"content":" public void writeTasksToFile(TaskList tasks) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dhruvir29"},"content":" FileWriter fileWriter \u003d new FileWriter(filepath);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dhruvir29"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i ++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dhruvir29"},"content":" fileWriter.write(tasks.getTask(i).toWriteString()+\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dhruvir29"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":75}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" public int getSize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" public void markTaskAsNotDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" this.tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" public void printTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Seems like you have no tasks at the moment :) \");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" for (int i \u003d 1; i \u003c\u003d tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + i + \". \" + tasks.get(i - 1).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" e.printMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":65}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" public void printWelcomeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t \" + \"Hey there amigo, excited to meet you! I\u0027m Buddy, your friendly chat companion!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" \"\\t \" + \"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" public void printGoodByeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t \" + \"Bye! Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" public void printMarkTasksAsDone(int index, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tGreat! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + index + \".\" + tasks.getTask(index - 1).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" public void printMarkTasksAsNotDone(int index, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tOk! I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + index + \".\" + tasks.getTask(index - 1).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" public void printListMessage(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" tasks.printTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" public void printAddedTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tNo problem! I have added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" public void printHorizontalLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\" __________________________________________________________________\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" public void printDeleteTasks(int pos, TaskList tasks, Task element) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tOkie I\u0027ve removed this task:\\n\\t\" + element.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tNow you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" public void printAddTaskToList(TaskList tasks, Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":" printAddedTask();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tNow you have \" + tasks.getSize() + \" tasks in the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":71}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy ha\")) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" public String toWriteString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" return \"D | \" + (isDone ? \"X\" : \"0\") + \" | \" + description + \" | \" + by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":32}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" public Event(String description, String from, String to, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy ha\")) + \" to: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" + to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy ha\")) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" public String toWriteString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" return \"E | \" + (isDone ? \"X\" : \"0\") + \" | \" + this.description + \" | \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\")) + \" | \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":36}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" return (isDone ? \"X\" : \" \"); // mark done duke.task with X","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" public abstract String toWriteString();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":41}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" public String toWriteString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" return \"T | \" + (isDone ? \"X\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":30}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" public void testMarkCommand() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"mark 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][X] do econs\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" public void testUnmarkCommand() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"mark 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"unmark 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][ ] do econs\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" public void testDeleteCommand() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"delete 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" assertEquals(0, tasks.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" public void testRandomCommand() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"add\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"Hey bud! Sorry I don\u0027t quite know what you mean :-(\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" public void testAddToList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" parser.addToList(\"todo hi\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][ ] hi\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dhruvir29":64}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" public void testMark(){","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" tasks.markTaskAsDone(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"X\", tasks.getTask(0).getStatusIcon());","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" public void testMarkAsNotDone(){","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\" \", tasks.getTask(0).getStatusIcon());","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" public void testAddTodo() {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][ ] do econs\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" public void testAddEvent() {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" Event sampleEvent \u003d new Event(\"read book\", \"2020-03-19 1800\", \"2020-03-20 1800\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleEvent);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[E][ ] read book (from: Mar 19 2020 6PM to: Mar 20 2020 6PM)\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" public void testAddDeadline() {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" Deadline sampleDeadline \u003d new Deadline(\"homework\", \"2020-03-19 1800\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleDeadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[D][ ] homework (by: Mar 19 2020 6PM)\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" public void testDeleteTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Deadline(\"homework\", \"2020-03-19 1800\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new ToDo(\"do econs\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Event(\"read book\", \"2020-03-19 1800\", \"2020-03-20 1800\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" tasks.deleteTask(1);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" assertEquals(2, tasks.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dhruvir29":62}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"deadline return book /by Monday","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"event for rc /from Saturday 9am /to 1pm","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"delete 5","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"book","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"bye","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":8}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"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":"dhruvir29"},"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":{"dhruvir29":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":"dhruvir29"},"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":"dhruvir29"},"content":" archiveBaseName \u003d \"dukeNew\"","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":"dhruvir29"},"content":" archiveFileName \u003d \u0027dukeNew.jar\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"dhruvir29":3,"-":40}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"T | 0 | hi","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":1}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks\u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" boolean isRunning \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" storage.saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" ui.printWelcomeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" while (isRunning) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" ui.printGoodByeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" parser.addToList(input, storage, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":30}},{"path":"src/main/java/duke/Exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.Exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":" private String message;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":" this.message \u003d message;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" public void printMessage() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" System.out.println(this.message);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" return this.message;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":18}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" public static Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" public static void userCommand(String input, Storage storage, TaskList tasks) throws DukeException, NumberFormatException {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" int taskIndex \u003d Integer.parseInt(input.substring(5));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" if (tasks.getTask(taskIndex - 1).getStatusIcon() \u003d\u003d \"X\") {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tThis task has already been marked as done!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" tasks.markTaskAsDone(taskIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" ui.printMarkTasksAsDone(taskIndex, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" int taskIndex \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" if (tasks.getTask(taskIndex - 1).getStatusIcon() \u003d\u003d \" \") {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tThis task has already been marked as not done!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" tasks.markTaskAsNotDone(taskIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" ui.printMarkTasksAsNotDone(taskIndex, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" int pos \u003d Integer.parseInt(input.substring(7).trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" if (pos \u003e tasks.getSize() || pos \u003d\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tThis number is out of bounds! \");","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" Task element \u003d tasks.getTask(pos - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" tasks.deleteTask(pos - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" ui.printDeleteTasks(pos, tasks, element);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" ui.printListMessage(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tHey bud! Sorry I don\u0027t quite know what you mean :-(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" catch (DukeException | DateTimeException | IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" handleException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" public static void addToList(String input, Storage storage, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" if (input.trim().length() \u003c\u003d 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Sorry! The description of a todo cannot be empty :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":" Task task \u003d new ToDo(input.substring(5));","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":" ui.printAddTaskToList(tasks, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dhruvir29"},"content":" int index \u003d input.lastIndexOf(\"/by\");","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dhruvir29"},"content":" if (input.trim().length() \u003c\u003d 8 || (input.substring(9, index).isEmpty())) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Sorry! The description of a deadline cannot be empty :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dhruvir29"},"content":" if (!input.contains(\"/by\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Hey bud! Please include when the deadline is! \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\t For example you can type: deadline read /by 2023-09-01 1700\");","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dhruvir29"},"content":" Task task \u003d new Deadline(input.substring(9, index - 1), input.substring(index + 4));","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"dhruvir29"},"content":" ui.printAddTaskToList(tasks, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"dhruvir29"},"content":" int indexFrom \u003d input.lastIndexOf(\"/from\");","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"dhruvir29"},"content":" int indexTo \u003d input.lastIndexOf(\"/to\");","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"dhruvir29"},"content":" if ((input.trim().length() \u003c\u003d 5) || (input.substring(6, indexFrom).isEmpty())) {","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Sorry! The description of an event cannot be empty :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"dhruvir29"},"content":" if (!input.contains(\"/from\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Hey bud! Please include when the event is!\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\t For example you can type: event hangout /from 2023-09-01 1700 /to 2023-09-01 2000\");","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"dhruvir29"},"content":" if (!input.contains(\"/to\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Hey bud! Please include when the end date of the event is!\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\t For example you can type: event hangout /from 2023-09-01 1700 /to 2023-09-01 2000\");","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"dhruvir29"},"content":" Task task \u003d new Event(input.substring(6, indexFrom - 1),","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"dhruvir29"},"content":" input.substring(indexFrom + 6, indexTo - 1), input.substring(indexTo + 4));","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"dhruvir29"},"content":" ui.printAddTaskToList(tasks, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"dhruvir29"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"dhruvir29"},"content":" userCommand(input, storage, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"dhruvir29"},"content":" } catch (DukeException | DateTimeException | IOException | NumberFormatException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"dhruvir29"},"content":" handleException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"dhruvir29"},"content":" private static void handleException(Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"dhruvir29"},"content":" if (e instanceof DukeException) {","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"dhruvir29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"dhruvir29"},"content":" } else if (e instanceof DateTimeException) {","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tPlease put a valid date and time in the format YYYY-MM-DD HHMM.\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\tFor example: 2023-08-08 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"dhruvir29"},"content":" } else if (e instanceof IOException) {","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tAn error occurred while performing a file operation: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"dhruvir29"},"content":" } else if (e instanceof NumberFormatException ) {","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tYou can only perform this action on an integer!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"dhruvir29"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tAn unexpected error occurred: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":123}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" private String filepath;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" public Storage(String filepath, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" public void saveTasks() throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" if (!Files.isDirectory(Paths.get(\"data/\"))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" Files.createDirectories(Paths.get(\"data/\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" if (!Files.exists(Paths.get(\"data/duke.txt\"))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" Files.createFile(Paths.get(\"data/duke.txt\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"New file created\");","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" Scanner scanner \u003d new Scanner(new File(filepath));","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" String[] split \u003d scanner.nextLine().split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" for (int i \u003d 0; i \u003c split.length; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" split[i] \u003d split[i].strip();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" String description \u003d split[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" boolean isDone \u003d split[1].equals(\"X\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" switch (split[0]) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new ToDo(description, isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" String by \u003d split[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Deadline(description, by, isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" String from \u003d split[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" String to \u003d split[4];","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Event(description, split[3], split[4], isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dhruvir29"},"content":" public void writeTasksToFile(TaskList tasks) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dhruvir29"},"content":" FileWriter fileWriter \u003d new FileWriter(filepath);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dhruvir29"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i ++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dhruvir29"},"content":" fileWriter.write(tasks.getTask(i).toWriteString()+\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dhruvir29"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":75}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" public int getSize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" public void markTaskAsNotDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" this.tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" public void printTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Seems like you have no tasks at the moment :) \");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" for (int i \u003d 1; i \u003c\u003d tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + i + \". \" + tasks.get(i - 1).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" e.printMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":65}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" public void printWelcomeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t \" + \"Hey there amigo, excited to meet you! I\u0027m Buddy, your friendly chat companion!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" \"\\t \" + \"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" public void printGoodByeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t \" + \"Bye! Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" public void printMarkTasksAsDone(int index, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tGreat! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + index + \".\" + tasks.getTask(index - 1).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" public void printMarkTasksAsNotDone(int index, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tOk! I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + index + \".\" + tasks.getTask(index - 1).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" public void printListMessage(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" tasks.printTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" public void printAddedTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tNo problem! I have added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" public void printHorizontalLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\" __________________________________________________________________\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" public void printDeleteTasks(int pos, TaskList tasks, Task element) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tOkie I\u0027ve removed this task:\\n\\t\" + element.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tNow you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" public void printAddTaskToList(TaskList tasks, Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":" printAddedTask();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tNow you have \" + tasks.getSize() + \" tasks in the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":71}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy ha\")) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" public String toWriteString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" return \"D | \" + (isDone ? \"X\" : \"0\") + \" | \" + description + \" | \" + by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":32}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" public Event(String description, String from, String to, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy ha\")) + \" to: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" + to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy ha\")) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" public String toWriteString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" return \"E | \" + (isDone ? \"X\" : \"0\") + \" | \" + this.description + \" | \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\")) + \" | \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":36}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" return (isDone ? \"X\" : \" \"); // mark done duke.task with X","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" public abstract String toWriteString();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":41}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" public String toWriteString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" return \"T | \" + (isDone ? \"X\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":30}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" public void testMarkCommand() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"mark 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][X] do econs\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" public void testUnmarkCommand() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"mark 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"unmark 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][ ] do econs\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" public void testDeleteCommand() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"delete 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" assertEquals(0, tasks.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" public void testRandomCommand() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"add\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"Hey bud! Sorry I don\u0027t quite know what you mean :-(\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" public void testAddToList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" parser.addToList(\"todo hi\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][ ] hi\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dhruvir29":64}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" public void testMark(){","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" tasks.markTaskAsDone(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"X\", tasks.getTask(0).getStatusIcon());","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" public void testMarkAsNotDone(){","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\" \", tasks.getTask(0).getStatusIcon());","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" public void testAddTodo() {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][ ] do econs\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" public void testAddEvent() {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" Event sampleEvent \u003d new Event(\"read book\", \"2020-03-19 1800\", \"2020-03-20 1800\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleEvent);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[E][ ] read book (from: Mar 19 2020 6PM to: Mar 20 2020 6PM)\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" public void testAddDeadline() {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" Deadline sampleDeadline \u003d new Deadline(\"homework\", \"2020-03-19 1800\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleDeadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[D][ ] homework (by: Mar 19 2020 6PM)\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" public void testDeleteTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Deadline(\"homework\", \"2020-03-19 1800\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new ToDo(\"do econs\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Event(\"read book\", \"2020-03-19 1800\", \"2020-03-20 1800\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" tasks.deleteTask(1);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" assertEquals(2, tasks.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dhruvir29":62}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"deadline return book /by Monday","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"event for rc /from Saturday 9am /to 1pm","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"delete 5","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"book","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"bye","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":8}}] diff --git a/dhruvir29_ip_master/commits.json b/dhruvir29_ip_master/commits.json index 5b2d4047..6b91e352 100644 --- a/dhruvir29_ip_master/commits.json +++ b/dhruvir29_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"dhruvir29":[{"date":"2023-08-24","commitResults":[{"hash":"672ce29b4ec1e634bdcf649e45bf8a6aca54d32b","isMergeCommit":false,"messageTitle":"greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"b0a9ad1b32a7d3ff9e24a4be64d9653fd86cf85f","isMergeCommit":false,"messageTitle":"echo user\u0027s input","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":5}}},{"hash":"d6dc8b6495df240d668fb90b2770c81cb478de61","isMergeCommit":false,"messageTitle":"adds user input to a list and displays it when requested","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":6}}},{"hash":"ddea2e61cd42fb4ba7e983d253eaaf97678f6b7b","isMergeCommit":false,"messageTitle":"mark tasks as done/ change status back","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":7}}},{"hash":"6704375dbcb902b233d989f9a29fb51b865bb308","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines included","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":14}}},{"hash":"61badd138053b51f0098ee396244e92345a87961","isMergeCommit":false,"messageTitle":"handling input errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":34}}},{"hash":"b8c5cc4170e34150247e79f22750ab4fa890c97d","isMergeCommit":false,"messageTitle":"can delete tasks from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":10}}},{"hash":"2b262b71ce022cb3bb17f0a9acce9537482da764","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"d62e616c79f7e547b3069a8db13dd59ec11a3736","isMergeCommit":false,"messageTitle":"Optimisations done on Week 1 Code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":58}}}]},{"date":"2023-09-01","commitResults":[{"hash":"33937392362668c29227a72e6fde2d50dc182ef3","isMergeCommit":false,"messageTitle":"Save tasks in hard disk","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":123,"deletions":16}}},{"hash":"3d7bbe8e8e7681441fbf8fdef4ba4333b6805ccb","isMergeCommit":false,"messageTitle":"Revert \"Save tasks in hard disk\"","messageBody":"This reverts commit 33937392362668c29227a72e6fde2d50dc182ef3.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":16,"deletions":123}}},{"hash":"ddf52fd757bd92e0f5ff77bb08dbaf4466aeb532","isMergeCommit":false,"messageTitle":"save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"e4e6fe1b4e07172bb7244b6ad3e3ac10604b2b50","isMergeCommit":false,"messageTitle":"Merge branch 7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":0,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"48dbc9be94a017f8475ffeb4b7ebae920bef6cdb","isMergeCommit":false,"messageTitle":"Save Task","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":124,"deletions":20}}},{"hash":"58ce1fa21068ad9cfc1e2aa56f712add9a7da7cd","isMergeCommit":false,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"fd82fb5c5e0aaff4378d02b37d4d8ace65692b54","isMergeCommit":false,"messageTitle":"First iteration of Save Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4},"java":{"insertions":73,"deletions":36}}},{"hash":"0070b65fb188522622b2baab493d8542ec002126","isMergeCommit":false,"messageTitle":"Save Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":1,"deletions":1}}},{"hash":"7b089e7c409d0c80711b86b8f60fec41febb9bec","isMergeCommit":false,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"f170be5e172bc9bb64dcec7a337d3c9a977ee6cc","isMergeCommit":false,"messageTitle":"Add class Storage","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":122,"deletions":55}}},{"hash":"cced30bd5fa709a35a81cab7a75e7e1841ec85d2","isMergeCommit":false,"messageTitle":"Add class TaskList","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":88,"deletions":27}}},{"hash":"ac4f03fe12b3d952e321bc1704e892bbb5bacf51","isMergeCommit":false,"messageTitle":"Add class Ui","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":77,"deletions":95}}},{"hash":"88f3a0d1d9182281d9978ca0a5b639833c510573","isMergeCommit":false,"messageTitle":"Add Parser class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":149,"deletions":155}}},{"hash":"fa695c740ab5d5eccaba9ef9cf4695f56ea7015e","isMergeCommit":false,"messageTitle":"Clean up Parser class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":81,"deletions":117}}},{"hash":"217ec42f400be0c5ac87e656c801f194e7d29b0b","isMergeCommit":false,"messageTitle":"Use more Oop","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":11,"deletions":12}}},{"hash":"651b710ac518afd4a791497c1f988a1a84816cc1","isMergeCommit":false,"messageTitle":"Add Packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":5},"java":{"insertions":274,"deletions":12},"md":{"insertions":2,"deletions":2}}},{"hash":"70393a33ae3f5478f91f47b954434d807aef3cda","isMergeCommit":false,"messageTitle":"Add Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":205}}}]},{"date":"2023-09-04","commitResults":[{"hash":"75cac09369e7418d814956f0dd81bd7a7445e952","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"14195d0077f71e490c8da9e10fa3360b185a487e","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":131,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"dhruvir29":{"java":647,"md":2,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":9}},"authorContributionVariance":{"dhruvir29":123498.625},"authorDisplayNameMap":{"dhruvir29":"CS2103T-F10-3 DHRU..THOD"}} +{"authorDailyContributionsMap":{"dhruvir29":[{"date":"2023-08-24","commitResults":[{"hash":"672ce29b4ec1e634bdcf649e45bf8a6aca54d32b","isMergeCommit":false,"messageTitle":"greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"b0a9ad1b32a7d3ff9e24a4be64d9653fd86cf85f","isMergeCommit":false,"messageTitle":"echo user\u0027s input","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":5}}},{"hash":"d6dc8b6495df240d668fb90b2770c81cb478de61","isMergeCommit":false,"messageTitle":"adds user input to a list and displays it when requested","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":6}}},{"hash":"ddea2e61cd42fb4ba7e983d253eaaf97678f6b7b","isMergeCommit":false,"messageTitle":"mark tasks as done/ change status back","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":7}}},{"hash":"6704375dbcb902b233d989f9a29fb51b865bb308","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines included","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":14}}},{"hash":"61badd138053b51f0098ee396244e92345a87961","isMergeCommit":false,"messageTitle":"handling input errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":34}}},{"hash":"b8c5cc4170e34150247e79f22750ab4fa890c97d","isMergeCommit":false,"messageTitle":"can delete tasks from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":10}}},{"hash":"2b262b71ce022cb3bb17f0a9acce9537482da764","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"d62e616c79f7e547b3069a8db13dd59ec11a3736","isMergeCommit":false,"messageTitle":"Optimisations done on Week 1 Code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":58}}}]},{"date":"2023-09-01","commitResults":[{"hash":"33937392362668c29227a72e6fde2d50dc182ef3","isMergeCommit":false,"messageTitle":"Save tasks in hard disk","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":123,"deletions":16}}},{"hash":"3d7bbe8e8e7681441fbf8fdef4ba4333b6805ccb","isMergeCommit":false,"messageTitle":"Revert \"Save tasks in hard disk\"","messageBody":"This reverts commit 33937392362668c29227a72e6fde2d50dc182ef3.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":16,"deletions":123}}},{"hash":"ddf52fd757bd92e0f5ff77bb08dbaf4466aeb532","isMergeCommit":false,"messageTitle":"save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"e4e6fe1b4e07172bb7244b6ad3e3ac10604b2b50","isMergeCommit":false,"messageTitle":"Merge branch 7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":0,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"48dbc9be94a017f8475ffeb4b7ebae920bef6cdb","isMergeCommit":false,"messageTitle":"Save Task","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":124,"deletions":20}}},{"hash":"58ce1fa21068ad9cfc1e2aa56f712add9a7da7cd","isMergeCommit":false,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"fd82fb5c5e0aaff4378d02b37d4d8ace65692b54","isMergeCommit":false,"messageTitle":"First iteration of Save Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4},"java":{"insertions":73,"deletions":36}}},{"hash":"0070b65fb188522622b2baab493d8542ec002126","isMergeCommit":false,"messageTitle":"Save Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":1,"deletions":1}}},{"hash":"7b089e7c409d0c80711b86b8f60fec41febb9bec","isMergeCommit":false,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"f170be5e172bc9bb64dcec7a337d3c9a977ee6cc","isMergeCommit":false,"messageTitle":"Add class Storage","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":122,"deletions":55}}},{"hash":"cced30bd5fa709a35a81cab7a75e7e1841ec85d2","isMergeCommit":false,"messageTitle":"Add class TaskList","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":88,"deletions":27}}},{"hash":"ac4f03fe12b3d952e321bc1704e892bbb5bacf51","isMergeCommit":false,"messageTitle":"Add class Ui","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":77,"deletions":95}}},{"hash":"88f3a0d1d9182281d9978ca0a5b639833c510573","isMergeCommit":false,"messageTitle":"Add Parser class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":149,"deletions":155}}},{"hash":"fa695c740ab5d5eccaba9ef9cf4695f56ea7015e","isMergeCommit":false,"messageTitle":"Clean up Parser class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":81,"deletions":117}}},{"hash":"217ec42f400be0c5ac87e656c801f194e7d29b0b","isMergeCommit":false,"messageTitle":"Use more Oop","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":11,"deletions":12}}},{"hash":"651b710ac518afd4a791497c1f988a1a84816cc1","isMergeCommit":false,"messageTitle":"Add Packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":5},"java":{"insertions":274,"deletions":12},"md":{"insertions":2,"deletions":2}}},{"hash":"70393a33ae3f5478f91f47b954434d807aef3cda","isMergeCommit":false,"messageTitle":"Add Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":205}}}]},{"date":"2023-09-04","commitResults":[{"hash":"75cac09369e7418d814956f0dd81bd7a7445e952","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"14195d0077f71e490c8da9e10fa3360b185a487e","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":131,"deletions":0}}},{"hash":"652fd491919dae29c573293786f40acd4f09bb02","isMergeCommit":false,"messageTitle":"Create Jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"dhruvir29":{"java":647,"md":2,"fxml":0,"sh":0,"bat":0,"gradle":3,"txt":9}},"authorContributionVariance":{"dhruvir29":123488.695},"authorDisplayNameMap":{"dhruvir29":"CS2103T-F10-3 DHRU..THOD"}} diff --git a/dlathyun_ip_master/authorship.json b/dlathyun_ip_master/authorship.json index 170b0054..ee8417f0 100644 --- a/dlathyun_ip_master/authorship.json +++ b/dlathyun_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":"dlathyun"},"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":"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":{"dlathyun":1,"-":41}},{"path":"data/savedtask.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"E / [ ] / hw / 2022-08-05 21:29/ 2022-08-07 12:11","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"dlathyun":1}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" private Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" private UI ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" ui \u003d new UI();","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" storage.loadTask(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" } catch (KoraException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":"/*","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" //System.out.println(\"------------------------------\");","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":" //getResponse(scanner.nextLine());","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" //System.out.println(\"------------------------------\");","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":" getResponse(scanner.nextLine());","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"dlathyun"},"content":" public Command getResponse(String userInput) {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"dlathyun"},"content":" Command command \u003d Parser.parse(userInput);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dlathyun"},"content":" command.execute(taskList);","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"dlathyun"},"content":" System.out.println(command.getCommandMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"dlathyun"},"content":" return command;","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"dlathyun"},"content":" } catch (KoraException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"dlathyun"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"dlathyun"},"content":" return null;","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"dlathyun"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"dlathyun"},"content":" ui.greet();","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"dlathyun"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"dlathyun"},"content":" String userInput \u003d ui.getUserInput();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"dlathyun"},"content":" Command command \u003d getResponse(userInput);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"dlathyun"},"content":" if (command \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"dlathyun"},"content":" isExit \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"dlathyun"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"dlathyun"},"content":" isExit \u003d command.isExitYet();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"dlathyun"},"content":" ui.closeScanner();","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":70,"author":{"gitId":"dlathyun"},"content":" Duke kora \u003d new Duke(\"./data/savedtask.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"dlathyun"},"content":" kora.run();","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":73,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"dlathyun":69,"-":4}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":" public ByeCommand() {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" String commandMessage \u003d \"\";","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Byebye. See you again!\";","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" public boolean isExitYet() {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":24}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" public static String line \u003d \"------------------------------\";","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" public Command() {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" public void printOutput(String output) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" System.out.println(line + \"\\n\" + output + \"\\n\" +line);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" public abstract String getCommandMessage();","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" public abstract void execute(TaskList taskList) throws KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" public boolean isExitYet() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":22}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" private String taskDetails;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" private String timeDetails;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" public DeadlineCommand(String[] details) throws KoraException {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" if (details.length !\u003d 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Deadline needs to have a due date!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" taskDetails \u003d details[0].replace(\"deadline \", \"\");","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" timeDetails \u003d details[1].replace(\"by \", \"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" String commandMessage \u003d \"\";","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" Task currentTask \u003d new Deadline(taskDetails, timeDetails);","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" taskList.addTask(currentTask);","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Okay! I have added this task\" + \"\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" currentTask.toString() + \"\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" String.format(\"Now you have %d tasks!\", taskList.getLength());","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":31}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" public DeleteCommand(String[] details) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" taskIndex \u003d Integer.valueOf(details[0].replace(\"delete \", \"\"));","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" String commandMessage \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" Task currentTask \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" String taskDetails \u003d currentTask.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" taskList.removeTask(taskIndex);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Okay. I have removed this task\" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" + taskDetails + \"\\n\" + String.format(\"Now you have %d tasks!\", taskList.getLength());","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dlathyun":28}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" private String taskDetails;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" private String startTimeDetails;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" private String endTimeDetails;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" private Task currentTask;","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" public EventCommand(String[] details) throws KoraException {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" if (details.length !\u003d 3) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Event needs to have a due date!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" taskDetails \u003d details[0].replace(\"event \", \"\");","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" String startTime \u003d details[1].replace(\"from \", \"\");","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" String endTime \u003d details[2].replace(\"to \", \"\");","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" //timeDetails \u003d \"from: \" + startTime + \"to: \" + endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" startTimeDetails \u003d startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" endTimeDetails \u003d endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" String commandMessage \u003d \"\";","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" currentTask \u003d new Event(taskDetails, startTimeDetails, endTimeDetails);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":" taskList.addTask(currentTask);","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Okay! I have added this task\" + \"\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" currentTask.toString() + \"\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":" String.format(\"Now you have %d tasks!\", taskList.getLength());","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":39}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":" public ListCommand() {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" String commandMessage \u003d \"\";","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" if (taskList.getLength() \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Wow! You have no tasks!\";","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Here are your tasks: \" + \"\\n\" + taskList.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dlathyun":23}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" String commandMessage \u003d \"\";","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" public MarkCommand(String[] details) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" taskIndex \u003d Integer.valueOf(details[0].replace(\"mark \", \"\"));","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" Task currentTask \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" currentTask.setMarked();","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Wow you are done!\" + \"\\n\" + currentTask.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":29}},{"path":"src/main/java/duke/command/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" private String taskDetails;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" public ToDoCommand(String[] details) throws KoraException {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" taskDetails \u003d details[0].replace(\"todo\", \"\").replace(\" \", \"\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" if (taskDetails.equals(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"ToDo must have details!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" String commandMessage \u003d \"\";","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" Task currentTask \u003d new ToDo(taskDetails);","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" taskList.addTask(currentTask);","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Okay! I have added this task\" + \"\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" currentTask.toString() + \"\\n\" + String.format(\"Now you have %d tasks!\", taskList.getLength());","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":30}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" String commandMessage \u003d \"\";","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" public UnmarkCommand(String[] details) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" taskIndex \u003d Integer.parseInt(details[0].replace(\"unmark \", \"\"));","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" Task currentTask \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" currentTask.setUnmarked();","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Wow you are not done!\" + \"\\n\" + currentTask.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":28}},{"path":"src/main/java/duke/exception/KoraException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.exception;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"public class KoraException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":" public KoraException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dlathyun":8}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.command.*;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"public class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" public Parser() {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" public static Command parse(String userInput) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" String line \u003d \"------------------------------\" + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" String[] userInputArray \u003d userInput.split(\"/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" Command command;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" if (userInputArray[0].contains(\"bye\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" command \u003d new ByeCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" } else if (userInputArray[0].contains(\"list\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" command \u003d new ListCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" } else if (userInputArray[0].contains(\"unmark\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" command \u003d new UnmarkCommand(userInputArray);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" } else if (userInputArray[0].contains(\"mark\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" command \u003d new MarkCommand(userInputArray);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" } else if (userInputArray[0].contains(\"deadline\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" command \u003d new DeadlineCommand(userInputArray);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" } else if (userInputArray[0].contains(\"event\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" command \u003d new EventCommand(userInputArray);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" } else if (userInputArray[0].contains(\"todo\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" command \u003d new ToDoCommand(userInputArray);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" } else if (userInputArray[0].contains(\"delete\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" command \u003d new DeleteCommand(userInputArray);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"I do not understand\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" return command;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dlathyun":40}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.*;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":"public class Storage {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" public static final String DEFAULT_PATH \u003d \"./data/savedtask.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" private String path;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" path \u003d filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" public void createFile() throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" File f \u003d new File(\"./data\");","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" f.mkdir();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" File ff \u003d new File(path);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" if (!ff.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" ff.createNewFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" } catch (IOException e){","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Unable to create file!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" public void loadTask(TaskList taskList) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":" createFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" File f \u003d new File(path);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dlathyun"},"content":" String[] array;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"dlathyun"},"content":" while (s.hasNextLine()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"dlathyun"},"content":" array \u003d s.nextLine().split(\"/ \");","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"dlathyun"},"content":" taskList.addNoSaveTask(checkTask(array));","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dlathyun"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Unable to scan!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"dlathyun"},"content":" public void saveTask(TaskList taskList) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"dlathyun"},"content":"// FileWriter fw \u003d new FileWriter(path, true);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"dlathyun"},"content":"// fw.write(task.saveFormat() + \"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"dlathyun"},"content":"// fw.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"dlathyun"},"content":" try (FileWriter fw \u003d new FileWriter(path, true)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"dlathyun"},"content":" fw.write(taskList.saveFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"dlathyun"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Couldn\u0027t add!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"dlathyun"},"content":" public Task checkTask(String[] array) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"dlathyun"},"content":" Task currentTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"dlathyun"},"content":" if (array[0].contains(\"E\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"dlathyun"},"content":" currentTask \u003d new Event(array[2], array[3], array[4]);","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"dlathyun"},"content":" } else if (array[0].contains(\"D\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"dlathyun"},"content":" currentTask \u003d new Deadline(array[2], array[3]);","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"dlathyun"},"content":" } else if (array[0].contains(\"T\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"dlathyun"},"content":" currentTask \u003d new ToDo(array[2]);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"dlathyun"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Task not valid!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"dlathyun"},"content":" if (array[1].equals(\"[X]\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"dlathyun"},"content":" currentTask.setMarked();","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"dlathyun"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"dlathyun"},"content":" currentTask.setUnmarked();","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"dlathyun"},"content":" return currentTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dlathyun":84}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" //private String byTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" public Deadline(String details, String time) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" super(details);","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" super.setTaskType(TaskType.D.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" //byTime \u003d time;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" byTime \u003d LocalDateTime.parse(time, saveFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"The date format should be yyyy-MM-dd HH-mm!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" DateTimeFormatter outFormatter \u003d DateTimeFormatter.ofPattern(\"E, MMM d yyyy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" DateTimeFormatter saveFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" public String getTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" return byTime.format(saveFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" public String saveFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" String output;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" output \u003d super.saveFormat() + \"/ \" + byTime.format(saveFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" String output;","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":" output \u003d super.toString() + \"(\" + \"by: \" + byTime.format(outFormatter) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":43}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" //private String byTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" LocalDateTime endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" LocalDateTime startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" public Event(String details, String startTime, String endTime) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" super(details);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" super.setTaskType(TaskType.E.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" this.startTime \u003d LocalDateTime.parse(startTime, saveFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" this.endTime \u003d LocalDateTime.parse(endTime, saveFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"The date format should be yyyy-MM-dd HH-mm!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Please ensure there is no space before to!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" DateTimeFormatter outFormatter \u003d DateTimeFormatter.ofPattern(\"E, MMM d yyyy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" DateTimeFormatter saveFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" public String getTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" return startTime.format(saveFormatter) + \"to \" + endTime.format(saveFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" public String saveFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":" String output;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" output \u003d super.saveFormat() + \"/ \" + startTime.format(saveFormatter) + \"/ \" + endTime.format(saveFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"dlathyun"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"dlathyun"},"content":" String output;","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"dlathyun"},"content":" output \u003d super.toString() + \"(from: \" + startTime.format(outFormatter) + \" to: \" + endTime.format(outFormatter) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":48}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":" //private int num;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" private String details;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" private boolean isMarked;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" private String taskType;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" protected LocalDateTime byTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" public Task(String info) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" //num \u003d index;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" details \u003d info;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" isMarked \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" //taskType \u003d type;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" public String getTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" return byTime.format(DateTimeFormatter.ofPattern(\"E, MMM dd yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" public void setMarked() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" isMarked \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" public void setUnmarked() {","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" isMarked \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" public String showMarked() {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" String output;","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":" if (isMarked) {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" output \u003d \"[X] \";","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":" output \u003d \"[ ] \";","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"dlathyun"},"content":" public String getDetails() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"dlathyun"},"content":" return details;","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"dlathyun"},"content":" public void setTaskType(String type) {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"dlathyun"},"content":" taskType \u003d type;","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"dlathyun"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"dlathyun"},"content":" return taskType;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"dlathyun"},"content":" public String saveFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"dlathyun"},"content":" String output;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"dlathyun"},"content":" output \u003d taskType + \" / \" + showMarked() + \"/ \" + details;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"dlathyun"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"dlathyun"},"content":" String output \u003d \"[\" + taskType + \"]\" + showMarked() + details;","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":68}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import java.io.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":"public class TaskList {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" public TaskList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":"// try {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":"// saveTask(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":"// System.out.println(\"ho\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":"// } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":"// System.out.println(\"Couldn\u0027t add\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":"// }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" //saveTask(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" public void addNoSaveTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":" public int getNextIndex() {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" return tasks.size() + 1;","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"dlathyun"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"dlathyun"},"content":" return tasks.get(taskIndex - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"dlathyun"},"content":" public void removeTask(int taskIndex) {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"dlathyun"},"content":" tasks.remove(taskIndex - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"dlathyun"},"content":" public int getLength() {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"dlathyun"},"content":" return tasks.size();","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"dlathyun"},"content":" /*","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"dlathyun"},"content":" private void createFile(String filePath) throws KoraException {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"dlathyun"},"content":" File f \u003d new File(\"./data\");","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"dlathyun"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"dlathyun"},"content":" f.mkdir();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"dlathyun"},"content":" File ff \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"dlathyun"},"content":" if (!ff.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"dlathyun"},"content":" ff.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"dlathyun"},"content":" } catch (IOException e){","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Unable to create file!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"dlathyun"},"content":" private void loadTask() throws KoraException {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"dlathyun"},"content":" createFile(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"dlathyun"},"content":" File f \u003d new File(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"dlathyun"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"dlathyun"},"content":" String[] array;","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"dlathyun"},"content":" while (s.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"dlathyun"},"content":" array \u003d s.nextLine().split(\"/ \");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"dlathyun"},"content":" tasks.add(checkAndAddTask(array));","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"dlathyun"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Unable to scan!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"dlathyun"},"content":" private void saveTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"dlathyun"},"content":"// FileWriter fw \u003d new FileWriter(path, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"dlathyun"},"content":"// fw.write(task.saveFormat() + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"dlathyun"},"content":"// fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"dlathyun"},"content":" try (FileWriter fw \u003d new FileWriter(path, true)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"dlathyun"},"content":" fw.write(task.saveFormat() + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"dlathyun"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"dlathyun"},"content":" new KoraException(\"Couldn\u0027t add!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"dlathyun"},"content":" private Task checkAndAddTask(String[] array) {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"dlathyun"},"content":" Task currentTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"dlathyun"},"content":" if (array[0].contains(\"E\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"dlathyun"},"content":" currentTask \u003d new Event(array[2], array[3], array[4]);","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"dlathyun"},"content":" } else if (array[0].contains(\"D\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"dlathyun"},"content":" currentTask \u003d new Deadline(array[2], array[3]);","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"dlathyun"},"content":" } else if (array[0].contains(\"T\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"dlathyun"},"content":" currentTask \u003d new ToDo(array[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"dlathyun"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"dlathyun"},"content":" System.out.println(\"Task not valid!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"dlathyun"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"dlathyun"},"content":" if (array[1].equals(\"[X]\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"dlathyun"},"content":" currentTask.setMarked();","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"dlathyun"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"dlathyun"},"content":" currentTask.setUnmarked();","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"dlathyun"},"content":" return currentTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"dlathyun"},"content":"*/","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"dlathyun"},"content":"// private String saveTaskFormat(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"dlathyun"},"content":"// String output;","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"dlathyun"},"content":"// output \u003d task.getTaskType() + \"|\" + task.showMarked() + \"|\" + task.getDetails();","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"dlathyun"},"content":"// return output;","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"dlathyun"},"content":"// }","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"dlathyun"},"content":" public String saveFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"dlathyun"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"dlathyun"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"dlathyun"},"content":" output \u003d output + \"\\n\" + tasks.get(i).saveFormat();","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":136,"author":{"gitId":"dlathyun"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":137,"author":{"gitId":"dlathyun"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-08-23"},{"lineNumber":138,"author":{"gitId":"dlathyun"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-23"},{"lineNumber":139,"author":{"gitId":"dlathyun"},"content":" output \u003d output + String.format(\"%d\", i + 1) + \". \" + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-08-23"},{"lineNumber":140,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":141,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-23"},{"lineNumber":142,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":143,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":143}},{"path":"src/main/java/duke/task/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":" D,","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":" T,","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":" E","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dlathyun":7}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":" public ToDo(String details) {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":" super(details);","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":" super.setTaskType(TaskType.T.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":8}},{"path":"src/main/java/duke/ui/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"public class UI {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" private static Scanner scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" public UI() {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" public void closeScanner() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" scanner.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" public String getUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" while (true) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" if (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" public void greet() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" String logo \u003d \" _ _ _\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" \" / \\\\ / \\\\ / \\\\\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" \"( 안 | 녕 )\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" \" \\\\_/ \\\\_/ \\\\_/\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" System.out.println(logo + \"Hello, I am your chatbot Kora!\\nHow can I help you today?\");","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" System.out.println(\"------------------------------\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dlathyun":35}},{"path":"src/test/java/duke/command/CommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"public class CommandTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" public void byeCommand_shouldExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" Command command \u003d new ByeCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" Assertions.assertTrue(command.isExitYet());","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dlathyun":14}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" public void initialiseShouldBeFalseForIsMarked() {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" Task task \u003d new Task(\"Test\");","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" Assertions.assertEquals(task.showMarked(), \"[ ] \");","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" public void setMarkedShouldBeTrueForIsMarked() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" Task task \u003d new Task(\"Test\");","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" task.setMarked();","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" Assertions.assertEquals(task.showMarked(), \"[X] \");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dlathyun":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"event lecture /from 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"deadline pset 1 /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"bah","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":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":"dlathyun"},"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":"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":{"dlathyun":1,"-":41}},{"path":"data/savedtask.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"E / [ ] / hw / 2022-08-05 21:29/ 2022-08-07 12:11","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"dlathyun":1}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" * Main class of Kora Chatbot Program.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" private Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" * Class constructor of Duke.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" * @param filePath path of file in user\u0027s hard disk.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" storage.loadTask(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" } catch (KoraException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" * Executes and prints command.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":" * @param userInput Input from the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" * @return Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":" public Command getResponse(String userInput) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"dlathyun"},"content":" Command command \u003d Parser.parse(userInput);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"dlathyun"},"content":" command.execute(taskList);","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"dlathyun"},"content":" command.printOutput(command.getCommandMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"dlathyun"},"content":" return command;","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dlathyun"},"content":" } catch (KoraException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dlathyun"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"dlathyun"},"content":" return null;","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"dlathyun"},"content":" * Runs main function of Kora Chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"dlathyun"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"dlathyun"},"content":" ui.greet();","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"dlathyun"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"dlathyun"},"content":" String userInput \u003d ui.getUserInput();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"dlathyun"},"content":" Command command \u003d getResponse(userInput);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"dlathyun"},"content":" if (command \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"dlathyun"},"content":" isExit \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"dlathyun"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"dlathyun"},"content":" isExit \u003d command.isExitYet();","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"dlathyun"},"content":" ui.closeScanner();","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"dlathyun"},"content":" * Runs the main programme.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"dlathyun"},"content":" * @param args The command-line arguments","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":74,"author":{"gitId":"dlathyun"},"content":" Duke kora \u003d new Duke(\"./data/savedtask.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"dlathyun"},"content":" kora.run();","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":77,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"dlathyun":73,"-":4}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":" public ByeCommand() {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" String commandMessage \u003d \"\";","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Byebye. See you again!\";","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" public boolean isExitYet() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":23}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" * Command class executes and sets messages for different types of commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" public static String line \u003d \"------------------------------\";","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" * Class constructor of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" public Command() {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" * Prints output of the command in nice format.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" * @param output Message after command is executed.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" public void printOutput(String output) {","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" System.out.println(line + \"\\n\" + output + \"\\n\" +line);","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" * Returns message for the command.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" * @return String message of command.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" public abstract String getCommandMessage();","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":" * Executes the command according to the type of command.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" * @param taskList List with tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" * @throws KoraException From its child class.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" public abstract void execute(TaskList taskList) throws KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dlathyun"},"content":" * Returns false for all the commands except ByeCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"dlathyun"},"content":" * @return Boolean.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"dlathyun"},"content":" public boolean isExitYet() {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"dlathyun"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":47}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" private String taskDetails;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" private String timeDetails;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" private String commandMessage \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" public DeadlineCommand(String[] details) throws KoraException {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" if (details.length !\u003d 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Deadline needs to have a due date!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" taskDetails \u003d details[0].replace(\"deadline \", \"\");","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" timeDetails \u003d details[1].replace(\"by \", \"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" Task currentTask \u003d new Deadline(taskDetails, timeDetails);","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" taskList.addTask(currentTask);","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Okay! I have added this task\" + \"\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" currentTask.toString() + \"\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" String.format(\"Now you have %d tasks!\", taskList.getLength());","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":35}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" private String commandMessage \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" public DeleteCommand(String[] details) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" taskIndex \u003d Integer.valueOf(details[0].replace(\"delete \", \"\"));","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" Task currentTask \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" String taskDetails \u003d currentTask.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" taskList.removeTask(taskIndex);","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Okay. I have removed this task\" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" + taskDetails + \"\\n\" + String.format(\"Now you have %d tasks!\", taskList.getLength());","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dlathyun":27}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" private String taskDetails;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" private String startTimeDetails;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" private String endTimeDetails;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" private Task currentTask;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" private String commandMessage \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" public EventCommand(String[] details) throws KoraException {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" if (details.length !\u003d 3) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Event needs to have a due date!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" taskDetails \u003d details[0].replace(\"event \", \"\");","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" String startTime \u003d details[1].replace(\"from \", \"\");","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" String endTime \u003d details[2].replace(\"to \", \"\");","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" //timeDetails \u003d \"from: \" + startTime + \"to: \" + endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" startTimeDetails \u003d startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" endTimeDetails \u003d endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":" currentTask \u003d new Event(taskDetails, startTimeDetails, endTimeDetails);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" taskList.addTask(currentTask);","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Okay! I have added this task\" + \"\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":" currentTask.toString() + \"\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" String.format(\"Now you have %d tasks!\", taskList.getLength());","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":40}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" private String keyword;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" private TaskList newTaskList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" public FindCommand(String[] details) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" keyword \u003d details[0].replace(\"find \", \"\");","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" if (newTaskList.getLength() \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" return \"There are no matching task!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" return \"Here are your matching tasks in your list: \\n\" + newTaskList.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) throws KoraException {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" int taskListSize \u003d taskList.getLength();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" for (int i \u003d 0; i \u003c taskListSize; i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" Task task \u003d taskList.getTask(i + 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" if (task.getDetails().contains(keyword)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" newTaskList.addTask(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"dlathyun":34}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":" private String commandMessage \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" if (taskList.getLength() \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Wow! You have no tasks!\";","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Here are your tasks: \" + \"\\n\" + taskList.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dlathyun":24}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" private String commandMessage \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" public MarkCommand(String[] details) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" taskIndex \u003d Integer.valueOf(details[0].replace(\"mark \", \"\"));","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" Task currentTask \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" currentTask.setMarked();","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Wow you are done!\" + \"\\n\" + currentTask.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":26}},{"path":"src/main/java/duke/command/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" private String taskDetails;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" private String commandMessage \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" public ToDoCommand(String[] details) throws KoraException {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" taskDetails \u003d details[0].replace(\"todo\", \"\").replace(\" \", \"\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" if (taskDetails.equals(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"ToDo must have details!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" Task currentTask \u003d new ToDo(taskDetails);","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" taskList.addTask(currentTask);","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Okay! I have added this task\" + \"\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" currentTask.toString() + \"\\n\" + String.format(\"Now you have %d tasks!\", taskList.getLength());","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":31}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" private String commandMessage \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" public UnmarkCommand(String[] details) {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" taskIndex \u003d Integer.parseInt(details[0].replace(\"unmark \", \"\"));","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" public String getCommandMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" return commandMessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" Task currentTask \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" currentTask.setUnmarked();","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" commandMessage \u003d \"Wow you are not done!\" + \"\\n\" + currentTask.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":26}},{"path":"src/main/java/duke/exception/KoraException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.exception;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":" * Custom exception specific to Kora","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"public class KoraException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" * Class constructor of KoraException.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" * @param message String that contains reason for the exception.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" public KoraException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dlathyun":16}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":"import duke.command.ToDoCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" * Parser class process user input and generates command.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":"public class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" * Class constructor of Parser.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" public Parser() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" * Processes user input and returns a command based on data processed.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" * @param userInput String input from user.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" * @return Command to be executed.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" * @throws KoraException For invalid input.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":" public static Command parse(String userInput) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" String line \u003d \"------------------------------\" + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" String[] userInputArray \u003d userInput.split(\"/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":" Command command;","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" if (userInputArray[0].contains(\"bye\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":" command \u003d new ByeCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dlathyun"},"content":" } else if (userInputArray[0].contains(\"list\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"dlathyun"},"content":" command \u003d new ListCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"dlathyun"},"content":" } else if (userInputArray[0].contains(\"unmark\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"dlathyun"},"content":" command \u003d new UnmarkCommand(userInputArray);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"dlathyun"},"content":" } else if (userInputArray[0].contains(\"mark\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dlathyun"},"content":" command \u003d new MarkCommand(userInputArray);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dlathyun"},"content":" } else if (userInputArray[0].contains(\"deadline\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"dlathyun"},"content":" command \u003d new DeadlineCommand(userInputArray);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"dlathyun"},"content":" } else if (userInputArray[0].contains(\"event\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"dlathyun"},"content":" command \u003d new EventCommand(userInputArray);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"dlathyun"},"content":" } else if (userInputArray[0].contains(\"todo\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"dlathyun"},"content":" command \u003d new ToDoCommand(userInputArray);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"dlathyun"},"content":" } else if (userInputArray[0].contains(\"delete\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"dlathyun"},"content":" command \u003d new DeleteCommand(userInputArray);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"dlathyun"},"content":" } else if (userInputArray[0].contains(\"find\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"dlathyun"},"content":" command \u003d new FindCommand(userInputArray);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"dlathyun"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"I do not understand\");","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"dlathyun"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"dlathyun"},"content":" return command;","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dlathyun":65}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" * Storage class is to load and save the tasks in the hard disk automatically.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":"public class Storage {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" private static final String DEFAULT_PATH \u003d \"./data/savedtask.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" private String path;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" * Class constructor of Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" * @param filePath Location of the data stored.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" path \u003d filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" * Creates folder and file if they don\u0027t exist.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" * @throws KoraException When unable to create the folder and file.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" public void createFile() throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" File f \u003d new File(\"./data\");","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" f.mkdir();","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"dlathyun"},"content":" File ff \u003d new File(path);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"dlathyun"},"content":" if (!ff.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"dlathyun"},"content":" ff.createNewFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dlathyun"},"content":" } catch (IOException e){","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Unable to create file!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"dlathyun"},"content":" * Loads tasks from data stored.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"dlathyun"},"content":" * @param taskList List of tasks that is stored.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"dlathyun"},"content":" * @throws KoraException When unable to scan.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"dlathyun"},"content":" public void loadTask(TaskList taskList) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"dlathyun"},"content":" createFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"dlathyun"},"content":" File f \u003d new File(path);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"dlathyun"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"dlathyun"},"content":" String[] array;","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"dlathyun"},"content":" while (s.hasNextLine()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"dlathyun"},"content":" array \u003d s.nextLine().split(\"/ \");","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"dlathyun"},"content":" taskList.addNoSaveTask(checkTask(array));","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"dlathyun"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Unable to scan!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"dlathyun"},"content":" * Saves tasks in the current tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"dlathyun"},"content":" * @param taskList Current list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"dlathyun"},"content":" * @throws KoraException When unable to add.","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"dlathyun"},"content":" public void saveTask(TaskList taskList) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"dlathyun"},"content":" try (FileWriter fw \u003d new FileWriter(path, true)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"dlathyun"},"content":" fw.write(taskList.saveFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"dlathyun"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Couldn\u0027t add!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"dlathyun"},"content":" * Creates task according to different type and with data from array with strings from user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"dlathyun"},"content":" * @param array String array from user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"dlathyun"},"content":" * @return Task","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"dlathyun"},"content":" * @throws KoraException When the type of task is not valid.","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"dlathyun"},"content":" public Task checkTask(String[] array) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"dlathyun"},"content":" Task currentTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"dlathyun"},"content":" if (array[0].contains(\"E\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"dlathyun"},"content":" currentTask \u003d new Event(array[2], array[3], array[4]);","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"dlathyun"},"content":" } else if (array[0].contains(\"D\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"dlathyun"},"content":" currentTask \u003d new Deadline(array[2], array[3]);","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"dlathyun"},"content":" } else if (array[0].contains(\"T\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"dlathyun"},"content":" currentTask \u003d new ToDo(array[2]);","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"dlathyun"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Task not valid!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"dlathyun"},"content":" if (array[1].equals(\"[X]\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"dlathyun"},"content":" currentTask.setMarked();","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"dlathyun"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"dlathyun"},"content":" currentTask.setUnmarked();","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"dlathyun"},"content":" return currentTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dlathyun":113}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" //private String byTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" public Deadline(String details, String time) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" super(details);","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" super.setTaskType(TaskType.D.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" //byTime \u003d time;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" byTime \u003d LocalDateTime.parse(time, saveFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"The date format should be yyyy-MM-dd HH-mm!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" DateTimeFormatter outFormatter \u003d DateTimeFormatter.ofPattern(\"E, MMM d yyyy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" DateTimeFormatter saveFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" public String getTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" return byTime.format(saveFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" public String saveFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" String output;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":" output \u003d super.saveFormat() + \"/ \" + byTime.format(saveFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":" String output;","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"dlathyun"},"content":" output \u003d super.toString() + \"(\" + \"by: \" + byTime.format(outFormatter) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":44}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import duke.exception.KoraException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" LocalDateTime endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" LocalDateTime startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" public Event(String details, String startTime, String endTime) throws KoraException {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" super(details);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" super.setTaskType(TaskType.E.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" this.startTime \u003d LocalDateTime.parse(startTime, saveFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" this.endTime \u003d LocalDateTime.parse(endTime, saveFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"The date format should be yyyy-MM-dd HH-mm!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" throw new KoraException(\"Please ensure there is no space before to!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" DateTimeFormatter outFormatter \u003d DateTimeFormatter.ofPattern(\"E, MMM d yyyy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" DateTimeFormatter saveFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" public String getTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" return startTime.format(saveFormatter) + \"to \" + endTime.format(saveFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" public String saveFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" String output;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":" output \u003d super.saveFormat() + \"/ \" + startTime.format(saveFormatter) + \"/ \" + endTime.format(saveFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"dlathyun"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"dlathyun"},"content":" String output;","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"dlathyun"},"content":" output \u003d super.toString() + \"(from: \" + startTime.format(outFormatter) + \" to: \" + endTime.format(outFormatter) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":47}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":" * Task class stores details of the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" //private int num;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" private String details;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" private boolean isMarked;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" private String taskType;","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" protected LocalDateTime byTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" * Class constructor of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" * @param info String that contains details of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" public Task(String info) {","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" //num \u003d index;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" details \u003d info;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" isMarked \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" //taskType \u003d type;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" * Formats and returns time in String.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" * @return Time in String using correct format.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":" public String getTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" return byTime.format(DateTimeFormatter.ofPattern(\"E, MMM dd yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" * Marks the task to be done.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dlathyun"},"content":" public void setMarked() {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"dlathyun"},"content":" isMarked \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dlathyun"},"content":" * Marks the task to be undone.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"dlathyun"},"content":" public void setUnmarked() {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"dlathyun"},"content":" isMarked \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"dlathyun"},"content":" * Shows visual representation of status of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"dlathyun"},"content":" * @return String of [X] or [].","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"dlathyun"},"content":" public String showMarked() {","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"dlathyun"},"content":" String output;","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"dlathyun"},"content":" if (isMarked) {","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"dlathyun"},"content":" output \u003d \"[X] \";","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"dlathyun"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"dlathyun"},"content":" output \u003d \"[ ] \";","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"dlathyun"},"content":" * Returns the details of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"dlathyun"},"content":" * @return Details in string.","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"dlathyun"},"content":" public String getDetails() {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"dlathyun"},"content":" return details;","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"dlathyun"},"content":" * Sets task type.","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"dlathyun"},"content":" * @param type Type of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"dlathyun"},"content":" public void setTaskType(String type) {","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"dlathyun"},"content":" taskType \u003d type;","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"dlathyun"},"content":" * Returns type of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"dlathyun"},"content":" * @return String which represent task type.","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"dlathyun"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"dlathyun"},"content":" return taskType;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"dlathyun"},"content":" * Returns format in which the task is saved in the hard disk.","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"dlathyun"},"content":" * @return String representation of task saved.","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"dlathyun"},"content":" public String saveFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"dlathyun"},"content":" String output;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"dlathyun"},"content":" output \u003d taskType + \" / \" + showMarked() + \"/ \" + details;","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"dlathyun"},"content":" * Return type, status and description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"dlathyun"},"content":" * @return String representation of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"dlathyun"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"dlathyun"},"content":" String output \u003d \"[\" + taskType + \"]\" + showMarked() + details;","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-23"},{"lineNumber":108,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":109,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":109}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"public class TaskList {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" public TaskList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" public void addNoSaveTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" public int getNextIndex() {","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" return tasks.size() + 1;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" return tasks.get(taskIndex - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" public void removeTask(int taskIndex) {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" tasks.remove(taskIndex - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" public int getLength() {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" return tasks.size();","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" public String saveFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dlathyun"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"dlathyun"},"content":" output \u003d output + \"\\n\" + tasks.get(i).saveFormat();","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dlathyun"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"dlathyun"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"dlathyun"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"dlathyun"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"dlathyun"},"content":" output \u003d output + String.format(\"%d\", i + 1) + \". \" + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"dlathyun"},"content":" return output;","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":54}},{"path":"src/main/java/duke/task/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":" D,","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":" T,","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":" E","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dlathyun":7}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":" public ToDo(String details) {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":" super(details);","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":" super.setTaskType(TaskType.T.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":8}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":" * UI class deals with interactions with the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" private static Scanner scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" * Class constructor of UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" public Ui() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":" * Closes the scanner.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dlathyun"},"content":" public void closeScanner() {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dlathyun"},"content":" scanner.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dlathyun"},"content":" * Returns the next user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dlathyun"},"content":" * @return String representation of user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dlathyun"},"content":" public String getUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dlathyun"},"content":" while (true) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dlathyun"},"content":" if (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dlathyun"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"dlathyun"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dlathyun"},"content":" * Prints greeting message.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dlathyun"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dlathyun"},"content":" public void greet() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"dlathyun"},"content":" String logo \u003d \" _ _ _\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"dlathyun"},"content":" \" / \\\\ / \\\\ / \\\\\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"dlathyun"},"content":" \"( 안 | 녕 )\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"dlathyun"},"content":" \" \\\\_/ \\\\_/ \\\\_/\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dlathyun"},"content":" System.out.println(logo + \"Hello, I am your chatbot Kora!\\nHow can I help you today?\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dlathyun"},"content":" System.out.println(\"------------------------------\");","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dlathyun":49}},{"path":"src/test/java/duke/command/CommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"public class CommandTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" public void byeCommand_shouldExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" Command command \u003d new ByeCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" Assertions.assertTrue(command.isExitYet());","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dlathyun":14}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dlathyun"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dlathyun"},"content":" public void initialiseShouldBeFalseForIsMarked() {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dlathyun"},"content":" Task task \u003d new Task(\"Test\");","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dlathyun"},"content":" Assertions.assertEquals(task.showMarked(), \"[ ] \");","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dlathyun"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dlathyun"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dlathyun"},"content":" public void setMarkedShouldBeTrueForIsMarked() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dlathyun"},"content":" Task task \u003d new Task(\"Test\");","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dlathyun"},"content":" task.setMarked();","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dlathyun"},"content":" Assertions.assertEquals(task.showMarked(), \"[X] \");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dlathyun"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dlathyun"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dlathyun":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"dlathyun"},"content":"event lecture /from 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"dlathyun"},"content":"deadline pset 1 /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"dlathyun"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"dlathyun"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"dlathyun"},"content":"bah","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"dlathyun"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"dlathyun":6}}] diff --git a/dlathyun_ip_master/commits.json b/dlathyun_ip_master/commits.json index 80e9bca4..70a9f87a 100644 --- a/dlathyun_ip_master/commits.json +++ b/dlathyun_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"dlathyun":[{"date":"2023-08-22","commitResults":[{"hash":"c7e1f70f7776876178cad5ff39d5e5011d064948","isMergeCommit":false,"messageTitle":"Level 01","messageBody":"","tags":["Level-1","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"e2e390ac694dc514c03c751e90537dd258e404ee","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":7}}},{"hash":"d4a410f242cbdceac159c8212fac87f60cc740e8","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":192,"deletions":16}}},{"hash":"f7cf1fece7178d47908426cd2bcfd23a47186140","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":209,"deletions":46}}},{"hash":"c1305df3c15765fc159ee6b4414202730961c0bc","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":75,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"0aae59041252fad4ccd743aff4e435ead81d7546","isMergeCommit":false,"messageTitle":"Level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":8}}},{"hash":"de0b177e011b52591a6981a9714b1a5c3eadf885","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":1}}},{"hash":"6de943a690f49653109208d566ed7a2305545d14","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":3}}}]},{"date":"2023-08-30","commitResults":[{"hash":"4af986eb2815934d7c42d265358548a9cf7008cd","isMergeCommit":false,"messageTitle":"Level 7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":125,"deletions":5}}},{"hash":"255550e0b58438477b304920abe08e9126513b2a","isMergeCommit":false,"messageTitle":"Level 8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":3},"java":{"insertions":57,"deletions":15}}},{"hash":"ad426abe969cc43b2930b66625d342be62792979","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"3f02b3bfe93ef88090ba5adc1fc3f6812c8640e6","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":249,"deletions":75}}},{"hash":"6cb18eaebbe138e2d8856b65c268ce9dfa4f5c25","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"a755eb1eefd6b28df65fdfa2771cf704e511b5db","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b738c7c6fb03d0f24a021d0c4165ad51c70303ed","isMergeCommit":false,"messageTitle":"Add package and gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":69,"deletions":142}}},{"hash":"c2263162f55b0613899546ac42b08b0d4b522cba","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":0}}},{"hash":"1c54f1e4f3615e1b3ade106212dba67b90b6cf7a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"dlathyun":{"java":841,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":7}},"authorContributionVariance":{"dlathyun":33769.17},"authorDisplayNameMap":{"dlathyun":"CS2103T-W10-2 YIM ..HYUN"}} +{"authorDailyContributionsMap":{"dlathyun":[{"date":"2023-08-22","commitResults":[{"hash":"c7e1f70f7776876178cad5ff39d5e5011d064948","isMergeCommit":false,"messageTitle":"Level 01","messageBody":"","tags":["Level-1","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"e2e390ac694dc514c03c751e90537dd258e404ee","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":7}}},{"hash":"d4a410f242cbdceac159c8212fac87f60cc740e8","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":192,"deletions":16}}},{"hash":"f7cf1fece7178d47908426cd2bcfd23a47186140","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":209,"deletions":46}}},{"hash":"c1305df3c15765fc159ee6b4414202730961c0bc","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":75,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"0aae59041252fad4ccd743aff4e435ead81d7546","isMergeCommit":false,"messageTitle":"Level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":8}}},{"hash":"de0b177e011b52591a6981a9714b1a5c3eadf885","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":1}}},{"hash":"6de943a690f49653109208d566ed7a2305545d14","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":3}}}]},{"date":"2023-08-30","commitResults":[{"hash":"4af986eb2815934d7c42d265358548a9cf7008cd","isMergeCommit":false,"messageTitle":"Level 7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":125,"deletions":5}}},{"hash":"255550e0b58438477b304920abe08e9126513b2a","isMergeCommit":false,"messageTitle":"Level 8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":3},"java":{"insertions":57,"deletions":15}}},{"hash":"ad426abe969cc43b2930b66625d342be62792979","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"3f02b3bfe93ef88090ba5adc1fc3f6812c8640e6","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":249,"deletions":75}}},{"hash":"6cb18eaebbe138e2d8856b65c268ce9dfa4f5c25","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"a755eb1eefd6b28df65fdfa2771cf704e511b5db","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b738c7c6fb03d0f24a021d0c4165ad51c70303ed","isMergeCommit":false,"messageTitle":"Add package and gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":69,"deletions":142}}},{"hash":"c2263162f55b0613899546ac42b08b0d4b522cba","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":0}}},{"hash":"1c54f1e4f3615e1b3ade106212dba67b90b6cf7a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"18afce2e74021caeb4d39d9c3b86189548b5cd49","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":158,"deletions":26}}}]},{"date":"2023-09-05","commitResults":[{"hash":"a1a37fb9595e60a1f5168079c3e0b1e8883e9934","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":132}}},{"hash":"196f3bd355104a08b1b1074b542bc5319839b095","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":2}}},{"hash":"10200be155b9956442c9c287c1355680150ebeab","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c9c58b3e630616d52cb4ea8bdeed0bfc130223f6","isMergeCommit":true,"messageTitle":"Merge conflict","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"5f1e2d0e08da8a2361f9ace72d05632c70b38a85","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"55ae3adb9fade1a5c1ff9c7917a091c2e8d0cc4a","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"dlathyun":{"java":932,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":7}},"authorContributionVariance":{"dlathyun":43709.812},"authorDisplayNameMap":{"dlathyun":"CS2103T-W10-2 YIM ..HYUN"}} diff --git a/evanyan13_ip_master/authorship.json b/evanyan13_ip_master/authorship.json index b08475ab..6ad271c0 100644 --- a/evanyan13_ip_master/authorship.json +++ b/evanyan13_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"# Jarvis Chatbot","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":"-"},"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":"evanyan13"},"content":" ____________________________________________________________","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" Hi Master! I\u0027m your personal assistant: JARVIS! ","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" ██ █████ ██████ ██ ██ ██ ███████ ","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" ██ ██ ██ ██ ██ ██ ██ ██ ██ ","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" ██ ███████ ██████ ██ ██ ██ ███████ ","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" ██ ██ ██ ██ ██ ██ ██ ██ ██ ██","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" █████ ██ ██ ██ ██ ████ ██ ███████ ","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" How can I serve you today? ","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" ____________________________________________________________","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"evanyan13":14,"-":17}},{"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":"evanyan13"},"content":" implementation group: \u0027com.joestelmach\u0027, name: \u0027natty\u0027, version: \u00270.6\u0027","lastModifiedDate":"2023-09-02"},{"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":"evanyan13"},"content":" mainClass.set(\"jarvis.Main\")","lastModifiedDate":"2023-09-02"},{"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":"evanyan13"},"content":" archiveBaseName \u003d \"jarvis\"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" archiveFileName \u003d \u0027jarvis.jar\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"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":{"evanyan13":4,"-":40}},{"path":"src/main/java/jarvis/Jarvis.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.JarvisException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" * The main class for Jarvis application, a CLI chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" * It initialises and manages the core components of the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" * Namely: ui, storage, taskList, and commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"public class Jarvis {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" private Ui ui;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" * Constructor for Jarvis class.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" public Jarvis() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" taskList.setTasks(storage.loadTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" * Starts Jarvis by printing the introductory message.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" public void start() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" ui.printIntro();","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" * Responds to user input by parsing and executing commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" * @param userInput The input provided by the user through CLI.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" public void respond(final String userInput) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" Command command \u003d Parser.parseCommand(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" command.execute(taskList, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" } catch (JarvisException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" ui.printError(e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":48}},{"path":"src/main/java/jarvis/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":" * The Main class to initialise Jarvis and prompt for userInput.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"public class Main {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" * The main method to start Jarvis.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" * ","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" * @param args Command-line arguments","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" Jarvis jarvis \u003d new Jarvis();","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" jarvis.start();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" String userInput;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" jarvis.respond(userInput);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" } finally {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" scanner.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":30}},{"path":"src/main/java/jarvis/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import java.util.List;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.ByeCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.DeadlineCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.EventCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.FindCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.TodoCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.UnmarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidDateTimeFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" * The Paser class is responsible for parsing user input and converting it into executable commands and tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" * Parses user input and returns the corresponding command.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" * @return The corresponding command.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidCommandException If the input is an invalid command.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" public static Command parseCommand(final String userInput) throws InvalidCommandException {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" String[] userInputSpilt \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" if (userInput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" } else if (userInput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" } else if (userInputSpilt[0].startsWith(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":" return new MarkCommand(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"evanyan13"},"content":" } else if (userInputSpilt[0].equalsIgnoreCase(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"evanyan13"},"content":" return new UnmarkCommand(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"evanyan13"},"content":" } else if (userInputSpilt[0].equalsIgnoreCase(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"evanyan13"},"content":" return new DeleteCommand(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"evanyan13"},"content":" } else if (userInputSpilt[0].equalsIgnoreCase(\"find\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"evanyan13"},"content":" return new FindCommand(userInput);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"evanyan13"},"content":" } else if (userInputSpilt[0].equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"evanyan13"},"content":" return new TodoCommand(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"evanyan13"},"content":" } else if (userInputSpilt[0].equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"evanyan13"},"content":" return new DeadlineCommand(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"evanyan13"},"content":" } else if (userInputSpilt[0].equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"evanyan13"},"content":" return new EventCommand(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"evanyan13"},"content":" throw new InvalidCommandException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"evanyan13"},"content":" * Parses a date and time string into a LocalDateTime object.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"evanyan13"},"content":" * @param inputDateTime The date and time string to parse.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"evanyan13"},"content":" * @return A LocalDateTime object representing the parsed date and time.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidDateTimeFormatException If the input date and time format is","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"evanyan13"},"content":" * invalid.","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"evanyan13"},"content":" public static LocalDateTime parseDateTime(final String inputDateTime) throws InvalidDateTimeFormatException {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"evanyan13"},"content":" List\u003cString\u003e inputFormats \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"evanyan13"},"content":" inputFormats.add(Ui.DATE_TIME_FORMAT);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"evanyan13"},"content":" inputFormats.add(\"dd MMM yyyy HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"evanyan13"},"content":" inputFormats.add(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"evanyan13"},"content":" inputFormats.add(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"evanyan13"},"content":" LocalDateTime result \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"evanyan13"},"content":" for (String inputFormat : inputFormats) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"evanyan13"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"evanyan13"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(inputFormat);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"evanyan13"},"content":" LocalDateTime parsedDateTime \u003d LocalDateTime.parse(inputDateTime, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"evanyan13"},"content":" result \u003d parsedDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"evanyan13"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"evanyan13"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"evanyan13"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"evanyan13"},"content":" if (result !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"evanyan13"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"evanyan13"},"content":" throw new InvalidDateTimeFormatException(inputDateTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"evanyan13"},"content":" * Parses a string representation of a task into a Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"evanyan13"},"content":" * @param line The string representation of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"evanyan13"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidTaskFormatException If the task format is invalid.","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"evanyan13"},"content":" public static Task parseStringToTask(final String line) throws InvalidTaskFormatException {","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"evanyan13"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"evanyan13"},"content":" String[] lineSplit \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"evanyan13"},"content":" String taskType \u003d lineSplit[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"evanyan13"},"content":" boolean isCompleted \u003d Integer.parseInt(lineSplit[1].trim()) \u003d\u003d 1 ? true : false;","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"evanyan13"},"content":" String taskDetails \u003d lineSplit[2].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"evanyan13"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"evanyan13"},"content":" case \"T\":","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"evanyan13"},"content":" return new Todo(taskDetails, isCompleted);","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"evanyan13"},"content":" case \"D\":","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"evanyan13"},"content":" String deadlineByString \u003d lineSplit[3].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"evanyan13"},"content":" LocalDateTime formattedDeadlineBy \u003d parseDateTime(deadlineByString);","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"evanyan13"},"content":" return new Deadline(taskDetails, formattedDeadlineBy, isCompleted);","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"evanyan13"},"content":" case \"E\":","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"evanyan13"},"content":" String fromTime \u003d lineSplit[3].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"evanyan13"},"content":" String toTime \u003d lineSplit[4].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"evanyan13"},"content":" LocalDateTime formattedFromTime \u003d parseDateTime(fromTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"evanyan13"},"content":" LocalDateTime formattedToTime \u003d parseDateTime(toTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"evanyan13"},"content":" return new Event(taskDetails, formattedFromTime, formattedToTime, isCompleted);","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"evanyan13"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"evanyan13"},"content":" throw new InvalidTaskFormatException(\"Unknown Task Type: \" + taskType);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"evanyan13"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"evanyan13"},"content":" throw new InvalidTaskFormatException(\"Invalid task format: \" + line);","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":134}},{"path":"src/main/java/jarvis/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" * Storage class is responsible for storing and loading tasks from file destination.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" private static final String FILE_PATH \u003d \"./jarvis/data/jarvis.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" * Saves a list of tasks to the file destination.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" * @param tasks An ArrayList of task to be saved.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(FILE_PATH))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" writer.write(task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" writer.newLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" * Loads tasks from the file destination.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" * @return An ArrayList of tasks loaded from the storage file.","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" public ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(FILE_PATH))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":" String nextLine;","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" while ((nextLine \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":" tasks.add(Parser.parseStringToTask(nextLine));","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"evanyan13"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"evanyan13"},"content":" System.err.println(\"Unable to load tasks\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"evanyan13"},"content":" } catch (InvalidTaskFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"evanyan13"},"content":" System.err.println(\"Invalid Task Format when loading tasks\");","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"evanyan13"},"content":" return tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"evanyan13":57}},{"path":"src/main/java/jarvis/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" * The user interface class responsible for displaying information to the user on the CLI.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"public class Ui {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" * ASCII Art Generated from http://patorjk.com/software/taag/","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" private static final String LOGO \u003d ","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" \" ██ █████ ██████ ██ ██ ██ ███████ \\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" \" ██ ██ ██ ██ ██ ██ ██ ██ ██ \\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" \" ██ ███████ ██████ ██ ██ ██ ███████ \\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" \"██ ██ ██ ██ ██ ██ ██ ██ ██ ██\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" \"█████ ██ ██ ██ ██ ████ ██ ███████ \\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" public static final String DATE_TIME_FORMAT \u003d \"MMM dd yyyy HHmm\";","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" public void printIntro() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" System.out.println(\" Hi Master! I\u0027m your personal assistant: JARVIS! \\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" \"\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" LOGO +","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" \"\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" \" How can I serve you today? \\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" public void printResponse(String response) {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" System.out.println(\" \" + response);","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" public void printBye() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" System.out.println(\" Bye Master. It has been my honour to serve you!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" public void printTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" System.out.println(\" Tasks:\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"evanyan13"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"evanyan13"},"content":" System.out.println(\" \" + (i + 1) + \". \" +","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"evanyan13"},"content":" task.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"evanyan13"},"content":" public void printTaskStatus(Task task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"evanyan13"},"content":" System.out.println(\" Understood Master. I\u0027ve marked this task as \" + ","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"evanyan13"},"content":" (task.isCompleted() ? \"completed\" : \"uncompleted\") + \"\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"evanyan13"},"content":" \"\\t\" + task.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"evanyan13"},"content":" public void printError(String error) {","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"evanyan13"},"content":" System.err.println(error + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"evanyan13"},"content":" public static void breakLine() {","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"evanyan13"},"content":" System.out.println(\" ____________________________________________________________\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":73}},{"path":"src/main/java/jarvis/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" * Represents the exit command for the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"public class ByeCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" * Executes the bye command by displaying a farewell message, saving tasks, and","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" * exiting the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" ui.printBye();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":26}},{"path":"src/main/java/jarvis/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"public interface Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidIndexException, InvalidTaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":11}},{"path":"src/main/java/jarvis/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidDateTimeFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" * Represents a command to add a \"Deadline\" task in the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" * ","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":"public class DeadlineCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" private String userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" public DeadlineCommand(String userInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" * Executes the deadline command by adding a new \"Deadline\" task to the task","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" * list.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidIndexException If an invalid index is provided.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidTaskFormatException If the task format is invalid.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage)","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" throws InvalidIndexException, InvalidTaskFormatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" if (userInput.equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" throw new InvalidTaskFormatException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" int indexOfBy \u003d userInput.indexOf(\"by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" if (indexOfBy !\u003d 1 \u0026\u0026 indexOfBy \u003c\u003d userInput.length()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":" String taskTitle \u003d userInput.substring(9, indexOfBy).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" String dueDate \u003d userInput.substring(indexOfBy + 2).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":" LocalDateTime formattedDueDate \u003d Parser.parseDateTime(dueDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"evanyan13"},"content":" Deadline deadline \u003d new Deadline(taskTitle, formattedDueDate, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"evanyan13"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"evanyan13"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"Yes Master! I\u0027ve added this task: \\n\" + \"\\t\" + deadline.toString() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"evanyan13"},"content":" \" Master, you have \" + taskList.getTaskCount() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"evanyan13"},"content":" } catch (InvalidDateTimeFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"evanyan13"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"evanyan13"},"content":" throw new InvalidIndexException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":61}},{"path":"src/main/java/jarvis/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" * Represents a command to delete a task in the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" private String userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" public DeleteCommand(String userInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" * Executes the delete command by removing the specified task from the task","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" * list.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidIndexException If an invalid index is provided.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" String[] userInputSpilt \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" int index \u003d Integer.parseInt(userInputSpilt[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" if (index \u003e\u003d 1 \u0026\u0026 index \u003c\u003d taskList.getTaskCount()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" Task removedTask \u003d taskList.deleteTask(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"Noted Master! I\u0027ve removed this task:\\n\" + \"\\t\" + removedTask.toString() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" \" Master, you have \" + taskList.getTaskCount() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" throw new InvalidIndexException(\" Please indicate which task you wish to DELETE?\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" \" From 1 to \" + taskList.getTaskCount() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" \" Current Index: \" + index);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":45}},{"path":"src/main/java/jarvis/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidDateTimeFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" * Represents a command to add an \"Event\" task in the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":"public class EventCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" private String userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" public EventCommand(String userInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" * Executes the event command by adding a new \"Event\" task to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidIndexException If an invalid index is provided.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidTaskFormatException If the task format is invalid.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage)","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" throws InvalidIndexException, InvalidTaskFormatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" if (userInput.equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" throw new InvalidTaskFormatException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" int indexOfFrom \u003d userInput.indexOf(\"from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" int indexOfTo \u003d userInput.indexOf(\"to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" if (indexOfFrom !\u003d 1 \u0026\u0026 indexOfFrom \u003c\u003d userInput.length() ||","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" indexOfTo !\u003d 1 \u0026\u0026 indexOfTo \u003c\u003d userInput.length()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":" String taskTitle \u003d userInput.substring(6, indexOfFrom).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" String fromDateTime \u003d userInput.substring(indexOfFrom + 4, indexOfTo).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":" String toDateTime \u003d userInput.substring(indexOfTo + 2).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"evanyan13"},"content":" LocalDateTime formattedFromTime \u003d Parser.parseDateTime(fromDateTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"evanyan13"},"content":" LocalDateTime formattedToTime \u003d Parser.parseDateTime(toDateTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"evanyan13"},"content":" Event event \u003d new Event(taskTitle, formattedFromTime, formattedToTime, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"evanyan13"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"evanyan13"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"Yes Master! I\u0027ve added this task: \\n\" + \"\\t\" + event.toString() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"evanyan13"},"content":" \" Master, you have \" + taskList.getTaskCount() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"evanyan13"},"content":" } catch (InvalidDateTimeFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"evanyan13"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"evanyan13"},"content":" throw new InvalidIndexException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":64}},{"path":"src/main/java/jarvis/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" private String userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" public FindCommand(String userInput) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidTaskFormatException {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" if (userInput.equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" throw new InvalidTaskFormatException(null);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" int indexOfFind \u003d userInput.indexOf(\"find\");","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" String keyword \u003d userInput.substring(indexOfFind + 4).trim();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskList.getTaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" String taskTitle \u003d task.getTitle();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" if (taskTitle.contains(keyword)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" foundTasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" if (foundTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"No matching task is found, Master. Please check your spelling or use another word\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" ui.printTasks(foundTasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"evanyan13":43}},{"path":"src/main/java/jarvis/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" * Represents a command to list the tasks currently present in the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" * Executes the list command, which lists the tasks currently present in the","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" * Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks to be listed.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"Congratulations Master! There is no task at the moment!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskList.getTaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" ui.printTasks(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":32}},{"path":"src/main/java/jarvis/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" * Represents a command to mark a task as completed in the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"public class MarkCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" private String userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" public MarkCommand(String userInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" * Executes the mark command by marking the specified task as completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidIndexException If the task index provided in the user input is","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" * invalid.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" String[] userInputSpilt \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" int index \u003d Integer.parseInt(userInputSpilt[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" if (userInput.length() \u003c\u003d 4) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"Master, please indicate which task you wish to mark DONE?\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" \"from 1 to \" + taskList.getTaskCount());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" } else if (index \u003e\u003d 1 \u0026\u0026 index \u003c\u003d taskList.getTaskCount()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" Task task \u003d taskList.getTask(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" task.markCompleted();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" ui.printTaskStatus(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" throw new InvalidIndexException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":46}},{"path":"src/main/java/jarvis/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" * Represents a command to add a \"Todo\" task in the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"public class TodoCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" private String userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" public TodoCommand(String userInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" * Executes the todo command by adding a new \"Todo\" task to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidIndexException If an invalid index is provided.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidTaskFormatException If the task format is invalid.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage)","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" throws InvalidIndexException, InvalidTaskFormatException {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" if (userInput.equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" throw new InvalidTaskFormatException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" String taskTitle \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" Todo todo \u003d new Todo(taskTitle, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"Yes Master! I\u0027ve added this task: \\n\" + \"\\t\" + todo.toString() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" \" Master, you have \" + taskList.getTaskCount() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":43}},{"path":"src/main/java/jarvis/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" * Represents a command to mark a task as uncompleted in the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"public class UnmarkCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" private String userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" public UnmarkCommand(String userInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" * Executes the unmark command by marking the specified task as uncompleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidIndexException If the task index provided in the user input is","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" * invalid.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" String[] userInputSpilt \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" int index \u003d Integer.parseInt(userInputSpilt[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" if (userInput.length() \u003c\u003d 4) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"Master, please indicate which task you wish to mark DONE?\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" \"from 1 to \" + taskList.getTaskCount());","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" } else if (index \u003e\u003d 1 \u0026\u0026 index \u003c\u003d taskList.getTaskCount()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" Task task \u003d taskList.getTask(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" task.unmarkCompleted();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" ui.printTaskStatus(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" throw new InvalidIndexException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":45}},{"path":"src/main/java/jarvis/data/jarvis.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"T | 0 | Todo 1","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"E | 1 | Meeting 1 | Nov 12 2022 1600 | Nov 12 2022 1800","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"D | 0 | Deadline 1 | Sep 02 2023 1900","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"D | 0 | return book | Sep 04 2023 2200","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"T | 0 | send book back","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"evanyan13":5}},{"path":"src/main/java/jarvis/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":" * Represents an exception thrown when an invalid command is provided to Jarvis.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"public class InvalidCommandException extends JarvisException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" super(\"Sorry Master, I\u0027m not 100% sure what that means? Can you provide me with a more clear command please?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":10}},{"path":"src/main/java/jarvis/exceptions/InvalidDateTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":" * Represents an exception thrown when an invalid DateTime format is provided to Jarvis.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"public class InvalidDateTimeFormatException extends JarvisException{","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" public InvalidDateTimeFormatException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" super(\" Please enter a correct DateTime Format Example: \\n\" ","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" + \" \\\"Nov 12 2022 1200\\\"\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" + \" \\\"12 Nov 2022 1200\\\"\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" + \" \\\"2022-11-12 1200\\\"\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" + \" \\\"12/11/2022 1200\\\"\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" + message);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":15}},{"path":"src/main/java/jarvis/exceptions/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":" * Represents an exception thrown when an invalid index is provided to Jarvis.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"public class InvalidIndexException extends JarvisException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" public InvalidIndexException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" super(\" Master, this appears to be an invalid index.\\n\" + message);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":12}},{"path":"src/main/java/jarvis/exceptions/InvalidTaskFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":" * Represents an exception thrown when an invalid Task format is provided to Jarvis.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"public class InvalidTaskFormatException extends JarvisException{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" public InvalidTaskFormatException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" super(\"Master, please provide me with the correct format.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":10}},{"path":"src/main/java/jarvis/exceptions/JarvisException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":" * Represents a custom exception class for exceptions specific to Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"public class JarvisException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" public JarvisException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":10}},{"path":"src/main/java/jarvis/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" * Represents the \"Deadline\" task in Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" private LocalDateTime dueDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" public Deadline(String title, LocalDateTime dueDate, boolean isCompleted) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" super(title, isCompleted);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" * Overrides the toString method to provide a custom string representation of the Deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" * @return A string representation of the Deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(Ui.DATE_TIME_FORMAT);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" String formattedDueDate \u003d dueDate.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" return \"D | \" + super.toString() + \" | \" + formattedDueDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":31}},{"path":"src/main/java/jarvis/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" * Represents the \"Event\" task in Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" private LocalDateTime fromDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" private LocalDateTime toDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" public Event(String title, LocalDateTime fromDateTime, LocalDateTime toDateTime, boolean isCompleted) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" super(title, isCompleted);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" this.fromDateTime \u003d fromDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" this.toDateTime \u003d toDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" * Overrides the toString method to provide a custom string representation of the Event task.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" * @return A string representation of the Event task.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(Ui.DATE_TIME_FORMAT);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" String formattedFromDateTime \u003d fromDateTime.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" String formattedToDateTime \u003d toDateTime.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" return \"E | \" + super.toString() + \" | \" + formattedFromDateTime + \" | \" + formattedToDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":34}},{"path":"src/main/java/jarvis/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":" * The Task class holds all the properties of Task objects in Jarvis","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" * application.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" * Represents a task with a title, completion status, and optional due date.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" private String title;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" private boolean isCompleted;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" private LocalDateTime dueDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" public Task(String title, boolean isCompleted) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" this.title \u003d title;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" this.isCompleted \u003d isCompleted;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" * Gets the title of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" * @return The title of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" public String getTitle() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" return title;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" * Checks if the task is completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" * @return true if the task is completed, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" public boolean isCompleted() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" return isCompleted;","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" * Gets the status icon of the task (1 if completed, 0 if uncompleted).","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" * @return The status icon of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" return (isCompleted ? \"1 | \" : \"0 | \");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":" * Marks the task as completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"evanyan13"},"content":" public void markCompleted() {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"evanyan13"},"content":" isCompleted \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"evanyan13"},"content":" * Marks the task as uncompleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"evanyan13"},"content":" public void unmarkCompleted() {","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"evanyan13"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"evanyan13"},"content":" * Gets the due date of the task (null if not set).","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"evanyan13"},"content":" * @return The due date of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"evanyan13"},"content":" public LocalDateTime getDueDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"evanyan13"},"content":" return dueDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"evanyan13"},"content":" * Sets the due date of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"evanyan13"},"content":" * @param dueDate The due date to set for the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"evanyan13"},"content":" public void setDueDate(LocalDateTime dueDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"evanyan13"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"evanyan13"},"content":" * Returns a string representation of the task, including its status icon and title.","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"evanyan13"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"evanyan13"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"evanyan13"},"content":" return getStatusIcon() + getTitle();","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"evanyan13"},"content":" public boolean contains(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"evanyan13"},"content":" if (title.contains(keyword)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"evanyan13"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"evanyan13"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":95}},{"path":"src/main/java/jarvis/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":" * Represents a list of tasks in the Jarvis application.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" * Provides methods for managing and retrieving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"public class TaskList {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" * Constructs a new TaskList with an empty list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" public TaskList() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" * @param task The task to be added to the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" * Sets the tasks in the task list to the provided list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" * @param tasks The list of tasks to set in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" public void setTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" taskList.clear();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" taskList.addAll(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" * Gets the list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" public ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" return taskList;","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":" * Gets the task at the specified index in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"evanyan13"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"evanyan13"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"evanyan13"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"evanyan13"},"content":" return taskList.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"evanyan13"},"content":" * Deletes the task at the specified index in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"evanyan13"},"content":" * @param index The index of the task to delete.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"evanyan13"},"content":" * @return The deleted task.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"evanyan13"},"content":" public Task deleteTask(int i) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"evanyan13"},"content":" Task removedTask \u003d taskList.get(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"evanyan13"},"content":" taskList.remove(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"evanyan13"},"content":" return removedTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"evanyan13"},"content":" * Gets the number of tasks in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"evanyan13"},"content":" * @return The number of tasks in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"evanyan13"},"content":" public int getTaskCount() {","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"evanyan13"},"content":" return taskList.size();","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"evanyan13"},"content":" * Checks if the task list is empty.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"evanyan13"},"content":" * @return true if the task list is empty, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"evanyan13"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"evanyan13"},"content":" return taskList.isEmpty();","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":86}},{"path":"src/main/java/jarvis/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":" * Represents the \"Todo\" task in Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" public Todo(String title, boolean isCompleted) {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" super(title, isCompleted);","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" * Overrides the toString method to provide a custom string representation of the Todo task.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" * @return A string representation of the Todo task.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" return \"T | \" + super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":20}},{"path":"src/test/java/jarvis/JarvisTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"public class JarvisTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" public void dummyTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" assertEquals(3, 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"evanyan13":17}},{"path":"src/test/java/jarvis/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" public void dummyTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" assertEquals(3, 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"evanyan13":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"deadline return book by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"event project meeting from Mon 2pm to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"unmark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":11}},{"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":"evanyan13"},"content":"if ! javac -classpath ../src/main/jarvis -Xlint:none -d ../bin ../src/main/jarvis/*.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":"evanyan13"},"content":"java -classpath ../bin Main \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":"evanyan13"},"content":"doc2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"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":"evanyan13"},"content":" echo \"Test Result: PASSED\"","lastModifiedDate":"2023-08-24"},{"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":"evanyan13"},"content":" echo \"Test Result: FAILED\"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"evanyan13":5,"-":33}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"# Jarvis Chatbot","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":"-"},"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":"evanyan13"},"content":" ____________________________________________________________","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" Hi Master! I\u0027m your personal assistant: JARVIS! ","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" ██ █████ ██████ ██ ██ ██ ███████ ","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" ██ ██ ██ ██ ██ ██ ██ ██ ██ ","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" ██ ███████ ██████ ██ ██ ██ ███████ ","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" ██ ██ ██ ██ ██ ██ ██ ██ ██ ██","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" █████ ██ ██ ██ ██ ████ ██ ███████ ","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" How can I serve you today? ","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" ____________________________________________________________","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"evanyan13":14,"-":17}},{"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":"evanyan13"},"content":" implementation group: \u0027com.joestelmach\u0027, name: \u0027natty\u0027, version: \u00270.6\u0027","lastModifiedDate":"2023-09-02"},{"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":"evanyan13"},"content":" mainClass.set(\"jarvis.Main\")","lastModifiedDate":"2023-09-02"},{"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":"evanyan13"},"content":" archiveBaseName \u003d \"jarvis\"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" archiveFileName \u003d \u0027jarvis.jar\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"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":{"evanyan13":4,"-":40}},{"path":"src/main/java/jarvis/Jarvis.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.JarvisException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" * The main class for Jarvis application, a CLI chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" * It initialises and manages the core components of the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" * Namely: ui, storage, taskList, and commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"public class Jarvis {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" private Ui ui;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" * Constructor for Jarvis class.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" public Jarvis() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" taskList.setTasks(storage.loadTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" * Starts Jarvis by printing the introductory message.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" public void start() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" ui.printIntro();","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" * Responds to user input by parsing and executing commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" * @param userInput The input provided by the user through CLI.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" public void respond(final String userInput) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" Command command \u003d Parser.parseCommand(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" command.execute(taskList, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" } catch (JarvisException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" ui.printError(e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":48}},{"path":"src/main/java/jarvis/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":" * The Main class to initialise Jarvis and prompt for userInput.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"public class Main {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" * The main method to start Jarvis.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" * ","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" * @param args Command-line arguments","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" Jarvis jarvis \u003d new Jarvis();","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" jarvis.start();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" String userInput;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" jarvis.respond(userInput);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" } finally {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" scanner.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":30}},{"path":"src/main/java/jarvis/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import java.util.List;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.ByeCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.DeadlineCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.EventCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.FindCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.TodoCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":"import jarvis.commands.UnmarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidDateTimeFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" * The Paser class is responsible for parsing user input and converting it into executable commands and tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" * Parses user input and returns the corresponding command.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" * @return The corresponding command.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidCommandException If the input is an invalid command.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" public static Command parseCommand(final String userInput) throws InvalidCommandException {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" String[] userInputSpilt \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" if (userInput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" } else if (userInput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" } else if (userInputSpilt[0].startsWith(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":" return new MarkCommand(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"evanyan13"},"content":" } else if (userInputSpilt[0].equalsIgnoreCase(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"evanyan13"},"content":" return new UnmarkCommand(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"evanyan13"},"content":" } else if (userInputSpilt[0].equalsIgnoreCase(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"evanyan13"},"content":" return new DeleteCommand(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"evanyan13"},"content":" } else if (userInputSpilt[0].equalsIgnoreCase(\"find\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"evanyan13"},"content":" return new FindCommand(userInput);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"evanyan13"},"content":" } else if (userInputSpilt[0].equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"evanyan13"},"content":" return new TodoCommand(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"evanyan13"},"content":" } else if (userInputSpilt[0].equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"evanyan13"},"content":" return new DeadlineCommand(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"evanyan13"},"content":" } else if (userInputSpilt[0].equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"evanyan13"},"content":" return new EventCommand(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"evanyan13"},"content":" throw new InvalidCommandException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"evanyan13"},"content":" * Parses a date and time string into a LocalDateTime object.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"evanyan13"},"content":" * @param inputDateTime The date and time string to parse.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"evanyan13"},"content":" * @return A LocalDateTime object representing the parsed date and time.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidDateTimeFormatException If the input date and time format is","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"evanyan13"},"content":" * invalid.","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"evanyan13"},"content":" public static LocalDateTime parseDateTime(final String inputDateTime) throws InvalidDateTimeFormatException {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"evanyan13"},"content":" List\u003cString\u003e inputFormats \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"evanyan13"},"content":" inputFormats.add(Ui.DATE_TIME_FORMAT);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"evanyan13"},"content":" inputFormats.add(\"dd MMM yyyy HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"evanyan13"},"content":" inputFormats.add(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"evanyan13"},"content":" inputFormats.add(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"evanyan13"},"content":" LocalDateTime result \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"evanyan13"},"content":" for (String inputFormat : inputFormats) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"evanyan13"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"evanyan13"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(inputFormat);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"evanyan13"},"content":" LocalDateTime parsedDateTime \u003d LocalDateTime.parse(inputDateTime, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"evanyan13"},"content":" result \u003d parsedDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"evanyan13"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"evanyan13"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"evanyan13"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"evanyan13"},"content":" if (result !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"evanyan13"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"evanyan13"},"content":" throw new InvalidDateTimeFormatException(inputDateTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"evanyan13"},"content":" * Parses a string representation of a task into a Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"evanyan13"},"content":" * @param line The string representation of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"evanyan13"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidTaskFormatException If the task format is invalid.","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"evanyan13"},"content":" public static Task parseStringToTask(final String line) throws InvalidTaskFormatException {","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"evanyan13"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"evanyan13"},"content":" String[] lineSplit \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"evanyan13"},"content":" String taskType \u003d lineSplit[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"evanyan13"},"content":" boolean isCompleted \u003d Integer.parseInt(lineSplit[1].trim()) \u003d\u003d 1 ? true : false;","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"evanyan13"},"content":" String taskDetails \u003d lineSplit[2].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"evanyan13"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"evanyan13"},"content":" case \"T\":","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"evanyan13"},"content":" return new Todo(taskDetails, isCompleted);","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"evanyan13"},"content":" case \"D\":","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"evanyan13"},"content":" String deadlineByString \u003d lineSplit[3].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"evanyan13"},"content":" LocalDateTime formattedDeadlineBy \u003d parseDateTime(deadlineByString);","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"evanyan13"},"content":" return new Deadline(taskDetails, formattedDeadlineBy, isCompleted);","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"evanyan13"},"content":" case \"E\":","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"evanyan13"},"content":" String fromTime \u003d lineSplit[3].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"evanyan13"},"content":" String toTime \u003d lineSplit[4].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"evanyan13"},"content":" LocalDateTime formattedFromTime \u003d parseDateTime(fromTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"evanyan13"},"content":" LocalDateTime formattedToTime \u003d parseDateTime(toTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"evanyan13"},"content":" return new Event(taskDetails, formattedFromTime, formattedToTime, isCompleted);","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"evanyan13"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"evanyan13"},"content":" throw new InvalidTaskFormatException(\"Unknown Task Type: \" + taskType);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"evanyan13"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"evanyan13"},"content":" throw new InvalidTaskFormatException(\"Invalid task format: \" + line);","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":134}},{"path":"src/main/java/jarvis/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" * Storage class is responsible for storing and loading tasks from file destination.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" private static final String FILE_PATH \u003d \"./jarvis/data/jarvis.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" * Saves a list of tasks to the file destination.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" * @param tasks An ArrayList of task to be saved.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(FILE_PATH))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" writer.write(task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" writer.newLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" * Loads tasks from the file destination.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" * @return An ArrayList of tasks loaded from the storage file.","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" public ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(FILE_PATH))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":" String nextLine;","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" while ((nextLine \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":" tasks.add(Parser.parseStringToTask(nextLine));","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"evanyan13"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"evanyan13"},"content":" System.err.println(\"Unable to load tasks\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"evanyan13"},"content":" } catch (InvalidTaskFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"evanyan13"},"content":" System.err.println(\"Invalid Task Format when loading tasks\");","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"evanyan13"},"content":" return tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"evanyan13":57}},{"path":"src/main/java/jarvis/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" * The user interface class responsible for displaying information to the user on the CLI.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"public class Ui {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" * ASCII Art Generated from http://patorjk.com/software/taag/","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" private static final String LOGO \u003d ","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" \" ██ █████ ██████ ██ ██ ██ ███████ \\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" \" ██ ██ ██ ██ ██ ██ ██ ██ ██ \\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" \" ██ ███████ ██████ ██ ██ ██ ███████ \\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" \"██ ██ ██ ██ ██ ██ ██ ██ ██ ██\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" \"█████ ██ ██ ██ ██ ████ ██ ███████ \\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" public static final String DATE_TIME_FORMAT \u003d \"MMM dd yyyy HHmm\";","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" public void printIntro() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" System.out.println(\" Hi Master! I\u0027m your personal assistant: JARVIS! \\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" \"\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" LOGO +","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" \"\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" \" How can I serve you today? \\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" public void printResponse(String response) {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" System.out.println(\" \" + response);","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" public void printBye() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" System.out.println(\" Bye Master. It has been my honour to serve you!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" public void printTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" System.out.println(\" Tasks:\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"evanyan13"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"evanyan13"},"content":" System.out.println(\" \" + (i + 1) + \". \" +","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"evanyan13"},"content":" task.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"evanyan13"},"content":" public void printTaskStatus(Task task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"evanyan13"},"content":" System.out.println(\" Understood Master. I\u0027ve marked this task as \" + ","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"evanyan13"},"content":" (task.isCompleted() ? \"completed\" : \"uncompleted\") + \"\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"evanyan13"},"content":" \"\\t\" + task.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"evanyan13"},"content":" public void printError(String error) {","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"evanyan13"},"content":" System.err.println(error + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"evanyan13"},"content":" breakLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"evanyan13"},"content":" public static void breakLine() {","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"evanyan13"},"content":" System.out.println(\" ____________________________________________________________\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":73}},{"path":"src/main/java/jarvis/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" * Represents the exit command for the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"public class ByeCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" * Executes the bye command by displaying a farewell message, saving tasks, and","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" * exiting the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" ui.printBye();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":26}},{"path":"src/main/java/jarvis/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"public interface Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidIndexException, InvalidTaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":11}},{"path":"src/main/java/jarvis/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidDateTimeFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" * Represents a command to add a \"Deadline\" task in the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" * ","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":"public class DeadlineCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" private String userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" public DeadlineCommand(String userInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" * Executes the deadline command by adding a new \"Deadline\" task to the task","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" * list.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidIndexException If an invalid index is provided.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidTaskFormatException If the task format is invalid.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage)","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" throws InvalidIndexException, InvalidTaskFormatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" if (userInput.equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" throw new InvalidTaskFormatException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" int indexOfBy \u003d userInput.indexOf(\"by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" if (indexOfBy !\u003d 1 \u0026\u0026 indexOfBy \u003c\u003d userInput.length()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":" String taskTitle \u003d userInput.substring(9, indexOfBy).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" String dueDate \u003d userInput.substring(indexOfBy + 2).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":" LocalDateTime formattedDueDate \u003d Parser.parseDateTime(dueDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"evanyan13"},"content":" Deadline deadline \u003d new Deadline(taskTitle, formattedDueDate, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"evanyan13"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"evanyan13"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"Yes Master! I\u0027ve added this task: \\n\" + \"\\t\" + deadline.toString() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"evanyan13"},"content":" \" Master, you have \" + taskList.getTaskCount() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"evanyan13"},"content":" } catch (InvalidDateTimeFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"evanyan13"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"evanyan13"},"content":" throw new InvalidIndexException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":61}},{"path":"src/main/java/jarvis/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" * Represents a command to delete a task in the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" private String userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" public DeleteCommand(String userInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" * Executes the delete command by removing the specified task from the task","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" * list.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidIndexException If an invalid index is provided.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" String[] userInputSpilt \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" int index \u003d Integer.parseInt(userInputSpilt[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" if (index \u003e\u003d 1 \u0026\u0026 index \u003c\u003d taskList.getTaskCount()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" Task removedTask \u003d taskList.deleteTask(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"Noted Master! I\u0027ve removed this task:\\n\" + \"\\t\" + removedTask.toString() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" \" Master, you have \" + taskList.getTaskCount() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" throw new InvalidIndexException(\" Please indicate which task you wish to DELETE?\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" \" From 1 to \" + taskList.getTaskCount() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" \" Current Index: \" + index);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":45}},{"path":"src/main/java/jarvis/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidDateTimeFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" * Represents a command to add an \"Event\" task in the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":"public class EventCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" private String userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" public EventCommand(String userInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" * Executes the event command by adding a new \"Event\" task to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidIndexException If an invalid index is provided.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidTaskFormatException If the task format is invalid.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage)","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" throws InvalidIndexException, InvalidTaskFormatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" if (userInput.equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" throw new InvalidTaskFormatException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" int indexOfFrom \u003d userInput.indexOf(\"from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" int indexOfTo \u003d userInput.indexOf(\"to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" if (indexOfFrom !\u003d 1 \u0026\u0026 indexOfFrom \u003c\u003d userInput.length() ||","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" indexOfTo !\u003d 1 \u0026\u0026 indexOfTo \u003c\u003d userInput.length()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":" String taskTitle \u003d userInput.substring(6, indexOfFrom).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" String fromDateTime \u003d userInput.substring(indexOfFrom + 4, indexOfTo).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":" String toDateTime \u003d userInput.substring(indexOfTo + 2).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"evanyan13"},"content":" LocalDateTime formattedFromTime \u003d Parser.parseDateTime(fromDateTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"evanyan13"},"content":" LocalDateTime formattedToTime \u003d Parser.parseDateTime(toDateTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"evanyan13"},"content":" Event event \u003d new Event(taskTitle, formattedFromTime, formattedToTime, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"evanyan13"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"evanyan13"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"Yes Master! I\u0027ve added this task: \\n\" + \"\\t\" + event.toString() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"evanyan13"},"content":" \" Master, you have \" + taskList.getTaskCount() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"evanyan13"},"content":" } catch (InvalidDateTimeFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"evanyan13"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"evanyan13"},"content":" throw new InvalidIndexException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":64}},{"path":"src/main/java/jarvis/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" * Represents a command to find and display tasks containing a specific keyword in their titles.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" private String userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" public FindCommand(String userInput) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" * Executes the FindCommand to search for tasks containing the specified keyword in their titles.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks to search within.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui to display responses and results.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks (not used in this command).","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidTaskFormatException If an invalid task format is encountered.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidTaskFormatException {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" if (userInput.equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" throw new InvalidTaskFormatException(null);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" int indexOfFind \u003d userInput.indexOf(\"find\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" String keyword \u003d userInput.substring(indexOfFind + 4).trim();","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskList.getTaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" String taskTitle \u003d task.getTitle();","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" if (taskTitle.contains(keyword)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" foundTasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":" if (foundTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"No matching task is found, Master. Please check your spelling or use another word\");","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"evanyan13"},"content":" ui.printTasks(foundTasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"evanyan13":54}},{"path":"src/main/java/jarvis/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" * Represents a command to list the tasks currently present in the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" * Executes the list command, which lists the tasks currently present in the","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" * Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks to be listed.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"Congratulations Master! There is no task at the moment!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskList.getTaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" ui.printTasks(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":32}},{"path":"src/main/java/jarvis/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" * Represents a command to mark a task as completed in the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"public class MarkCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" private String userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" public MarkCommand(String userInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" * Executes the mark command by marking the specified task as completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidIndexException If the task index provided in the user input is","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" * invalid.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" String[] userInputSpilt \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" int index \u003d Integer.parseInt(userInputSpilt[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" if (userInput.length() \u003c\u003d 4) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"Master, please indicate which task you wish to mark DONE?\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" \"from 1 to \" + taskList.getTaskCount());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" } else if (index \u003e\u003d 1 \u0026\u0026 index \u003c\u003d taskList.getTaskCount()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" Task task \u003d taskList.getTask(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" task.markCompleted();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" ui.printTaskStatus(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" throw new InvalidIndexException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":46}},{"path":"src/main/java/jarvis/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" * Represents a command to add a \"Todo\" task in the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"public class TodoCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" private String userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" public TodoCommand(String userInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" * Executes the todo command by adding a new \"Todo\" task to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidIndexException If an invalid index is provided.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidTaskFormatException If the task format is invalid.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage)","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" throws InvalidIndexException, InvalidTaskFormatException {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" if (userInput.equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" throw new InvalidTaskFormatException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" String taskTitle \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" Todo todo \u003d new Todo(taskTitle, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"Yes Master! I\u0027ve added this task: \\n\" + \"\\t\" + todo.toString() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" \" Master, you have \" + taskList.getTaskCount() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":43}},{"path":"src/main/java/jarvis/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import jarvis.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"import jarvis.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" * Represents a command to mark a task as uncompleted in the Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"public class UnmarkCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" private String userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" public UnmarkCommand(String userInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" * Executes the unmark command by marking the specified task as uncompleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" * @param ui The Ui for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" * @param storage The Storage for saving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" * @throws InvalidIndexException If the task index provided in the user input is","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" * invalid.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" String[] userInputSpilt \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" int index \u003d Integer.parseInt(userInputSpilt[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" if (userInput.length() \u003c\u003d 4) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" ui.printResponse(\"Master, please indicate which task you wish to mark DONE?\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" \"from 1 to \" + taskList.getTaskCount());","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" } else if (index \u003e\u003d 1 \u0026\u0026 index \u003c\u003d taskList.getTaskCount()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":" Task task \u003d taskList.getTask(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" task.unmarkCompleted();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" ui.printTaskStatus(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" throw new InvalidIndexException(null);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":45}},{"path":"src/main/java/jarvis/data/jarvis.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"T | 0 | Todo 1","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"E | 1 | Meeting 1 | Nov 12 2022 1600 | Nov 12 2022 1800","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"D | 0 | Deadline 1 | Sep 02 2023 1900","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"D | 0 | return book | Sep 04 2023 2200","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"T | 0 | send book back","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"evanyan13":5}},{"path":"src/main/java/jarvis/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":" * Represents an exception thrown when an invalid command is provided to Jarvis.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"public class InvalidCommandException extends JarvisException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" super(\"Sorry Master, I\u0027m not 100% sure what that means? Can you provide me with a more clear command please?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":10}},{"path":"src/main/java/jarvis/exceptions/InvalidDateTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":" * Represents an exception thrown when an invalid DateTime format is provided to Jarvis.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"public class InvalidDateTimeFormatException extends JarvisException{","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" public InvalidDateTimeFormatException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" super(\" Please enter a correct DateTime Format Example: \\n\" ","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" + \" \\\"Nov 12 2022 1200\\\"\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" + \" \\\"12 Nov 2022 1200\\\"\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" + \" \\\"2022-11-12 1200\\\"\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" + \" \\\"12/11/2022 1200\\\"\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" + message);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"evanyan13":15}},{"path":"src/main/java/jarvis/exceptions/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":" * Represents an exception thrown when an invalid index is provided to Jarvis.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"public class InvalidIndexException extends JarvisException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" public InvalidIndexException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" super(\" Master, this appears to be an invalid index.\\n\" + message);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":12}},{"path":"src/main/java/jarvis/exceptions/InvalidTaskFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":" * Represents an exception thrown when an invalid Task format is provided to Jarvis.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"public class InvalidTaskFormatException extends JarvisException{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" public InvalidTaskFormatException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" super(\"Master, please provide me with the correct format.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":10}},{"path":"src/main/java/jarvis/exceptions/JarvisException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":" * Represents a custom exception class for exceptions specific to Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"public class JarvisException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" public JarvisException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":10}},{"path":"src/main/java/jarvis/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" * Represents the \"Deadline\" task in Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" private LocalDateTime dueDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" public Deadline(String title, LocalDateTime dueDate, boolean isCompleted) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" super(title, isCompleted);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" * Overrides the toString method to provide a custom string representation of the Deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" * @return A string representation of the Deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(Ui.DATE_TIME_FORMAT);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" String formattedDueDate \u003d dueDate.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" return \"D | \" + super.toString() + \" | \" + formattedDueDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":31}},{"path":"src/main/java/jarvis/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import jarvis.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" * Represents the \"Event\" task in Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" private LocalDateTime fromDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" private LocalDateTime toDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" public Event(String title, LocalDateTime fromDateTime, LocalDateTime toDateTime, boolean isCompleted) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" super(title, isCompleted);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" this.fromDateTime \u003d fromDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" this.toDateTime \u003d toDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" * Overrides the toString method to provide a custom string representation of the Event task.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" * @return A string representation of the Event task.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(Ui.DATE_TIME_FORMAT);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" String formattedFromDateTime \u003d fromDateTime.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" String formattedToDateTime \u003d toDateTime.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" return \"E | \" + super.toString() + \" | \" + formattedFromDateTime + \" | \" + formattedToDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":34}},{"path":"src/main/java/jarvis/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":" * The Task class holds all the properties of Task objects in Jarvis","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" * application.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" * Represents a task with a title, completion status, and optional due date.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" private String title;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" private boolean isCompleted;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" private LocalDateTime dueDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" public Task(String title, boolean isCompleted) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" this.title \u003d title;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" this.isCompleted \u003d isCompleted;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" * Gets the title of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" * @return The title of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" public String getTitle() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" return title;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" * Checks if the task is completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" * @return true if the task is completed, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" public boolean isCompleted() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" return isCompleted;","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" * Gets the status icon of the task (1 if completed, 0 if uncompleted).","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" * @return The status icon of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" return (isCompleted ? \"1 | \" : \"0 | \");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":" * Marks the task as completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"evanyan13"},"content":" public void markCompleted() {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"evanyan13"},"content":" isCompleted \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"evanyan13"},"content":" * Marks the task as uncompleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"evanyan13"},"content":" public void unmarkCompleted() {","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"evanyan13"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"evanyan13"},"content":" * Gets the due date of the task (null if not set).","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"evanyan13"},"content":" * @return The due date of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"evanyan13"},"content":" public LocalDateTime getDueDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"evanyan13"},"content":" return dueDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"evanyan13"},"content":" * Sets the due date of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"evanyan13"},"content":" * @param dueDate The due date to set for the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"evanyan13"},"content":" public void setDueDate(LocalDateTime dueDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"evanyan13"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"evanyan13"},"content":" * Returns a string representation of the task, including its status icon and title.","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"evanyan13"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"evanyan13"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"evanyan13"},"content":" return getStatusIcon() + getTitle();","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"evanyan13"},"content":" * Returns true if the task title contains the keyword provided by the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"evanyan13"},"content":" * ","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"evanyan13"},"content":" * @param keyword The keyword the user wish to search for.","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"evanyan13"},"content":" * @return True if the task title contains the keyword, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"evanyan13"},"content":" public boolean contains(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"evanyan13"},"content":" if (title.contains(keyword)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"evanyan13"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"evanyan13"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"evanyan13"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":101}},{"path":"src/main/java/jarvis/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":" * Represents a list of tasks in the Jarvis application.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" * Provides methods for managing and retrieving tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"public class TaskList {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" * Constructs a new TaskList with an empty list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" public TaskList() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"evanyan13"},"content":" * @param task The task to be added to the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"evanyan13"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"evanyan13"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"evanyan13"},"content":" * Sets the tasks in the task list to the provided list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"evanyan13"},"content":" * @param tasks The list of tasks to set in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"evanyan13"},"content":" public void setTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"evanyan13"},"content":" taskList.clear();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"evanyan13"},"content":" taskList.addAll(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"evanyan13"},"content":" * Gets the list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"evanyan13"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"evanyan13"},"content":" public ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"evanyan13"},"content":" return taskList;","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"evanyan13"},"content":" * Gets the task at the specified index in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"evanyan13"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"evanyan13"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"evanyan13"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"evanyan13"},"content":" return taskList.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"evanyan13"},"content":" * Deletes the task at the specified index in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"evanyan13"},"content":" * @param index The index of the task to delete.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"evanyan13"},"content":" * @return The deleted task.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"evanyan13"},"content":" public Task deleteTask(int i) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"evanyan13"},"content":" Task removedTask \u003d taskList.get(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"evanyan13"},"content":" taskList.remove(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"evanyan13"},"content":" return removedTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"evanyan13"},"content":" * Gets the number of tasks in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"evanyan13"},"content":" * @return The number of tasks in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"evanyan13"},"content":" public int getTaskCount() {","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"evanyan13"},"content":" return taskList.size();","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"evanyan13"},"content":" * Checks if the task list is empty.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"evanyan13"},"content":" * @return true if the task list is empty, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"evanyan13"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"evanyan13"},"content":" return taskList.isEmpty();","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":86}},{"path":"src/main/java/jarvis/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":" * Represents the \"Todo\" task in Jarvis app.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":" public Todo(String title, boolean isCompleted) {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" super(title, isCompleted);","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" * Overrides the toString method to provide a custom string representation of the Todo task.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" * @return A string representation of the Todo task.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":" return \"T | \" + super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":20}},{"path":"src/test/java/jarvis/JarvisTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"public class JarvisTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":" ","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":" public void dummyTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" assertEquals(3, 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"evanyan13":17}},{"path":"src/test/java/jarvis/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"package jarvis.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":" public void dummyTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"evanyan13"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"evanyan13"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"evanyan13"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"evanyan13"},"content":" assertEquals(3, 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"evanyan13"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"evanyan13"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"evanyan13":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"evanyan13"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"evanyan13"},"content":"deadline return book by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"evanyan13"},"content":"event project meeting from Mon 2pm to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"evanyan13"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"evanyan13"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"evanyan13"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"evanyan13"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"evanyan13"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"evanyan13"},"content":"unmark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"evanyan13"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"evanyan13"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"evanyan13":11}},{"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":"evanyan13"},"content":"if ! javac -classpath ../src/main/jarvis -Xlint:none -d ../bin ../src/main/jarvis/*.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":"evanyan13"},"content":"java -classpath ../bin Main \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":"evanyan13"},"content":"doc2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"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":"evanyan13"},"content":" echo \"Test Result: PASSED\"","lastModifiedDate":"2023-08-24"},{"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":"evanyan13"},"content":" echo \"Test Result: FAILED\"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"evanyan13":5,"-":33}}] diff --git a/evanyan13_ip_master/commits.json b/evanyan13_ip_master/commits.json index d9e91516..8bb1c840 100644 --- a/evanyan13_ip_master/commits.json +++ b/evanyan13_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"evanyan13":[{"date":"2023-08-23","commitResults":[{"hash":"ea831f6b359662ae38f63be419907161481057da","isMergeCommit":false,"messageTitle":"First Commit for Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":3}}},{"hash":"9b8d277090114485425d50b115c6a3674b26830d","isMergeCommit":false,"messageTitle":"Edit Chatbot name and logo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":32}}}]},{"date":"2023-08-24","commitResults":[{"hash":"afcb9db7a202e81807c225b8fe636ce561ad8899","isMergeCommit":false,"messageTitle":"Add Main class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":12}}},{"hash":"c572dfe97e8ed2685ed96f2b32f20529eda274c1","isMergeCommit":false,"messageTitle":"Echo user command and exit with bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":4}}},{"hash":"ce639405ea855591e8f4e122bd7e715964696f94","isMergeCommit":false,"messageTitle":"Implement TaskList and Task class to store and display tasks. Add UI class to implement all output to the CLI","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":41}}},{"hash":"fb8e524177d8ad26791ac242592047359ad6307b","isMergeCommit":false,"messageTitle":"Implement Update Status Function in Jarvis class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":1}}},{"hash":"180102f9c06f6238d70adae065e6906117001278","isMergeCommit":false,"messageTitle":"Create Todo, Deadline and Event subclass of Task to keep track of specific information of each task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":43}}},{"hash":"8457be4a4a053e9d69728f5b11c552304f2d4aeb","isMergeCommit":false,"messageTitle":"Update IO Redirection Tests","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":2,"deletions":2},"sh":{"insertions":5,"deletions":5}}},{"hash":"b4d31edb2c72e6516c715ee3021fed33ba44c4be","isMergeCommit":false,"messageTitle":"Add Exception Handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":40},"sh":{"insertions":1,"deletions":1}}},{"hash":"83981183a9fbfe2d41f83a3bc0f57793e78d5add","isMergeCommit":false,"messageTitle":"Implement delete function to delete tasks by their index in the taskList","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"8d5bec191aa15437886a834003bc787de9c08bb1","isMergeCommit":false,"messageTitle":"Update InvalidCommandException Message","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"5be9ac48f0a86d85097e0947587d90feed25f342","isMergeCommit":false,"messageTitle":"Add save and load tasks function from file destination","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":116,"deletions":40}}},{"hash":"c5991807b755cac87c43ac4b0b0199c14d28d77d","isMergeCommit":true,"messageTitle":"Merge pull request #1 from evanyan13/branch-Level-7","messageBody":"Add save and load tasks function from file destination","fileTypesAndContributionMap":{}},{"hash":"e02ace5faa581231bbe661cf9b512feeb2dd0a20","isMergeCommit":true,"messageTitle":"Add load and save function","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"4c5e125422b7b6f54c74fa3ab0529e02fc19dfc8","isMergeCommit":false,"messageTitle":"Add parsing and formatting for date and time","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":96,"deletions":19}}},{"hash":"1923a2decfbeefd51c8835930a3fc3cccdb28ddc","isMergeCommit":true,"messageTitle":"Merge pull request #2 from evanyan13/branch-Level-8","messageBody":"Add support for parsing and formatting date and time in multiple formats","tags":["Level-8","A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"187b166b01d28bd892ad356ce6cb319f0060c2d4","isMergeCommit":false,"messageTitle":"Add command package to handle all the commands from user","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":413,"deletions":46}}},{"hash":"a1c49ac00c44d755e33f1875f3890dc698b5c7c1","isMergeCommit":true,"messageTitle":"Merge pull request #3 from evanyan13/add-command-package","messageBody":"Add command package to handle all the commands from user","fileTypesAndContributionMap":{}},{"hash":"2e9bcc65e22ed17ee535ca97cc7c4c415571a4f9","isMergeCommit":true,"messageTitle":"Merge pull request #4 from evanyan13/branch-A-MoreOOP","messageBody":"Implement more OOP in code design and package similar functions together","fileTypesAndContributionMap":{}},{"hash":"e1277045490a51319b3c25bd940f482c2c34f8d5","isMergeCommit":false,"messageTitle":"Add task package to gather all implementation for tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":4},"java":{"insertions":33,"deletions":182}}},{"hash":"8bbddaf7ccd7204e4c1c7d53a4789c40114f3476","isMergeCommit":true,"messageTitle":"Merge pull request #5 from evanyan13/add-task-package","messageBody":"Add task package to gather all implementation for tasks","fileTypesAndContributionMap":{}},{"hash":"2a7f044b6c43e5e3da5f9f4e3385b0a9c3fad64f","isMergeCommit":true,"messageTitle":"Merge pull request #6 from evanyan13/branch-A-MoreOOP","messageBody":"Create task package","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"ca7fb2863030ec0fbfd43afb4037872cc0a1d803","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bcfaa87d04e9b7457d700b2d6d132b9e7d079f72","isMergeCommit":false,"messageTitle":"Add Gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2}}}]},{"date":"2023-09-04","commitResults":[{"hash":"f23c806a52111a237cc193e12f887150a503037b","isMergeCommit":false,"messageTitle":"Package app as a JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":35,"deletions":0}}},{"hash":"dbd93bd80e88c3b23368a860d48b1ecaa189c256","isMergeCommit":false,"messageTitle":"Add JavaDoc for non-private class and methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":303,"deletions":25}}},{"hash":"7b4662e8c79e41ee8640c147f4a12d5a465d1178","isMergeCommit":true,"messageTitle":"Merge pull request #8 from evanyan13/branch-A-Junit","messageBody":"Package app as a JAR file","fileTypesAndContributionMap":{}},{"hash":"afefb6a4ae4a6167a031a00de1f2174ba1480489","isMergeCommit":false,"messageTitle":"Edit README","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":14,"deletions":7}}},{"hash":"99121fadf6b19843432bf30d0e1860d42034c991","isMergeCommit":false,"messageTitle":"Edit code to adhere to Java Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":16},"md":{"insertions":9,"deletions":9}}},{"hash":"1e6be4a5c17502e9f3b8f925ba2b4aefc47a535e","isMergeCommit":false,"messageTitle":"Add find function to find task based on keyword","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":73,"deletions":19}}},{"hash":"69dddd32843ea3f12c2104e753a4ab242d8e1a90","isMergeCommit":true,"messageTitle":"Merge pull request #9 from evanyan13/branch-A-CodingStandard","messageBody":"Implement Java coding standard through the code","fileTypesAndContributionMap":{}},{"hash":"21ed5c32dc5b9fabbe6fbfb636861ef9a25128e2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0e12c044832eed3707ebfe397337d38b7521a156","isMergeCommit":true,"messageTitle":"Merge pull request #10 from evanyan13/branch-Level-9","messageBody":"Add find function to find task based on keyword","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"evanyan13":{"java":1116,"md":14,"fxml":0,"sh":5,"bat":0,"gradle":4,"txt":16}},"authorContributionVariance":{"evanyan13":61829.42},"authorDisplayNameMap":{"evanyan13":"CS2103T-W12-3 YAN ..DONG"}} +{"authorDailyContributionsMap":{"evanyan13":[{"date":"2023-08-23","commitResults":[{"hash":"ea831f6b359662ae38f63be419907161481057da","isMergeCommit":false,"messageTitle":"First Commit for Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":3}}},{"hash":"9b8d277090114485425d50b115c6a3674b26830d","isMergeCommit":false,"messageTitle":"Edit Chatbot name and logo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":32}}}]},{"date":"2023-08-24","commitResults":[{"hash":"afcb9db7a202e81807c225b8fe636ce561ad8899","isMergeCommit":false,"messageTitle":"Add Main class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":12}}},{"hash":"c572dfe97e8ed2685ed96f2b32f20529eda274c1","isMergeCommit":false,"messageTitle":"Echo user command and exit with bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":4}}},{"hash":"ce639405ea855591e8f4e122bd7e715964696f94","isMergeCommit":false,"messageTitle":"Implement TaskList and Task class to store and display tasks. Add UI class to implement all output to the CLI","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":41}}},{"hash":"fb8e524177d8ad26791ac242592047359ad6307b","isMergeCommit":false,"messageTitle":"Implement Update Status Function in Jarvis class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":1}}},{"hash":"180102f9c06f6238d70adae065e6906117001278","isMergeCommit":false,"messageTitle":"Create Todo, Deadline and Event subclass of Task to keep track of specific information of each task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":43}}},{"hash":"8457be4a4a053e9d69728f5b11c552304f2d4aeb","isMergeCommit":false,"messageTitle":"Update IO Redirection Tests","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":2,"deletions":2},"sh":{"insertions":5,"deletions":5}}},{"hash":"b4d31edb2c72e6516c715ee3021fed33ba44c4be","isMergeCommit":false,"messageTitle":"Add Exception Handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":40},"sh":{"insertions":1,"deletions":1}}},{"hash":"83981183a9fbfe2d41f83a3bc0f57793e78d5add","isMergeCommit":false,"messageTitle":"Implement delete function to delete tasks by their index in the taskList","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"8d5bec191aa15437886a834003bc787de9c08bb1","isMergeCommit":false,"messageTitle":"Update InvalidCommandException Message","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"5be9ac48f0a86d85097e0947587d90feed25f342","isMergeCommit":false,"messageTitle":"Add save and load tasks function from file destination","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":116,"deletions":40}}},{"hash":"c5991807b755cac87c43ac4b0b0199c14d28d77d","isMergeCommit":true,"messageTitle":"Merge pull request #1 from evanyan13/branch-Level-7","messageBody":"Add save and load tasks function from file destination","fileTypesAndContributionMap":{}},{"hash":"e02ace5faa581231bbe661cf9b512feeb2dd0a20","isMergeCommit":true,"messageTitle":"Add load and save function","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"4c5e125422b7b6f54c74fa3ab0529e02fc19dfc8","isMergeCommit":false,"messageTitle":"Add parsing and formatting for date and time","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":96,"deletions":19}}},{"hash":"1923a2decfbeefd51c8835930a3fc3cccdb28ddc","isMergeCommit":true,"messageTitle":"Merge pull request #2 from evanyan13/branch-Level-8","messageBody":"Add support for parsing and formatting date and time in multiple formats","tags":["Level-8","A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"187b166b01d28bd892ad356ce6cb319f0060c2d4","isMergeCommit":false,"messageTitle":"Add command package to handle all the commands from user","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":413,"deletions":46}}},{"hash":"a1c49ac00c44d755e33f1875f3890dc698b5c7c1","isMergeCommit":true,"messageTitle":"Merge pull request #3 from evanyan13/add-command-package","messageBody":"Add command package to handle all the commands from user","fileTypesAndContributionMap":{}},{"hash":"2e9bcc65e22ed17ee535ca97cc7c4c415571a4f9","isMergeCommit":true,"messageTitle":"Merge pull request #4 from evanyan13/branch-A-MoreOOP","messageBody":"Implement more OOP in code design and package similar functions together","fileTypesAndContributionMap":{}},{"hash":"e1277045490a51319b3c25bd940f482c2c34f8d5","isMergeCommit":false,"messageTitle":"Add task package to gather all implementation for tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":4},"java":{"insertions":33,"deletions":182}}},{"hash":"8bbddaf7ccd7204e4c1c7d53a4789c40114f3476","isMergeCommit":true,"messageTitle":"Merge pull request #5 from evanyan13/add-task-package","messageBody":"Add task package to gather all implementation for tasks","fileTypesAndContributionMap":{}},{"hash":"2a7f044b6c43e5e3da5f9f4e3385b0a9c3fad64f","isMergeCommit":true,"messageTitle":"Merge pull request #6 from evanyan13/branch-A-MoreOOP","messageBody":"Create task package","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"ca7fb2863030ec0fbfd43afb4037872cc0a1d803","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bcfaa87d04e9b7457d700b2d6d132b9e7d079f72","isMergeCommit":false,"messageTitle":"Add Gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2}}}]},{"date":"2023-09-04","commitResults":[{"hash":"f23c806a52111a237cc193e12f887150a503037b","isMergeCommit":false,"messageTitle":"Package app as a JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":35,"deletions":0}}},{"hash":"dbd93bd80e88c3b23368a860d48b1ecaa189c256","isMergeCommit":false,"messageTitle":"Add JavaDoc for non-private class and methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":303,"deletions":25}}},{"hash":"7b4662e8c79e41ee8640c147f4a12d5a465d1178","isMergeCommit":true,"messageTitle":"Merge pull request #8 from evanyan13/branch-A-Junit","messageBody":"Package app as a JAR file","fileTypesAndContributionMap":{}},{"hash":"afefb6a4ae4a6167a031a00de1f2174ba1480489","isMergeCommit":false,"messageTitle":"Edit README","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":14,"deletions":7}}},{"hash":"99121fadf6b19843432bf30d0e1860d42034c991","isMergeCommit":false,"messageTitle":"Edit code to adhere to Java Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":16},"md":{"insertions":9,"deletions":9}}},{"hash":"1e6be4a5c17502e9f3b8f925ba2b4aefc47a535e","isMergeCommit":false,"messageTitle":"Add find function to find task based on keyword","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":73,"deletions":19}}},{"hash":"69dddd32843ea3f12c2104e753a4ab242d8e1a90","isMergeCommit":true,"messageTitle":"Merge pull request #9 from evanyan13/branch-A-CodingStandard","messageBody":"Implement Java coding standard through the code","fileTypesAndContributionMap":{}},{"hash":"21ed5c32dc5b9fabbe6fbfb636861ef9a25128e2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0e12c044832eed3707ebfe397337d38b7521a156","isMergeCommit":true,"messageTitle":"Merge pull request #10 from evanyan13/branch-Level-9","messageBody":"Add find function to find task based on keyword","fileTypesAndContributionMap":{}},{"hash":"ef4a4bff62ce051481fae99ac674956308cf7765","isMergeCommit":false,"messageTitle":"Add Javadoc for FindCommand and Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"evanyan13":{"java":1133,"md":14,"fxml":0,"sh":5,"bat":0,"gradle":4,"txt":16}},"authorContributionVariance":{"evanyan13":62623.027},"authorDisplayNameMap":{"evanyan13":"CS2103T-W12-3 YAN ..DONG"}} diff --git a/eyelessrhyme7_ip_master/authorship.json b/eyelessrhyme7_ip_master/authorship.json index 8c8fa311..1f0c82a9 100644 --- a/eyelessrhyme7_ip_master/authorship.json +++ b/eyelessrhyme7_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"T|1|read book","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"D|0|return book|June 6th","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"E|0|project meeting|2pm|4pm","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"T|1|join sports club","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"eyelessrhyme7":4}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":" protected String by;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":" public static Deadline DeadlineCon(String description, String by) throws InvalidTaskCreationException {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" if (description.equalsIgnoreCase(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskCreationException(\"OOPS!!! The description of a Deadline Task cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (by.equalsIgnoreCase(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskCreationException(\"OOPS!!! The deadline time of a Deadline Task cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" return new Deadline(description, by);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"eyelessrhyme7":23}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"import java.lang.reflect.Array;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"import java.sql.SQLOutput;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" public Duke() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" public static String botMessage(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":" String space \u003d \" \";","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" String horizontalBar \u003d \"-------------------------------------------------\";","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":" return space + horizontalBar + \"\\n\" + space + message + \"\\n\" + space + horizontalBar;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":" public static final String greeting \u003d \"Hello, I\u0027m Capt. Price! What can I do for you today, Sergeant?\";","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"eyelessrhyme7"},"content":" public static final String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"-"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":27,"author":{"gitId":"-"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":28,"author":{"gitId":"-"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":29,"author":{"gitId":"-"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2019-07-29"},{"lineNumber":30,"author":{"gitId":"eyelessrhyme7"},"content":" public static final String horizontalBar \u003d \"-------------------------------------------------\";","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"eyelessrhyme7"},"content":" public static final String exitGreeting \u003d \"Over and out. See you next mission!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"eyelessrhyme7"},"content":" public void loadTasksFromFile(String filePath) throws IOException, InvalidFileFormatException {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"eyelessrhyme7"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(filePath));","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"eyelessrhyme7"},"content":" String line;","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"eyelessrhyme7"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"eyelessrhyme7"},"content":" switch (line.charAt(0)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"eyelessrhyme7"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"eyelessrhyme7"},"content":" String[] splitStringList \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"eyelessrhyme7"},"content":" if (splitStringList.length !\u003d 3) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidFileFormatException(\"Invalid format for Todo task in the file.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"eyelessrhyme7"},"content":" String fabricatedUserInput \u003d \"todo \" + splitStringList[2];","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"eyelessrhyme7"},"content":" Task t;","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"eyelessrhyme7"},"content":" t \u003d Task.taskCon(fabricatedUserInput);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidCommandException | InvalidTaskCreationException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidFileFormatException(\"Invalid format for Todo task in the file.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"eyelessrhyme7"},"content":" ","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"eyelessrhyme7"},"content":" if (splitStringList[1].equals(\"1\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"eyelessrhyme7"},"content":" t.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"eyelessrhyme7"},"content":" this.taskList.add(t);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"eyelessrhyme7"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"eyelessrhyme7"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"eyelessrhyme7"},"content":" splitStringList \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"eyelessrhyme7"},"content":" if (splitStringList.length !\u003d 4) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidFileFormatException(\"Invalid format for Deadline task in the file.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"eyelessrhyme7"},"content":" fabricatedUserInput \u003d \"deadline \" + splitStringList[2] + \"/by \" + splitStringList[3];","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"eyelessrhyme7"},"content":" Task d;","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"eyelessrhyme7"},"content":" d \u003d Task.taskCon(fabricatedUserInput);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidCommandException | InvalidTaskCreationException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidFileFormatException(\"Invalid format for Deadline task in the file.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"eyelessrhyme7"},"content":" if (splitStringList[1].equals(\"1\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"eyelessrhyme7"},"content":" d.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"eyelessrhyme7"},"content":" this.taskList.add(d);","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"eyelessrhyme7"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"eyelessrhyme7"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"eyelessrhyme7"},"content":" splitStringList \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"eyelessrhyme7"},"content":" if (splitStringList.length !\u003d 5) {","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidFileFormatException(\"Invalid format for Event task in the file.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"eyelessrhyme7"},"content":" fabricatedUserInput \u003d \"event \" + splitStringList[2] + \"/from \" + splitStringList[3] + \"/to \" + splitStringList[4];","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"eyelessrhyme7"},"content":" Task ev;","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"eyelessrhyme7"},"content":" ev \u003d Task.taskCon(fabricatedUserInput);","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidCommandException | InvalidTaskCreationException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidFileFormatException(\"Invalid format for Event task in the file.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"eyelessrhyme7"},"content":" if (splitStringList[1].equals(\"1\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"eyelessrhyme7"},"content":" ev.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"eyelessrhyme7"},"content":" this.taskList.add(ev);","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"eyelessrhyme7"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"eyelessrhyme7"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"eyelessrhyme7"},"content":" // Handle invalid lines or raise an exception if needed.","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"eyelessrhyme7"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"eyelessrhyme7"},"content":" public void runBot() {","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"eyelessrhyme7"},"content":" System.out.println(botMessage(Duke.greeting));","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"eyelessrhyme7"},"content":"// ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"eyelessrhyme7"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"eyelessrhyme7"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"eyelessrhyme7"},"content":" while (!userInput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"eyelessrhyme7"},"content":" String botOutput \u003d generateResponse(userInput, scanner, this.taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"eyelessrhyme7"},"content":" System.out.println(botMessage(botOutput));","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"eyelessrhyme7"},"content":" userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"eyelessrhyme7"},"content":" System.out.println(botMessage(Duke.exitGreeting));","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"eyelessrhyme7"},"content":" public String generateResponse(String userInput, Scanner scanner, ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"eyelessrhyme7"},"content":" String botOutput \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"eyelessrhyme7"},"content":" if (userInput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + \"Here are the tasks in your list: \\n \";","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"eyelessrhyme7"},"content":" for (int i \u003d 1; i \u003c\u003d list.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + i + \".\" + \" \" + list.get(i-1) + \"\\n \";","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (userInput.startsWith(\"mark \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + \"Nice! I\u0027ve marked this task as done: \\n \";","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"eyelessrhyme7"},"content":" int taskNo \u003d Integer.parseInt(userInput.substring(5));","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"eyelessrhyme7"},"content":" if (taskNo \u003e list.size() | taskNo \u003c 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":138,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskNumberException(\"Please enter valid Task No. to mark!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":140,"author":{"gitId":"eyelessrhyme7"},"content":" Task x \u003d list.get(taskNo - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"eyelessrhyme7"},"content":" x.markAsDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + x;","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":144,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d \"Invalid Input String!!\";","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidTaskNumberException d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":150,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d d.getMessage();","lastModifiedDate":"2023-08-24"},{"lineNumber":151,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":152,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":154,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (userInput.startsWith(\"unmark \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":155,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + \"Ok, I\u0027ve marked this task as not done yet: \\n \";","lastModifiedDate":"2023-08-24"},{"lineNumber":156,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":157,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":158,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":159,"author":{"gitId":"eyelessrhyme7"},"content":" int taskNo \u003d Integer.parseInt(userInput.substring(7));","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"eyelessrhyme7"},"content":" if (taskNo \u003e list.size() | taskNo \u003c 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskNumberException(\"Please enter valid Task No. to unmark!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":163,"author":{"gitId":"eyelessrhyme7"},"content":" Task x \u003d list.get(taskNo - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":164,"author":{"gitId":"eyelessrhyme7"},"content":" x.markAsUndone();","lastModifiedDate":"2023-08-24"},{"lineNumber":165,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + x;","lastModifiedDate":"2023-08-24"},{"lineNumber":166,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":167,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":168,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":169,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d \"Invalid Input String!!\";","lastModifiedDate":"2023-08-24"},{"lineNumber":170,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":171,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidTaskNumberException d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d d.getMessage();","lastModifiedDate":"2023-08-24"},{"lineNumber":173,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":174,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":175,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (userInput.startsWith(\"delete \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":176,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + \"Noted. I\u0027ve removed this task: \\n \";","lastModifiedDate":"2023-08-24"},{"lineNumber":177,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":178,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":179,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":180,"author":{"gitId":"eyelessrhyme7"},"content":" int taskNo \u003d Integer.parseInt(userInput.substring(7));","lastModifiedDate":"2023-08-24"},{"lineNumber":181,"author":{"gitId":"eyelessrhyme7"},"content":" if (taskNo \u003e list.size() | taskNo \u003c 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":182,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskNumberException(\"Please enter valid Task No. to delete!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":184,"author":{"gitId":"eyelessrhyme7"},"content":" Task x \u003d list.get(taskNo - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":185,"author":{"gitId":"eyelessrhyme7"},"content":" list.remove(x);","lastModifiedDate":"2023-08-24"},{"lineNumber":186,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + x;","lastModifiedDate":"2023-08-24"},{"lineNumber":187,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":188,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":189,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":190,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d \"Invalid Input String!!\";","lastModifiedDate":"2023-08-24"},{"lineNumber":191,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":192,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidTaskNumberException d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d d.getMessage();","lastModifiedDate":"2023-08-24"},{"lineNumber":194,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":195,"author":{"gitId":"eyelessrhyme7"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":196,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":197,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":198,"author":{"gitId":"eyelessrhyme7"},"content":" Task t \u003d Task.taskCon(userInput);","lastModifiedDate":"2023-08-24"},{"lineNumber":199,"author":{"gitId":"eyelessrhyme7"},"content":" list.add(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":200,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + \"added: \" + t + \"\\n Now you have \" + list.size() + \" tasks in the list.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":201,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":202,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d \"OOPS!!! I\u0027m sorry, but I\u0027m afraid I don\u0027t comprehend Sergeant!\";","lastModifiedDate":"2023-08-24"},{"lineNumber":203,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidTaskCreationException t) {","lastModifiedDate":"2023-08-24"},{"lineNumber":204,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d t.getMessage();","lastModifiedDate":"2023-08-24"},{"lineNumber":205,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":206,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":207,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":208,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":209,"author":{"gitId":"eyelessrhyme7"},"content":" return botOutput;","lastModifiedDate":"2023-09-04"},{"lineNumber":210,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":212,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":213,"author":{"gitId":"eyelessrhyme7"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"eyelessrhyme7"},"content":" Duke dukeInstance \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":215,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":216,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":217,"author":{"gitId":"eyelessrhyme7"},"content":" String filePath \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":218,"author":{"gitId":"eyelessrhyme7"},"content":" dukeInstance.loadTasksFromFile(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":219,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (IOException | InvalidFileFormatException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":220,"author":{"gitId":"eyelessrhyme7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":221,"author":{"gitId":"eyelessrhyme7"},"content":" dukeInstance.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":222,"author":{"gitId":"eyelessrhyme7"},"content":" System.out.println(\"Starting Duke with Empty Task List...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":223,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":224,"author":{"gitId":"eyelessrhyme7"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":225,"author":{"gitId":"eyelessrhyme7"},"content":" dukeInstance.runBot();","lastModifiedDate":"2023-09-04"},{"lineNumber":226,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":227,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"eyelessrhyme7":220,"-":7}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":" public Event (String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" public static Event EventCon(String description, String from, String to) throws InvalidTaskCreationException {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":" if (description.equalsIgnoreCase(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskCreationException(\"OOPS!!! The description of a Event Task cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (from.equalsIgnoreCase(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskCreationException(\"OOPS!!! The from time of a Event Task cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (to.equalsIgnoreCase(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskCreationException(\"OOPS!!! The to time of a Event Task cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":" return new Event(description, from, to);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"eyelessrhyme7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"eyelessrhyme7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"eyelessrhyme7"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"eyelessrhyme7":28}},{"path":"src/main/java/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"eyelessrhyme7":5}},{"path":"src/main/java/InvalidFileFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"public class InvalidFileFormatException extends Exception{","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":" public InvalidFileFormatException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"eyelessrhyme7":5}},{"path":"src/main/java/InvalidTaskCreationException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"public class InvalidTaskCreationException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":" public InvalidTaskCreationException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"eyelessrhyme7":5}},{"path":"src/main/java/InvalidTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"public class InvalidTaskNumberException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":" public InvalidTaskNumberException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"eyelessrhyme7":5}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" public static Task taskCon(String userInput) throws InvalidCommandException, InvalidTaskCreationException{","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" if (userInput.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" return ToDo.ToDoCon(userInput.substring(5));","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (userInput.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" String[] splitInput \u003d userInput.split(\"/by\");","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" String taskDescription \u003d splitInput[0].substring(9).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" String deadline \u003d splitInput[1].trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" return new Deadline(taskDescription, deadline);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (userInput.startsWith(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":" String[] splitInput \u003d userInput.split(\"/from\");","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"eyelessrhyme7"},"content":" String taskDescription \u003d splitInput[0].substring(6).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"eyelessrhyme7"},"content":" String[] eventDetails \u003d splitInput[1].split(\"/to\");","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"eyelessrhyme7"},"content":" String eventStartTime \u003d eventDetails[0].trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"eyelessrhyme7"},"content":" String eventEndTime \u003d eventDetails[1].trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"eyelessrhyme7"},"content":" return new Event(taskDescription, eventStartTime, eventEndTime);","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"eyelessrhyme7"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidCommandException(\"Invalid command to add task!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"eyelessrhyme7"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"eyelessrhyme7"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"eyelessrhyme7"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"eyelessrhyme7"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"eyelessrhyme7"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"eyelessrhyme7"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"eyelessrhyme7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"eyelessrhyme7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"eyelessrhyme7"},"content":" return \"[\" + getStatusIcon() + \"]\" + \" \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"eyelessrhyme7":51}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":" public static ToDo ToDoCon(String description) throws InvalidTaskCreationException {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":" if (description.equalsIgnoreCase(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskCreationException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" return new ToDo(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"eyelessrhyme7":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"todo quiz","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"deadline lab /by Monday 7pm","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"event sharing /from Monday 7pm /to Friday 10pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"eyelessrhyme7":4}}] +[{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"T|1|read book","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"D|0|return book|2023-09-06 18:30:00","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"D|0|submit quiz|2023-09-08 23:59:00","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"D|0|return book|2023-10-02 23:59:00","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"E|0|project meeting|2023-09-13 18:30:00|2023-09-13 20:30:00","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":"T|1|join sports club","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"eyelessrhyme7":6}},{"path":"src/main/java/duke/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":" * The `Command` class defines constants representing various commands that can be used in the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":" * These commands are used for user interaction.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"public class Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" * Represents the \"exit\" command, which allows the user to exit the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" public static final String EXIT \u003d \"bye\";","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" * Represents the \"list\" command, which allows the user to list all tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" public static final String LIST \u003d \"list\";","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":" * Represents the \"list week\" command, which allows the user to list tasks due within a week.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":" public static final String LIST_WITHIN_WEEK \u003d \"list week\";","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"eyelessrhyme7"},"content":" * Represents the \"list month\" command, which allows the user to list tasks due within a month.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"eyelessrhyme7"},"content":" public static final String LIST_WITHIN_MONTH \u003d \"list month\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"eyelessrhyme7"},"content":" * Represents the \"delete\" command, which allows the user to delete a task.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"eyelessrhyme7"},"content":" * The task number should be appended to this command.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"eyelessrhyme7"},"content":" * Example: \"delete 2\" will delete the task with index 2.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"eyelessrhyme7"},"content":" public static final String DELETE \u003d \"delete \";","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"eyelessrhyme7"},"content":" * Represents the \"mark\" command, which allows the user to mark a task as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"eyelessrhyme7"},"content":" * The task number should be appended to this command.","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"eyelessrhyme7"},"content":" * Example: \"mark 1\" will mark the task with index 1 as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"eyelessrhyme7"},"content":" public static final String MARK \u003d \"mark \";","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"eyelessrhyme7"},"content":" * Represents the \"unmark\" command, which allows the user to mark a task as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"eyelessrhyme7"},"content":" * The task number should be appended to this command.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"eyelessrhyme7"},"content":" * Example: \"unmark 3\" will mark the task with index 3 as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"eyelessrhyme7"},"content":" public static final String UNMARK \u003d \"unmark \";","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"eyelessrhyme7"},"content":" public static final String FIND \u003d \"find \";","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"eyelessrhyme7":51}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" * Duke is a task management bot that helps you keep track of your tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" * You can add, mark as done, delete, and list tasks with Duke.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" private LocalDate currentDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":" private Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"eyelessrhyme7"},"content":" * Constructor for Duke. currentDate, ui, tasks is initialized by default.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"eyelessrhyme7"},"content":" * @param filePath The file path to the data file where tasks are stored.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"eyelessrhyme7"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"eyelessrhyme7"},"content":" // Initialize the current date to the current system date.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"eyelessrhyme7"},"content":" this.currentDate \u003d LocalDate.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"eyelessrhyme7"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"eyelessrhyme7"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"eyelessrhyme7"},"content":" // Attempt to load tasks from the specified file path.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"eyelessrhyme7"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (IOException | InvalidFileFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"eyelessrhyme7"},"content":" // Handle exceptions related to file loading.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"eyelessrhyme7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"eyelessrhyme7"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"eyelessrhyme7"},"content":" System.out.println(\"Starting Duke with Task List...\");","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"eyelessrhyme7"},"content":" * Sets the current date for Duke. Useful for list-within-week and list-within-month commands","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"eyelessrhyme7"},"content":" * @param date The LocalDate to set as the current date.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"eyelessrhyme7"},"content":" private void setcurrentDate(LocalDate date) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"eyelessrhyme7"},"content":" this.currentDate \u003d date;","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"eyelessrhyme7"},"content":" * Runs the Duke bot, accepting and processing user commands. Scanner object and infinite while loop handled here.","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"eyelessrhyme7"},"content":" public void runBot() {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"eyelessrhyme7"},"content":" // Display a greeting message to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"eyelessrhyme7"},"content":" this.ui.displayGreeting();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"eyelessrhyme7"},"content":" // Initialize a new scanner object to interact with user input from Command Line.","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"eyelessrhyme7"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"eyelessrhyme7"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"eyelessrhyme7"},"content":" while (!userInput.equalsIgnoreCase(Command.EXIT)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"eyelessrhyme7"},"content":" // Generate a response based on the user\u0027s input.","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"eyelessrhyme7"},"content":" String botOutput \u003d generateResponse(userInput, scanner, this.tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"eyelessrhyme7"},"content":" // Display the bot\u0027s response to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"eyelessrhyme7"},"content":" this.ui.displayMessage(botOutput);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"eyelessrhyme7"},"content":" // Read the next user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"eyelessrhyme7"},"content":" userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"eyelessrhyme7"},"content":" // Display an exit greeting when the bot exits.","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"eyelessrhyme7"},"content":" this.ui.displayExitGreeting();","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"eyelessrhyme7"},"content":" * Generates a response for the given user input. Keeps track of and modifies TaskList list.","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"eyelessrhyme7"},"content":" * @param userInput The user\u0027s input command.","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"eyelessrhyme7"},"content":" * @param scanner The Scanner object for user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"eyelessrhyme7"},"content":" * @param list The task list to operate on.","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"eyelessrhyme7"},"content":" * @return A response generated based on the user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"eyelessrhyme7"},"content":" public String generateResponse(String userInput, Scanner scanner, TaskList list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"eyelessrhyme7"},"content":" // Initialize the bot\u0027s response.","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"eyelessrhyme7"},"content":" String botOutput \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"eyelessrhyme7"},"content":" // Check for various user commands and generate responses accordingly.","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"eyelessrhyme7"},"content":" if (userInput.equalsIgnoreCase(Command.LIST)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"eyelessrhyme7"},"content":" // Generate a list of tasks and display it to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + \"Here are the tasks in your list: \\n \" + list.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (userInput.equalsIgnoreCase(Command.LIST_WITHIN_WEEK)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"eyelessrhyme7"},"content":" // Generate a list of tasks due within a week and display it to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"eyelessrhyme7"},"content":" TaskList listWeek \u003d list.dueWithinWeek();","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + \"Here are the tasks in your list that start/due within one week: \\n \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"eyelessrhyme7"},"content":" listWeek.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (userInput.equalsIgnoreCase(Command.LIST_WITHIN_MONTH)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"eyelessrhyme7"},"content":" // Generate a list of tasks due within a month and display it to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"eyelessrhyme7"},"content":" TaskList monthWeek \u003d list.dueWithinMonth();","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + \"Here are the tasks in your list that start/due within one month: \\n \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"eyelessrhyme7"},"content":" monthWeek.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (userInput.startsWith(Command.MARK)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"eyelessrhyme7"},"content":" // Process a command to mark a task as done and display the result.","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + \"Nice! I\u0027ve marked this task as done: \\n \";","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"eyelessrhyme7"},"content":" int taskNo \u003d parser.parseMark(userInput, list);","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"eyelessrhyme7"},"content":" Task x \u003d list.getTask(taskNo - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"eyelessrhyme7"},"content":" x.markAsDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput +\u003d x;","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (ParserException p) {","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"eyelessrhyme7"},"content":" // Handle parsing exceptions.","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d p.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (userInput.startsWith(Command.UNMARK)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"eyelessrhyme7"},"content":" // Process a command to mark a task as not done and display the result.","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + \"Ok, I\u0027ve marked this task as not done yet: \\n \";","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"eyelessrhyme7"},"content":" int taskNo \u003d parser.parseUnmark(userInput, list);","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"eyelessrhyme7"},"content":" Task x \u003d list.getTask(taskNo - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"eyelessrhyme7"},"content":" x.markAsUndone();","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput +\u003d x;","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (ParserException p) {","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"eyelessrhyme7"},"content":" // Handle parsing exceptions.","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d p.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (userInput.startsWith(Command.DELETE)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"eyelessrhyme7"},"content":" // Process a command to delete a task and display the deleted task.","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + \"Noted. I\u0027ve removed this task: \\n \";","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"eyelessrhyme7"},"content":" int taskNo \u003d parser.parseDelete(userInput, list);","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"eyelessrhyme7"},"content":" Task x \u003d list.deleteTask(taskNo - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput +\u003d x;","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (ParserException p) {","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"eyelessrhyme7"},"content":" // Handle parsing exceptions.","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d p.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (userInput.startsWith(Command.FIND)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"eyelessrhyme7"},"content":" String queryString \u003d parser.parseFind(userInput, list);","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"eyelessrhyme7"},"content":" TaskList listSearchMatches \u003d list.searchMatches(queryString);","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + \"Here are the matching tasks in your list: \\n \" + listSearchMatches.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (ParserException p) {","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d p.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"eyelessrhyme7"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":152,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"eyelessrhyme7"},"content":" // Attempt to create a new task based on the user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"eyelessrhyme7"},"content":" Task t \u003d Task.taskCon(userInput);","lastModifiedDate":"2023-08-24"},{"lineNumber":155,"author":{"gitId":"eyelessrhyme7"},"content":" list.addTask(t);","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + \"added: \" + t + \"\\n Now you have \" + list.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":158,"author":{"gitId":"eyelessrhyme7"},"content":" // Handle invalid commands.","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d \"OOPS!!! I\u0027m sorry, but I\u0027m afraid I don\u0027t comprehend Sergeant!\";","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidTaskCreationException t) {","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"eyelessrhyme7"},"content":" // Handle invalid task creation.","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d t.getMessage();","lastModifiedDate":"2023-08-24"},{"lineNumber":163,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (DateTimeParseException d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"eyelessrhyme7"},"content":" // Handle date and time format exceptions.","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d \"Please specify deadlines and dates in the following format, \" + Task.dateTimeFormat;","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":167,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":168,"author":{"gitId":"eyelessrhyme7"},"content":" // Return the generated bot response to run() method.","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"eyelessrhyme7"},"content":" return botOutput;","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":171,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":172,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"eyelessrhyme7"},"content":" * The main method to start the Duke bot.","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"eyelessrhyme7"},"content":" * @param args The command-line arguments (not used in this application).","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"eyelessrhyme7"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"eyelessrhyme7"},"content":" // Specify the file path for data storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"eyelessrhyme7"},"content":" String filePath \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"eyelessrhyme7"},"content":" // Create an instance of Duke and run the bot.","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"eyelessrhyme7"},"content":" Duke dukeInstance \u003d new Duke(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"eyelessrhyme7"},"content":" dukeInstance.runBot();","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":185,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"eyelessrhyme7":182,"-":3}},{"path":"src/main/java/duke/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":" * The `InvalidCommandException` class is a custom exception that is thrown when an invalid command is encountered in the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":" * This exception is used to handle cases where the user provides an unrecognized command.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" * Constructs a new `InvalidCommandException` with the specified detail message.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" * @param message The detail message indicating the reason for the exception.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" // Call the constructor of the parent class (Exception) and provide the error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"eyelessrhyme7":18}},{"path":"src/main/java/duke/InvalidFileFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":" * The `InvalidFileFormatException` class is a custom exception that is thrown when an invalid file format is encountered while loading data in the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":" * This exception is used to handle cases where the data file has an unexpected or corrupted format.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"public class InvalidFileFormatException extends Exception{","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" * Constructs a new `InvalidFileFormatException` with the specified detail message.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" * @param message The detail message indicating the reason for the exception.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" public InvalidFileFormatException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" // Call the constructor of the parent class (Exception) and provide the error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"eyelessrhyme7":18}},{"path":"src/main/java/duke/InvalidTaskCreationException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":" * The `InvalidTaskCreationException` class is a custom exception that is thrown when an error occurs during the creation of a task in the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":" * This exception is used to handle cases where task creation fails due to invalid input or other issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"public class InvalidTaskCreationException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" * Constructs a new `InvalidTaskCreationException` with the specified detail message.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" * @param message The detail message indicating the reason for the exception.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" public InvalidTaskCreationException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" // Call the constructor of the parent class (Exception) and provide the error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"eyelessrhyme7":18}},{"path":"src/main/java/duke/InvalidTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":" * The `InvalidTaskNumberException` class is a custom exception that is thrown when an invalid task number is encountered in the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":" * This exception is used to handle cases where an invalid task number is provided as input.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"public class InvalidTaskNumberException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" * Constructs a new `InvalidTaskNumberException` with the specified detail message.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" * @param message The detail message indicating the reason for the exception.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" public InvalidTaskNumberException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" // Call the constructor of the parent class (Exception) and provide the error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"eyelessrhyme7":18}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":" * The `Parser` class is responsible for parsing user input and extracting relevant information for processing in the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":" * Parses a user input string to extract the task number to mark as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" * @param userInput The user\u0027s input command.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" * @param list The task list to validate the task number against.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" * @return The task number to mark as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":" * @throws ParserException if parsing or validation fails.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":" public int parseMark(String userInput, TaskList list) throws ParserException {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":" int taskNo;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":" // Extract the task number from the user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"eyelessrhyme7"},"content":" taskNo \u003d Integer.parseInt(userInput.substring(5));","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"eyelessrhyme7"},"content":" // Check if the task number is within valid bounds.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"eyelessrhyme7"},"content":" if (taskNo \u003e list.getSize() | taskNo \u003c 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskNumberException(\"Please enter valid Task No. to mark!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"eyelessrhyme7"},"content":" throw new ParserException(\"Please enter valid Task No. (INTEGER) to mark in the format: \u0027mark 4\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidTaskNumberException d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"eyelessrhyme7"},"content":" throw new ParserException(\"Please enter valid Task No. to mark!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"eyelessrhyme7"},"content":" return taskNo;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"eyelessrhyme7"},"content":" * Parses a user input string to extract the task number to unmark as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"eyelessrhyme7"},"content":" * @param userInput The user\u0027s input command.","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"eyelessrhyme7"},"content":" * @param list The task list to validate the task number against.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"eyelessrhyme7"},"content":" * @return The task number to unmark as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"eyelessrhyme7"},"content":" * @throws ParserException if parsing or validation fails.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"eyelessrhyme7"},"content":" public int parseUnmark(String userInput, TaskList list) throws ParserException {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"eyelessrhyme7"},"content":" int taskNo;","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"eyelessrhyme7"},"content":" // Extract the task number from the user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"eyelessrhyme7"},"content":" taskNo \u003d Integer.parseInt(userInput.substring(7));","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"eyelessrhyme7"},"content":" // Check if the task number is within valid bounds.","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"eyelessrhyme7"},"content":" if (taskNo \u003e list.getSize() | taskNo \u003c 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskNumberException(\"Please enter valid Task No. to unmark!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"eyelessrhyme7"},"content":" throw new ParserException(\"Please enter valid Task No. (INTEGER) to unmark in the format: \u0027unmark 4\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidTaskNumberException d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"eyelessrhyme7"},"content":" throw new ParserException(\"Please enter valid Task No. to unmark!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"eyelessrhyme7"},"content":" return taskNo;","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"eyelessrhyme7"},"content":" * Parses a user input string to extract the task number to delete.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"eyelessrhyme7"},"content":" * @param userInput The user\u0027s input command.","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"eyelessrhyme7"},"content":" * @param list The task list to validate the task number against.","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"eyelessrhyme7"},"content":" * @return The task number to delete.","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"eyelessrhyme7"},"content":" * @throws ParserException if parsing or validation fails.","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"eyelessrhyme7"},"content":" public int parseDelete(String userInput, TaskList list) throws ParserException {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"eyelessrhyme7"},"content":" int taskNo;","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"eyelessrhyme7"},"content":" // Extract the task number from the user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"eyelessrhyme7"},"content":" taskNo \u003d Integer.parseInt(userInput.substring(7));","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"eyelessrhyme7"},"content":" // Check if the task number is within valid bounds.","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"eyelessrhyme7"},"content":" if (taskNo \u003e list.getSize() | taskNo \u003c 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskNumberException(\"Please enter valid Task No. to delete!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"eyelessrhyme7"},"content":" throw new ParserException(\"Please enter valid Task No. (INTEGER) to delete in the format: \u0027delete 4\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidTaskNumberException d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"eyelessrhyme7"},"content":" throw new ParserException(\"Please enter valid Task No. to delete!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"eyelessrhyme7"},"content":" return taskNo;","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"eyelessrhyme7"},"content":" public String parseFind(String userInput, TaskList list) throws ParserException {","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"eyelessrhyme7"},"content":" String queryString;","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"eyelessrhyme7"},"content":" queryString \u003d userInput.substring(5);","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"eyelessrhyme7"},"content":" throw new ParserException(\"Please enter valid Task No. (INTEGER) to delete in the format: \u0027delete 4\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"eyelessrhyme7"},"content":" return queryString;","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"eyelessrhyme7":101}},{"path":"src/main/java/duke/ParserException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":" * The `ParserException` class is a custom exception that is thrown when an error occurs during parsing user input in the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":" * This exception is used to handle parsing-related errors.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"public class ParserException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" * Constructs a new `ParserException` with the specified detail message.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" * @param message The detail message indicating the reason for the exception.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" public ParserException(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" super(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"eyelessrhyme7":17}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" * The `Storage` class handles the reading and writing of tasks from/to a data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" private String filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" * Constructs a new `Storage` instance with the specified file path.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" * @param filePath The file path where task data is stored.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"eyelessrhyme7"},"content":" * Loads tasks from the data file specified in the constructor.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"eyelessrhyme7"},"content":" * @return An ArrayList of Task objects representing the tasks loaded from the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"eyelessrhyme7"},"content":" * @throws IOException if there is an issue reading the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"eyelessrhyme7"},"content":" * @throws InvalidFileFormatException if the file contains tasks in an invalid format.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"eyelessrhyme7"},"content":" public ArrayList\u003cTask\u003e load() throws IOException, InvalidFileFormatException {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"eyelessrhyme7"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(this.filePath));","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"eyelessrhyme7"},"content":" String line;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"eyelessrhyme7"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"eyelessrhyme7"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"eyelessrhyme7"},"content":" switch (line.charAt(0)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"eyelessrhyme7"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"eyelessrhyme7"},"content":" String[] splitStringList \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"eyelessrhyme7"},"content":" if (splitStringList.length !\u003d 3) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidFileFormatException(\"Invalid format for Todo task in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"eyelessrhyme7"},"content":" String fabricatedUserInput \u003d \"todo \" + splitStringList[2];","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"eyelessrhyme7"},"content":" Task t;","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"eyelessrhyme7"},"content":" t \u003d Task.taskCon(fabricatedUserInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidCommandException | InvalidTaskCreationException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidFileFormatException(\"Invalid format for Todo task in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"eyelessrhyme7"},"content":" if (splitStringList[1].equals(\"1\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"eyelessrhyme7"},"content":" t.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"eyelessrhyme7"},"content":" taskList.add(t);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"eyelessrhyme7"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"eyelessrhyme7"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"eyelessrhyme7"},"content":" splitStringList \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"eyelessrhyme7"},"content":" if (splitStringList.length !\u003d 4) {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidFileFormatException(\"Invalid format for Deadline task in the\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"eyelessrhyme7"},"content":" \" file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"eyelessrhyme7"},"content":" fabricatedUserInput \u003d \"deadline \" + splitStringList[2] + \"/by \" + splitStringList[3];","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"eyelessrhyme7"},"content":" Task d;","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"eyelessrhyme7"},"content":" d \u003d Task.taskCon(fabricatedUserInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidCommandException | InvalidTaskCreationException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidFileFormatException(\"Invalid format for Deadline task in the\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"eyelessrhyme7"},"content":" \" file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"eyelessrhyme7"},"content":" if (splitStringList[1].equals(\"1\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"eyelessrhyme7"},"content":" d.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"eyelessrhyme7"},"content":" taskList.add(d);","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"eyelessrhyme7"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"eyelessrhyme7"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"eyelessrhyme7"},"content":" splitStringList \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"eyelessrhyme7"},"content":" if (splitStringList.length !\u003d 5) {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidFileFormatException(\"Invalid format for Event task in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"eyelessrhyme7"},"content":" fabricatedUserInput \u003d \"event \" + splitStringList[2] + \"/from \" + splitStringList[3] + \"/to \"","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"eyelessrhyme7"},"content":" + splitStringList[4];","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"eyelessrhyme7"},"content":" Task ev;","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"eyelessrhyme7"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"eyelessrhyme7"},"content":" ev \u003d Task.taskCon(fabricatedUserInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"eyelessrhyme7"},"content":" } catch (InvalidCommandException | InvalidTaskCreationException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidFileFormatException(\"Invalid format for Event task in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"eyelessrhyme7"},"content":" if (splitStringList[1].equals(\"1\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"eyelessrhyme7"},"content":" ev.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"eyelessrhyme7"},"content":" taskList.add(ev);","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"eyelessrhyme7"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"eyelessrhyme7"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"eyelessrhyme7"},"content":" // Handle invalid lines or raise an exception if needed.","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"eyelessrhyme7"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"eyelessrhyme7"},"content":" return taskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"eyelessrhyme7":111}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" * The `TaskList` class manages a list of tasks in the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":" private ArrayList\u003cTask\u003e taskArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" * Constructs an empty `TaskList`.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":" public TaskList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" this.taskArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":" * Constructs a `TaskList` with an existing ArrayList of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"eyelessrhyme7"},"content":" * @param taskArrayList The ArrayList containing tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"eyelessrhyme7"},"content":" public TaskList(ArrayList taskArrayList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"eyelessrhyme7"},"content":" this.taskArrayList \u003d taskArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"eyelessrhyme7"},"content":" * Gets a task at the specified index.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"eyelessrhyme7"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"eyelessrhyme7"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"eyelessrhyme7"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"eyelessrhyme7"},"content":" return this.taskArrayList.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"eyelessrhyme7"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"eyelessrhyme7"},"content":" * @param task The task to add.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"eyelessrhyme7"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"eyelessrhyme7"},"content":" this.taskArrayList.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"eyelessrhyme7"},"content":" * Deletes a task at the specified index and returns the deleted task.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"eyelessrhyme7"},"content":" * @param index The index of the task to delete.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"eyelessrhyme7"},"content":" * @return The deleted task.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"eyelessrhyme7"},"content":" public Task deleteTask(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"eyelessrhyme7"},"content":" Task x \u003d this.getTask(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"eyelessrhyme7"},"content":" this.taskArrayList.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"eyelessrhyme7"},"content":" return x;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"eyelessrhyme7"},"content":" * Gets the size of the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"eyelessrhyme7"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"eyelessrhyme7"},"content":" public int getSize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"eyelessrhyme7"},"content":" return this.taskArrayList.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"eyelessrhyme7"},"content":" * Converts the task list to a formatted string for display.","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"eyelessrhyme7"},"content":" * @return A formatted string representing the tasks in the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"eyelessrhyme7"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"eyelessrhyme7"},"content":" String botOutput \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"eyelessrhyme7"},"content":" for (int i \u003d 1; i \u003c\u003d this.taskArrayList.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"eyelessrhyme7"},"content":" botOutput \u003d botOutput + i + \".\" + \" \" + this.taskArrayList.get(i-1) + \"\\n \";","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"eyelessrhyme7"},"content":" return botOutput;","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"eyelessrhyme7"},"content":" * Filters and returns a TaskList containing tasks due within one week from the current date.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"eyelessrhyme7"},"content":" * @return A TaskList containing tasks due within one week.","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"eyelessrhyme7"},"content":" public TaskList dueWithinWeek() {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"eyelessrhyme7"},"content":" TaskList listWeek \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"eyelessrhyme7"},"content":" for (Task t: this.taskArrayList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"eyelessrhyme7"},"content":" LocalDateTime taskDueDate \u003d t.getUrgencyDate();","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"eyelessrhyme7"},"content":" LocalDateTime currentDate \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"eyelessrhyme7"},"content":" long daysDifference \u003d ChronoUnit.DAYS.between(currentDate, taskDueDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"eyelessrhyme7"},"content":" // Check if the task\u0027s due date is within one week of the current date (7 days)","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"eyelessrhyme7"},"content":" if (daysDifference \u003e\u003d 0 \u0026\u0026 daysDifference \u003c\u003d 7) {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"eyelessrhyme7"},"content":" listWeek.addTask(t);","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"eyelessrhyme7"},"content":" return listWeek;","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"eyelessrhyme7"},"content":" * Filters and returns a TaskList containing tasks due within one month from the current date.","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"eyelessrhyme7"},"content":" * @return A TaskList containing tasks due within one month.","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"eyelessrhyme7"},"content":" public TaskList dueWithinMonth() {","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"eyelessrhyme7"},"content":" TaskList listMonth \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"eyelessrhyme7"},"content":" for (Task t: this.taskArrayList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"eyelessrhyme7"},"content":" LocalDateTime taskDueDate \u003d t.getUrgencyDate();","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"eyelessrhyme7"},"content":" LocalDateTime currentDate \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"eyelessrhyme7"},"content":" long daysDifference \u003d ChronoUnit.DAYS.between(currentDate, taskDueDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"eyelessrhyme7"},"content":" // Check if the task\u0027s due date is within one week of the current date (7 days)","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"eyelessrhyme7"},"content":" if (daysDifference \u003e\u003d 0 \u0026\u0026 daysDifference \u003c\u003d 30) {","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"eyelessrhyme7"},"content":" listMonth.addTask(t);","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"eyelessrhyme7"},"content":" return listMonth;","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"eyelessrhyme7"},"content":" public TaskList searchMatches(String queryString) {","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"eyelessrhyme7"},"content":" TaskList listSearches \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"eyelessrhyme7"},"content":" for (Task t: this.taskArrayList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"eyelessrhyme7"},"content":" String taskDescription \u003d t.getDescription();","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"eyelessrhyme7"},"content":" // Check if the task\u0027s description contains the queryString","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"eyelessrhyme7"},"content":" if (taskDescription.contains(queryString)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"eyelessrhyme7"},"content":" listSearches.addTask(t);","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"eyelessrhyme7"},"content":" return listSearches;","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"eyelessrhyme7":134}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":" * The `Ui` class handles user interface-related functionality, including displaying messages and greetings.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":" private String greeting;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":" private String exitGreeting;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":" private String horizontalBar;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" private String logo;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":" * Constructs a new `Ui` instance with default greetings, horizontal bar, and logo.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" public Ui() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" this.greeting \u003d \"Hello, I\u0027m Capt. Price! What can I do for you today, Sergeant?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" this.exitGreeting \u003d \"Over and out. See you next mission!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":" this.horizontalBar \u003d \"-------------------------------------------------\";","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" this.logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"eyelessrhyme7"},"content":" * Constructs a new `Ui` instance with custom greetings, horizontal bar, and logo.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"eyelessrhyme7"},"content":" * @param greeting The custom greeting message.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"eyelessrhyme7"},"content":" * @param exitGreeting The custom exit greeting message.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"eyelessrhyme7"},"content":" * @param horizontalBar The custom horizontal bar string.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"eyelessrhyme7"},"content":" * @param logo The custom logo string.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"eyelessrhyme7"},"content":" public Ui(String greeting, String exitGreeting, String horizontalBar, String logo) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"eyelessrhyme7"},"content":" this.greeting \u003d greeting;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"eyelessrhyme7"},"content":" this.exitGreeting \u003d exitGreeting;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"eyelessrhyme7"},"content":" this.horizontalBar \u003d horizontalBar;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"eyelessrhyme7"},"content":" this.logo \u003d logo;","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"eyelessrhyme7"},"content":" * Formats a message with a horizontal bar and spaces for display.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"eyelessrhyme7"},"content":" * @param message The message to format.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"eyelessrhyme7"},"content":" * @return The formatted message.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"eyelessrhyme7"},"content":" private String botMessage(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"eyelessrhyme7"},"content":" String space \u003d \" \";","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"eyelessrhyme7"},"content":" return space + this.horizontalBar + \"\\n\" + space + message + \"\\n\" + space + this.horizontalBar;","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"eyelessrhyme7"},"content":" * Displays the greeting message.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"eyelessrhyme7"},"content":" public void displayGreeting() {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"eyelessrhyme7"},"content":" System.out.println(this.botMessage(this.greeting));","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"eyelessrhyme7"},"content":" * Displays the exit greeting message.","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"eyelessrhyme7"},"content":" public void displayExitGreeting() {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"eyelessrhyme7"},"content":" System.out.println(this.botMessage(this.exitGreeting));","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"eyelessrhyme7"},"content":" * Displays a message using the botMessage formatting.","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"eyelessrhyme7"},"content":" * @param message The message to display.","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"eyelessrhyme7"},"content":" public void displayMessage(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"eyelessrhyme7"},"content":" System.out.println(botMessage(message));","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"eyelessrhyme7":74}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"import duke.InvalidTaskCreationException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":" * The `Deadline` class represents a task with a specific deadline in the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" * It is a subclass of the `Task` class.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" * Constructs a new `Deadline` task with the specified description and deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":" * @param by The deadline of the task as a LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"eyelessrhyme7"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"eyelessrhyme7"},"content":" * Parses user input and creates a `Deadline` task.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"eyelessrhyme7"},"content":" * @param description The description of the `Deadline` task.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"eyelessrhyme7"},"content":" * @param by The deadline as a string to be parsed into a LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"eyelessrhyme7"},"content":" * @return A `Deadline` task instance.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"eyelessrhyme7"},"content":" * @throws InvalidTaskCreationException if the description or deadline is empty.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"eyelessrhyme7"},"content":" * @throws DateTimeParseException if there is an issue parsing the deadline string to LocalDateTime.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"eyelessrhyme7"},"content":" public static Deadline DeadlineCon(String description, String by) throws InvalidTaskCreationException,","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"eyelessrhyme7"},"content":" DateTimeParseException {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"eyelessrhyme7"},"content":" if (description.equalsIgnoreCase(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskCreationException(\"OOPS!!! The description of a Deadline Task cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (by.equalsIgnoreCase(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskCreationException(\"OOPS!!! The deadline time of a Deadline Task cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"eyelessrhyme7"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"eyelessrhyme7"},"content":" LocalDateTime deadlineDate \u003d LocalDateTime.parse(by, Task.DTformatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"eyelessrhyme7"},"content":" return new Deadline(description, deadlineDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"eyelessrhyme7"},"content":" * Gets the urgency date and time for the `Deadline` task, which is the deadline itself.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"eyelessrhyme7"},"content":" * @return The urgency date and time (deadline).","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"eyelessrhyme7"},"content":" public LocalDateTime getUrgencyDate() {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"eyelessrhyme7"},"content":" return this.by;","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"eyelessrhyme7"},"content":" * Converts the `Deadline` task to a formatted string representation for display.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"eyelessrhyme7"},"content":" * @return A formatted string representing the `Deadline` task.","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"eyelessrhyme7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"eyelessrhyme7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"eyelessrhyme7"},"content":" // Format the LocalDateTime object to a string","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"eyelessrhyme7"},"content":" String formattedDate \u003d this.by.format(Task.outputFormatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"eyelessrhyme7"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formattedDate + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"eyelessrhyme7":69}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"import duke.InvalidTaskCreationException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":" * The `Event` class represents a task with a specific event time range in the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" * It is a subclass of the `Task` class.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":" * Constructs a new `Event` task with the specified description and event time range.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":" * @param from The start time of the event as a LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":" * @param to The end time of the event as a LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"eyelessrhyme7"},"content":" public Event (String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"eyelessrhyme7"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"eyelessrhyme7"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"eyelessrhyme7"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"eyelessrhyme7"},"content":" * Parses user input and creates an `Event` task.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"eyelessrhyme7"},"content":" * @param description The description of the `Event` task.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"eyelessrhyme7"},"content":" * @param from The start time of the event as a string to be parsed into a LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"eyelessrhyme7"},"content":" * @param to The end time of the event as a string to be parsed into a LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"eyelessrhyme7"},"content":" * @return An `Event` task instance.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"eyelessrhyme7"},"content":" * @throws InvalidTaskCreationException if the description, start time, or end time is empty.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"eyelessrhyme7"},"content":" * @throws DateTimeParseException if there is an issue parsing the start or end time strings to LocalDateTime.","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"eyelessrhyme7"},"content":" public static Event EventCon(String description, String from, String to) throws InvalidTaskCreationException,","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"eyelessrhyme7"},"content":" DateTimeParseException {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"eyelessrhyme7"},"content":" if (description.equalsIgnoreCase(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskCreationException(\"OOPS!!! The description of a Event Task cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (from.equalsIgnoreCase(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskCreationException(\"OOPS!!! The from time of a Event Task cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (to.equalsIgnoreCase(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskCreationException(\"OOPS!!! The to time of a Event Task cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"eyelessrhyme7"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"eyelessrhyme7"},"content":" LocalDateTime eventStartTimeDate \u003d LocalDateTime.parse(from, Task.DTformatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"eyelessrhyme7"},"content":" LocalDateTime eventEndTimeDate \u003d LocalDateTime.parse(to, Task.DTformatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"eyelessrhyme7"},"content":" return new Event(description, eventStartTimeDate, eventEndTimeDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"eyelessrhyme7"},"content":" * Gets the urgency date and time for the `Event` task, which is the start time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"eyelessrhyme7"},"content":" * @return The urgency date and time (start time).","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"eyelessrhyme7"},"content":" public LocalDateTime getUrgencyDate() {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"eyelessrhyme7"},"content":" return this.from;","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"eyelessrhyme7"},"content":" * Converts the `Event` task to a formatted string representation for display.","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"eyelessrhyme7"},"content":" * @return A formatted string representing the `Event` task.","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"eyelessrhyme7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"eyelessrhyme7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"eyelessrhyme7"},"content":" String formattedDateFrom \u003d this.from.format(Task.outputFormatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"eyelessrhyme7"},"content":" String formattedDateTo \u003d this.to.format(Task.outputFormatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"eyelessrhyme7"},"content":" return \"[E]\" + super.toString() + \" (from: \" + formattedDateFrom + \" to: \" + formattedDateTo + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"eyelessrhyme7":76}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"import duke.InvalidCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"import duke.InvalidTaskCreationException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" * The `Task` class represents a task in the Duke application. It serves as the base class for different types of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":" * Constructs a new `Task` with the specified description.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"eyelessrhyme7"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"eyelessrhyme7"},"content":" // Date and Time formats","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"eyelessrhyme7"},"content":" public static final String dateFormat \u003d \"yyyy-MM-dd\";","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"eyelessrhyme7"},"content":" public static final String dateTimeFormat \u003d \"yyyy-MM-dd HH:mm:ss\";","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"eyelessrhyme7"},"content":" public static final DateTimeFormatter DTformatter \u003d DateTimeFormatter.ofPattern(dateTimeFormat);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"eyelessrhyme7"},"content":" public static final DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"HH:mm, dd MMMM yyyy\");","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"eyelessrhyme7"},"content":" * Parses user input and creates a specific type of task (Todo, Deadline, or Event).","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"eyelessrhyme7"},"content":" * @param userInput The user input to parse.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"eyelessrhyme7"},"content":" * @return An instance of a specific task type (Todo, Deadline, or Event).","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"eyelessrhyme7"},"content":" * @throws InvalidCommandException if the user input does not match any valid command.","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"eyelessrhyme7"},"content":" * @throws InvalidTaskCreationException if there is an issue creating the task from the input.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"eyelessrhyme7"},"content":" * @throws DateTimeParseException if there is an issue parsing date and time.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"eyelessrhyme7"},"content":" public static Task taskCon(String userInput) throws InvalidCommandException, InvalidTaskCreationException,","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"eyelessrhyme7"},"content":" DateTimeParseException {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"eyelessrhyme7"},"content":" if (userInput.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"eyelessrhyme7"},"content":" return ToDo.ToDoCon(userInput.substring(5));","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (userInput.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"eyelessrhyme7"},"content":" String[] splitInput \u003d userInput.split(\"/by\");","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"eyelessrhyme7"},"content":" String taskDescription \u003d splitInput[0].substring(9).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"eyelessrhyme7"},"content":" String deadline \u003d splitInput[1].trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"eyelessrhyme7"},"content":" return Deadline.DeadlineCon(taskDescription, deadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"eyelessrhyme7"},"content":" } else if (userInput.startsWith(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"eyelessrhyme7"},"content":" String[] splitInput \u003d userInput.split(\"/from\");","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"eyelessrhyme7"},"content":" String taskDescription \u003d splitInput[0].substring(6).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"eyelessrhyme7"},"content":" String[] eventDetails \u003d splitInput[1].split(\"/to\");","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"eyelessrhyme7"},"content":" String eventStartTime \u003d eventDetails[0].trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"eyelessrhyme7"},"content":" String eventEndTime \u003d eventDetails[1].trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"eyelessrhyme7"},"content":" return Event.EventCon(taskDescription, eventStartTime, eventEndTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"eyelessrhyme7"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidCommandException(\"Invalid command to add task!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"eyelessrhyme7"},"content":" * Gets the urgency date and time for the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"eyelessrhyme7"},"content":" * @return The urgency date and time.","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"eyelessrhyme7"},"content":" public LocalDateTime getUrgencyDate() {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"eyelessrhyme7"},"content":" return LocalDateTime.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"eyelessrhyme7"},"content":" ","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"eyelessrhyme7"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"eyelessrhyme7"},"content":" return this.description;","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"eyelessrhyme7"},"content":" * Gets the status icon for the task (either \"X\" for done or \" \" for not done).","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"eyelessrhyme7"},"content":" * @return The status icon.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"eyelessrhyme7"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"eyelessrhyme7"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"eyelessrhyme7"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"eyelessrhyme7"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"eyelessrhyme7"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"eyelessrhyme7"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"eyelessrhyme7"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"eyelessrhyme7"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"eyelessrhyme7"},"content":" * Converts the task to a formatted string representation for display.","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"eyelessrhyme7"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"eyelessrhyme7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"eyelessrhyme7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"eyelessrhyme7"},"content":" return \"[\" + getStatusIcon() + \"]\" + \" \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"eyelessrhyme7":114}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"import duke.InvalidTaskCreationException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":" * The `ToDo` class represents a simple task without a specific deadline or event time range in the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":" * It is a subclass of the `Task` class.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" * Constructs a new `ToDo` task with the specified description.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":" * Parses user input and creates a `ToDo` task.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"eyelessrhyme7"},"content":" * @param description The description of the `ToDo` task.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"eyelessrhyme7"},"content":" * @return A `ToDo` task instance.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"eyelessrhyme7"},"content":" * @throws InvalidTaskCreationException if the description is empty.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"eyelessrhyme7"},"content":" public static ToDo ToDoCon(String description) throws InvalidTaskCreationException {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"eyelessrhyme7"},"content":" if (description.equalsIgnoreCase(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"eyelessrhyme7"},"content":" throw new InvalidTaskCreationException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"eyelessrhyme7"},"content":" return new ToDo(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"eyelessrhyme7"},"content":" * Gets the urgency date and time for the `ToDo` task, which is the current date and time.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"eyelessrhyme7"},"content":" * @return The urgency date and time (current date and time).","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"eyelessrhyme7"},"content":" public LocalDateTime getUrgencyDate() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"eyelessrhyme7"},"content":" return LocalDateTime.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"eyelessrhyme7"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"eyelessrhyme7"},"content":" * Converts the `ToDo` task to a formatted string representation for display.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"eyelessrhyme7"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"eyelessrhyme7"},"content":" * @return A formatted string representing the `ToDo` task.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"eyelessrhyme7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"eyelessrhyme7"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"eyelessrhyme7"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"eyelessrhyme7"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"eyelessrhyme7":54}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"import org.junit.jupiter.api.DisplayName;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":"class ParserTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" @DisplayName(\"Test assert ParserException in parseMark (when invalid Task number passed)\")","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" public void parseMark_invalidTaskNo_throwsParserException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":" Exception parserException \u003d assertThrows(duke.ParserException.class,","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" () -\u003e new Parser().parseMark(\"mark 6\", new TaskList()));","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" assertEquals(\"Please enter valid Task No. to mark!\", parserException.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":" @DisplayName(\"Test assert ParserException in parseMark (when non-int argument passed)\")","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" public void parseMark_nonIntArgument_throwsParserException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":" Exception parserException \u003d assertThrows(duke.ParserException.class,","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":" () -\u003e new Parser().parseMark(\"mark f\", new TaskList()));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":" assertEquals(\"Please enter valid Task No. (INTEGER) to mark in the format: \u0027mark 4\u0027\",","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":" parserException.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"eyelessrhyme7"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"eyelessrhyme7"},"content":" @DisplayName(\"Test assert ParserException in parseMark (when non-int argument passed)\")","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"eyelessrhyme7"},"content":" public void parseDelete_nonIntArgument_throwsParserException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"eyelessrhyme7"},"content":" Exception parserException \u003d assertThrows(duke.ParserException.class,","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"eyelessrhyme7"},"content":" () -\u003e new Parser().parseDelete(\"delete f\", new TaskList()));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"eyelessrhyme7"},"content":" assertEquals(\"Please enter valid Task No. (INTEGER) to delete in the format: \u0027delete 4\u0027\",","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"eyelessrhyme7"},"content":" parserException.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"eyelessrhyme7":36}},{"path":"src/test/java/duke/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"eyelessrhyme7"},"content":"import org.junit.jupiter.api.DisplayName;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"eyelessrhyme7"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"eyelessrhyme7"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"eyelessrhyme7"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"eyelessrhyme7"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"eyelessrhyme7"},"content":" @DisplayName(\"Test assert Todo Creation\")","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"eyelessrhyme7"},"content":" public void creation() {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"eyelessrhyme7"},"content":" ToDo todo1 \u003d new ToDo(\"Read notes\");","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"eyelessrhyme7"},"content":" ToDo todo2\u003d new ToDo(\"Read notes\");","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"eyelessrhyme7"},"content":" assertEquals(todo1.toString(), todo2.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"eyelessrhyme7"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"eyelessrhyme7"},"content":" @DisplayName(\"Test assert Todo UrgencyDate\")","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"eyelessrhyme7"},"content":" public void urgencyDate() {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"eyelessrhyme7"},"content":" ToDo todo1 \u003d new ToDo(\"Complete Quiz\");","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"eyelessrhyme7"},"content":" ToDo todo2\u003d new ToDo(\"Complete Quiz 4\");","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"eyelessrhyme7"},"content":" assertEquals(todo1.getUrgencyDate().getHour(), todo2.getUrgencyDate().getHour());","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"eyelessrhyme7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"eyelessrhyme7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"eyelessrhyme7"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"eyelessrhyme7":25}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"eyelessrhyme7"},"content":"todo quiz","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"eyelessrhyme7"},"content":"deadline lab /by Monday 7pm","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"eyelessrhyme7"},"content":"event sharing /from Monday 7pm /to Friday 10pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"eyelessrhyme7"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"eyelessrhyme7":4}}] diff --git a/eyelessrhyme7_ip_master/commits.json b/eyelessrhyme7_ip_master/commits.json index c175ea0c..dc7f1c28 100644 --- a/eyelessrhyme7_ip_master/commits.json +++ b/eyelessrhyme7_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"eyelessrhyme7":[{"date":"2023-08-24","commitResults":[{"hash":"ec79d492718e646acc4fdd640401230a0df3e0b0","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"914792eeae1b17a23f7a20206b3c1d4c0448be9e","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":6}}},{"hash":"179d389710bc355a667db0b7abe84c22a2b79025","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":1}}},{"hash":"564b6048d1f5ea42cd3aa824661919a6f60aa5c0","isMergeCommit":false,"messageTitle":"Completed Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":2}}},{"hash":"016aa16e1f3f1926782d5828887b38b2388742e7","isMergeCommit":false,"messageTitle":"Completed Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":2}}},{"hash":"1336e499ad0cae98e001eb1b4e5dec6b22c2fa67","isMergeCommit":false,"messageTitle":"Completed A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"61c54815d959f59be61acc0675aac3a142956e2f","isMergeCommit":false,"messageTitle":"Completed Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":8}}},{"hash":"b51ea7f41827ffa021d142834bc342641b26a2f9","isMergeCommit":false,"messageTitle":"Completed Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"024a99d66f90ac5187ddf259112bfb96dcd74763","isMergeCommit":false,"messageTitle":"Completed Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":189,"deletions":82}}},{"hash":"2b4f15c96a4d95af3a88856374866558dd0b3302","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"eyelessrhyme7":{"java":360,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":8}},"authorContributionVariance":{"eyelessrhyme7":8062.643},"authorDisplayNameMap":{"eyelessrhyme7":"CS2103T-W15-1 GUPT..AMAN"}} +{"authorDailyContributionsMap":{"eyelessrhyme7":[{"date":"2023-08-24","commitResults":[{"hash":"ec79d492718e646acc4fdd640401230a0df3e0b0","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"914792eeae1b17a23f7a20206b3c1d4c0448be9e","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":6}}},{"hash":"179d389710bc355a667db0b7abe84c22a2b79025","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":1}}},{"hash":"564b6048d1f5ea42cd3aa824661919a6f60aa5c0","isMergeCommit":false,"messageTitle":"Completed Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":2}}},{"hash":"016aa16e1f3f1926782d5828887b38b2388742e7","isMergeCommit":false,"messageTitle":"Completed Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":2}}},{"hash":"1336e499ad0cae98e001eb1b4e5dec6b22c2fa67","isMergeCommit":false,"messageTitle":"Completed A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"61c54815d959f59be61acc0675aac3a142956e2f","isMergeCommit":false,"messageTitle":"Completed Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":8}}},{"hash":"b51ea7f41827ffa021d142834bc342641b26a2f9","isMergeCommit":false,"messageTitle":"Completed Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"024a99d66f90ac5187ddf259112bfb96dcd74763","isMergeCommit":false,"messageTitle":"Completed Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":189,"deletions":82}}},{"hash":"2b4f15c96a4d95af3a88856374866558dd0b3302","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e3c8aa188dad1edb57c13b91c8abf6cafb453385","isMergeCommit":false,"messageTitle":"Completed Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":107,"deletions":14}}},{"hash":"9688471ea1d60d81f352a5b8adb11197c4c8a9a1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"6d5899f7b3239b06cd3b38b9c54a73c88627df1d","isMergeCommit":false,"messageTitle":"Completed A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":318,"deletions":199}}},{"hash":"45fdf7e203378e0e702f81fb607c9d1b48824062","isMergeCommit":false,"messageTitle":"Completed A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":31}}},{"hash":"f02a2ce1ff9195ef57f8611e2c184dfd1b21ef04","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/eyelessrhyme7/ip into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8d86fb4ec1a68fd301bb8c2d06c5082425e491d6","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"a3c5875f906c13330d6124bec7f7a5f4b8524779","isMergeCommit":false,"messageTitle":"Completed A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":9}}},{"hash":"0b23071083b9d37c17231e8a3a807545d6f618c3","isMergeCommit":false,"messageTitle":"Completed A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":24}}},{"hash":"6ef8a4e385f6318e7d486ee52c6785ffe5646531","isMergeCommit":false,"messageTitle":"Completed A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":409,"deletions":7}}},{"hash":"d2411801b245e3fd27c73037981f4e6ad956dd22","isMergeCommit":false,"messageTitle":"Completed Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":3}}},{"hash":"7e90b5240bd62fd89bcf448a8eeba422bce567a8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"693a583973d0f657271246531fc3dc83b827cb6f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ccbb502aca94c8a6b58c64a5d68e8286130e7b53","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"eyelessrhyme7":{"java":1116,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":10}},"authorContributionVariance":{"eyelessrhyme7":79391.36},"authorDisplayNameMap":{"eyelessrhyme7":"CS2103T-W15-1 GUPT..AMAN"}} diff --git a/geraldngjx_ip_master/authorship.json b/geraldngjx_ip_master/authorship.json index 1a2cbe46..b2e5ab2f 100644 --- a/geraldngjx_ip_master/authorship.json +++ b/geraldngjx_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":"geraldngjx"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"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":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-28"},{"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":"geraldngjx"},"content":"// mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" mainClassName(\"geraldbot/Launcher\")","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"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":{"geraldngjx":22,"-":41}},{"path":"src/main/java/geraldbot/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"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":"geraldngjx"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"geraldngjx"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"geraldngjx"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"geraldngjx"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"geraldngjx"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"geraldngjx"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"geraldngjx":61}},{"path":"src/main/java/geraldbot/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.util.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.util.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.util.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" * The main class that represents the Duke chatbot application.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" * Duke is a task manager that can handle various commands to manage tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":"public class Duke {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" private final Parser parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" * Constructs a Duke object and initializes the user interface and parser.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" * Reads task data from storage and initializes the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" public Duke() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d new Storage(\"./data/data.txt\");","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d storage.read();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" this.parser \u003d new Parser(storage, taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" * Main method to start the Duke chatbot application.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" * @param args Command-line arguments (not used).","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" Duke bot \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" bot.run();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":" String response \u003d parser.parse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" return response;","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":" return e.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"geraldngjx"},"content":" * Runs the main loop of the Duke application.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"geraldngjx"},"content":" * The loop repeatedly reads user input, processes it using the parser,","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"geraldngjx"},"content":" * and displays the corresponding output or error messages.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"geraldngjx"},"content":" public void run() {","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"geraldngjx"},"content":" ui.showLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"geraldngjx"},"content":" ui.greet();","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"geraldngjx"},"content":" ui.showLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"geraldngjx"},"content":" while (true) {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"geraldngjx"},"content":" String input \u003d ui.readInput();","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"geraldngjx"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"geraldngjx"},"content":" ui.showLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"geraldngjx"},"content":" ui.bye();","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"geraldngjx"},"content":" ui.showLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"geraldngjx"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"geraldngjx"},"content":" ui.showLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"geraldngjx"},"content":" parser.parse(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"geraldngjx"},"content":" ui.showLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"geraldngjx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"geraldngjx"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"geraldngjx"},"content":" ui.showLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":80,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":82,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"geraldngjx":81,"-":1}},{"path":"src/main/java/geraldbot/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"geraldngjx":12}},{"path":"src/main/java/geraldbot/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"geraldngjx":31}},{"path":"src/main/java/geraldbot/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" private Duke duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"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":39,"author":{"gitId":"geraldngjx"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"geraldngjx":51}},{"path":"src/main/java/geraldbot/exception/DukeEmptyParametersException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents an exception thrown when a user doesn\u0027t provide the date/time for a Deadline/Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class DukeEmptyParametersException extends DukeException {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" * Constructs a DukeEmptyParametersException with a default error message when user does not input a date/time.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" public DukeEmptyParametersException() {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but you did not input a specific date/time for the Deadline/Event task! :-(\");","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":14}},{"path":"src/main/java/geraldbot/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents a custom exception specific to Duke application.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" * Constructs a DukeException with the specified error message.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":16}},{"path":"src/main/java/geraldbot/exception/DukeInvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents an exception thrown when an invalid command is provided by the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class DukeInvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" * Constructs a DukeInvalidCommandException with a valid command but with invalid usage.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" * @param command The command that caused the exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" public DukeInvalidCommandException(String command) {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" super(\"☹ OOPS!!! The description of a \" + command + \" cannot be empty.\");","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" * Constructs a DukeInvalidCommandException with a default error message for an unknown command.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" public DukeInvalidCommandException() {","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":23}},{"path":"src/main/java/geraldbot/exception/DukeInvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents an exception thrown when an invalid date or time is provided by the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class DukeInvalidDateException extends DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" * Constructs a DukeInvalidDateException with a default error message for an invalid date/time.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" public DukeInvalidDateException() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" super(\"☹ OOPS!!! The selected date/time is invalid.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"geraldngjx":14}},{"path":"src/main/java/geraldbot/exception/DukeInvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents an exception thrown when an invalid index is provided by the user for a task.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class DukeInvalidIndexException extends DukeException {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" * Constructs a DukeInvalidIndexException with a custom error message indicating the invalid index.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" * @param size The size of the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" public DukeInvalidIndexException(Integer size) {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but index is invalid! There are \" + size + \" tasks in the list! :-(\");","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":16}},{"path":"src/main/java/geraldbot/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":" * Represents a task with a deadline in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" * Constructs a `Deadline` task with the specified description, completion status, and deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" public Deadline(String description, boolean isDone, LocalDateTime by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" * Returns the formatted file representation of the `Deadline` task.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" * @return The file format representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" public String fileFormat() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" return \"D \" + super.fileFormat() + \" | \" + this.by;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" * Returns the string representation of the `Deadline` task.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" String formattedBy \u003d by.format(DateTimeFormatter.ofPattern(\"d MMMM yyyy, h:mma\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formattedBy + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":45}},{"path":"src/main/java/geraldbot/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents an event task in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" protected String start;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" protected String end;","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" * Constructs an `Event` task with the specified description, completion status, start time, and end time.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" * @param start The start time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" * @param end The end time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" public Event(String description, boolean isDone, String start, String end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" * Returns the formatted file representation of the `Event` task.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" * @return The file format representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" public String fileFormat() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" return \"E \" + super.fileFormat() + \" | \" + this.start + \"-\" + this.end;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" * Returns the string representation of the `Event` task.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" return \"[E]\" + super.toString() + \" (from: \" + start + \" \" + \"to: \" + end + \")\";","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":44}},{"path":"src/main/java/geraldbot/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents a task in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" * Constructs a task with the specified description and completion status.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" * Toggles the completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" public void toggleCompletion() {","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" this.isDone \u003d !this.isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" return this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" * Returns the status icon representing the completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" * @return The status icon (\"X\" for done, \" \" for not done).","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" * Returns the file format representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":" * @return The file format representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":" public String fileFormat() {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" String output \u003d \"| \" + (isDone ? \"1\" : \"0\") + \" | \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"geraldngjx"},"content":" return output;","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"geraldngjx"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"geraldngjx"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"geraldngjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"geraldngjx"},"content":" String output \u003d \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"geraldngjx"},"content":" return output;","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":66}},{"path":"src/main/java/geraldbot/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents a to-do task in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" * Constructs a to-do task with the specified description and completion status.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" * @param isDone The completion status of the to-do task.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" * Returns the file format representation of the to-do task.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" * @return The file format representation of the to-do task.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" public String fileFormat() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" return \"T \" + super.fileFormat();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" * Returns the string representation of the to-do task.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" * @return The string representation of the to-do task.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":37}},{"path":"src/main/java/geraldbot/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.util;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.exception.DukeEmptyParametersException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.exception.DukeInvalidCommandException;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.exception.DukeInvalidDateException;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.exception.DukeInvalidIndexException;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" * The Parser class handles the parsing of user input and the execution of corresponding actions","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" * based on the parsed commands. It interacts with the Storage and TaskList classes to manage tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" private final TaskList lst;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" private enum TaskType {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" TODO,","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" DEADLINE,","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" EVENT","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" * Initializes a new Parser instance with the provided storage and task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" * @param storage The storage instance used for reading and writing tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" * @param taskList The task list containing the tasks to be processed.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" public Parser(Storage storage, ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" this.lst \u003d new TaskList(taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":" * Parses the user input and executes the corresponding actions.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" * @param input The user input to be parsed and processed.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" * @throws DukeException If an error occurs during parsing or execution.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":" public String parse(String input) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" return this.printList();","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"geraldngjx"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"geraldngjx"},"content":" if (input.replaceAll(\"\\\\s\", \"\").equals(input)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(\"find\");","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"geraldngjx"},"content":" String keyword \u003d input.substring(input.indexOf(\"find\") + 5).trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"geraldngjx"},"content":" return findTasks(keyword);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"geraldngjx"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"geraldngjx"},"content":" if (input.replaceAll(\"\\\\s\", \"\").equals(input)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(\"mark\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"geraldngjx"},"content":" String[] parsedString \u003d input.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"geraldngjx"},"content":" int num \u003d Integer.parseInt(parsedString[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"geraldngjx"},"content":" if (num \u003e lst.size() || num \u003c\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidIndexException(lst.size());","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"geraldngjx"},"content":" Task selectedTask \u003d lst.get(num - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"geraldngjx"},"content":" String message \u003d this.markCompletion(selectedTask, num);","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"geraldngjx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidIndexException(lst.size());","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"geraldngjx"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"geraldngjx"},"content":" if (input.replaceAll(\"\\\\s\", \"\").equals(input)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(\"unmark\");","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"geraldngjx"},"content":" String[] parsedString \u003d input.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"geraldngjx"},"content":" int num \u003d Integer.parseInt(parsedString[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"geraldngjx"},"content":" if (num \u003e lst.size() || num \u003c\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidIndexException(lst.size());","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"geraldngjx"},"content":" Task selectedTask \u003d lst.get(num - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"geraldngjx"},"content":" String message \u003d this.unmarkCompletion(selectedTask, num);","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"geraldngjx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidIndexException(lst.size());","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"geraldngjx"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"geraldngjx"},"content":" if (input.replaceAll(\"\\\\s\", \"\").equals(input)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(\"delete\");","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"geraldngjx"},"content":" String[] parsedString \u003d input.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"geraldngjx"},"content":" int num \u003d Integer.parseInt(parsedString[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"geraldngjx"},"content":" if (num \u003e lst.size() || num \u003c\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidIndexException(lst.size());","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"geraldngjx"},"content":" String message \u003d this.deleteTask(num);","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"geraldngjx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidIndexException(lst.size());","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"geraldngjx"},"content":" Parser.TaskType taskType;","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"geraldngjx"},"content":" if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"geraldngjx"},"content":" taskType \u003d Parser.TaskType.TODO;","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"geraldngjx"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"geraldngjx"},"content":" taskType \u003d Parser.TaskType.DEADLINE;","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"geraldngjx"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"geraldngjx"},"content":" taskType \u003d Parser.TaskType.EVENT;","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"geraldngjx"},"content":" taskType \u003d null;","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"geraldngjx"},"content":" if (taskType \u003d\u003d Parser.TaskType.TODO) {","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"geraldngjx"},"content":" if (input.replaceAll(\"\\\\s\", \"\").equals(input)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(\"todo\");","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"geraldngjx"},"content":" String command \u003d input.substring(0, input.indexOf(\u0027 \u0027));","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"geraldngjx"},"content":" String description \u003d input.substring(input.indexOf(\u0027 \u0027) + 1).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"geraldngjx"},"content":" if (description.equals(\"\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(command);","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"geraldngjx"},"content":" String message \u003d this.addTodo(description, false);","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"geraldngjx"},"content":" } else if (taskType \u003d\u003d Parser.TaskType.DEADLINE) {","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"geraldngjx"},"content":" if (input.replaceAll(\"\\\\s\", \"\").equals(input)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(\"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"geraldngjx"},"content":" String command \u003d input.substring(0, input.indexOf(\u0027 \u0027));","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"geraldngjx"},"content":" String task \u003d input.substring(input.indexOf(\u0027 \u0027) + 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"geraldngjx"},"content":" String[] parsedTask \u003d task.split(\"/\", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"geraldngjx"},"content":" String description \u003d parsedTask[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"geraldngjx"},"content":" if (parsedTask.length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"geraldngjx"},"content":" throw new DukeEmptyParametersException();","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"geraldngjx"},"content":" String by \u003d parsedTask[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"geraldngjx"},"content":" LocalDateTime deadlineDate \u003d parseDate(by);","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"geraldngjx"},"content":" if (description.equals(\"\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(command);","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"geraldngjx"},"content":" } else if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidDateException();","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":163,"author":{"gitId":"geraldngjx"},"content":" String message \u003d this.addDeadline(description, false, deadlineDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"geraldngjx"},"content":" } else if (taskType \u003d\u003d Parser.TaskType.EVENT) {","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"geraldngjx"},"content":" if (input.replaceAll(\"\\\\s\", \"\").equals(input)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(\"event\");","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":171,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"geraldngjx"},"content":" String command \u003d input.substring(0, input.indexOf(\u0027 \u0027));","lastModifiedDate":"2023-08-27"},{"lineNumber":173,"author":{"gitId":"geraldngjx"},"content":" String task \u003d input.substring(input.indexOf(\u0027 \u0027) + 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"geraldngjx"},"content":" String[] parsedTask \u003d task.split(\"/\");","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":176,"author":{"gitId":"geraldngjx"},"content":" if (parsedTask.length \u003c 3) {","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"geraldngjx"},"content":" throw new DukeEmptyParametersException();","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":180,"author":{"gitId":"geraldngjx"},"content":" String description \u003d parsedTask[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":181,"author":{"gitId":"geraldngjx"},"content":" String start \u003d parsedTask[1].substring(parsedTask[1].indexOf(\u0027 \u0027) + 1).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":182,"author":{"gitId":"geraldngjx"},"content":" String by \u003d parsedTask[2].substring(parsedTask[2].indexOf(\u0027 \u0027) + 1).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"geraldngjx"},"content":" if (description.equals(\"\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(command);","lastModifiedDate":"2023-08-27"},{"lineNumber":185,"author":{"gitId":"geraldngjx"},"content":" } else if (start.equals(\"\") || by.equals(\"\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":186,"author":{"gitId":"geraldngjx"},"content":" throw new DukeEmptyParametersException();","lastModifiedDate":"2023-08-27"},{"lineNumber":187,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":188,"author":{"gitId":"geraldngjx"},"content":" String message \u003d this.addEvent(description, false, start, by);","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":190,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":191,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":192,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException();","lastModifiedDate":"2023-08-27"},{"lineNumber":193,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":194,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":195,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":196,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":197,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":198,"author":{"gitId":"geraldngjx"},"content":" * Parses a date string and returns a LocalDateTime object.","lastModifiedDate":"2023-08-28"},{"lineNumber":199,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":200,"author":{"gitId":"geraldngjx"},"content":" * @param dateStr The date string to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":201,"author":{"gitId":"geraldngjx"},"content":" * @return A LocalDateTime object representing the parsed date.","lastModifiedDate":"2023-08-28"},{"lineNumber":202,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":203,"author":{"gitId":"geraldngjx"},"content":" private LocalDateTime parseDate(String dateStr) {","lastModifiedDate":"2023-08-27"},{"lineNumber":204,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":205,"author":{"gitId":"geraldngjx"},"content":" String[] parts \u003d dateStr.split(\"\\\\s+\", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":206,"author":{"gitId":"geraldngjx"},"content":" String dateString \u003d parts.length \u003e 1 ? parts[1] : parts[0]; // Use the second part if available","lastModifiedDate":"2023-08-27"},{"lineNumber":207,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":208,"author":{"gitId":"geraldngjx"},"content":" return LocalDateTime.parse(dateString, DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":209,"author":{"gitId":"geraldngjx"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":210,"author":{"gitId":"geraldngjx"},"content":" return null;","lastModifiedDate":"2023-08-27"},{"lineNumber":211,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":212,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":213,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":214,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":215,"author":{"gitId":"geraldngjx"},"content":" * Adds a new todo task to the task list and storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":216,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":217,"author":{"gitId":"geraldngjx"},"content":" * @param input The description of the todo task.","lastModifiedDate":"2023-08-28"},{"lineNumber":218,"author":{"gitId":"geraldngjx"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":219,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":220,"author":{"gitId":"geraldngjx"},"content":" public String addTodo(String input, boolean isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":221,"author":{"gitId":"geraldngjx"},"content":" Todo newTask \u003d new Todo(input, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":222,"author":{"gitId":"geraldngjx"},"content":" String newTaskString \u003d newTask.fileFormat();","lastModifiedDate":"2023-08-27"},{"lineNumber":223,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":224,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"Got it. I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":225,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + newTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":226,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":227,"author":{"gitId":"geraldngjx"},"content":" lst.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":228,"author":{"gitId":"geraldngjx"},"content":" storage.addTask(newTaskString);","lastModifiedDate":"2023-08-27"},{"lineNumber":229,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":230,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\nNow you have \" + lst.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":231,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":232,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":233,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":234,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":235,"author":{"gitId":"geraldngjx"},"content":" * Adds a new deadline task to the task list and storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":236,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":237,"author":{"gitId":"geraldngjx"},"content":" * @param input The description of the deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":238,"author":{"gitId":"geraldngjx"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":239,"author":{"gitId":"geraldngjx"},"content":" * @param by The deadline in LocalDateTime format of that task.","lastModifiedDate":"2023-08-28"},{"lineNumber":240,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":241,"author":{"gitId":"geraldngjx"},"content":" public String addDeadline(String input, boolean isDone, LocalDateTime by) {","lastModifiedDate":"2023-09-04"},{"lineNumber":242,"author":{"gitId":"geraldngjx"},"content":" Deadline newTask \u003d new Deadline(input, isDone, by);","lastModifiedDate":"2023-08-27"},{"lineNumber":243,"author":{"gitId":"geraldngjx"},"content":" String newTaskString \u003d newTask.fileFormat();","lastModifiedDate":"2023-08-27"},{"lineNumber":244,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":245,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"Got it. I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":246,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + newTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":247,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":248,"author":{"gitId":"geraldngjx"},"content":" lst.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":249,"author":{"gitId":"geraldngjx"},"content":" storage.addTask(newTaskString);","lastModifiedDate":"2023-08-27"},{"lineNumber":250,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":251,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\nNow you have \" + lst.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":252,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":253,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":254,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":255,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":256,"author":{"gitId":"geraldngjx"},"content":" * Adds a new event task to the task list and storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":257,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":258,"author":{"gitId":"geraldngjx"},"content":" * @param input The description of the event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":259,"author":{"gitId":"geraldngjx"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":260,"author":{"gitId":"geraldngjx"},"content":" * @param start The start time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":261,"author":{"gitId":"geraldngjx"},"content":" * @param end The end time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":262,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":263,"author":{"gitId":"geraldngjx"},"content":" public String addEvent(String input, boolean isDone, String start, String end) {","lastModifiedDate":"2023-09-04"},{"lineNumber":264,"author":{"gitId":"geraldngjx"},"content":" Event newTask \u003d new Event(input, isDone, start, end);","lastModifiedDate":"2023-08-27"},{"lineNumber":265,"author":{"gitId":"geraldngjx"},"content":" String newTaskString \u003d newTask.fileFormat();","lastModifiedDate":"2023-08-27"},{"lineNumber":266,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":267,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"Got it. I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":268,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + newTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":269,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":270,"author":{"gitId":"geraldngjx"},"content":" lst.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":271,"author":{"gitId":"geraldngjx"},"content":" storage.addTask(newTaskString);","lastModifiedDate":"2023-08-27"},{"lineNumber":272,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":273,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\nNow you have \" + lst.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":274,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":275,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":276,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":277,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":278,"author":{"gitId":"geraldngjx"},"content":" * Prints the list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":279,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":280,"author":{"gitId":"geraldngjx"},"content":" public String printList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":281,"author":{"gitId":"geraldngjx"},"content":" String taskList \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":282,"author":{"gitId":"geraldngjx"},"content":" for (int i \u003d 0; i \u003c lst.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":283,"author":{"gitId":"geraldngjx"},"content":" taskList +\u003d (i + 1) + \". \" + lst.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":284,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":285,"author":{"gitId":"geraldngjx"},"content":" return taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":286,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":287,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":288,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":289,"author":{"gitId":"geraldngjx"},"content":" * Marks a task as done and updates the storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":290,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":291,"author":{"gitId":"geraldngjx"},"content":" * @param task The task to be marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":292,"author":{"gitId":"geraldngjx"},"content":" * @param num The index of the task in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":293,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":294,"author":{"gitId":"geraldngjx"},"content":" public String markCompletion(Task task, int num) {","lastModifiedDate":"2023-09-04"},{"lineNumber":295,"author":{"gitId":"geraldngjx"},"content":" if (task.getStatusIcon().equals(\"X\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":296,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":297,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":298,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":299,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":300,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":301,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":302,"author":{"gitId":"geraldngjx"},"content":" task.toggleCompletion();","lastModifiedDate":"2023-08-27"},{"lineNumber":303,"author":{"gitId":"geraldngjx"},"content":" String updatedTaskString \u003d task.fileFormat();","lastModifiedDate":"2023-08-27"},{"lineNumber":304,"author":{"gitId":"geraldngjx"},"content":" this.storage.updateTask(num - 1, updatedTaskString);","lastModifiedDate":"2023-08-27"},{"lineNumber":305,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":306,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":307,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":308,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":309,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":310,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":311,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":312,"author":{"gitId":"geraldngjx"},"content":" * Removes the completion status of a task and updates the storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":313,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":314,"author":{"gitId":"geraldngjx"},"content":" * @param task The task to be marked as not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":315,"author":{"gitId":"geraldngjx"},"content":" * @param num The index of the task in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":316,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":317,"author":{"gitId":"geraldngjx"},"content":" public String unmarkCompletion(Task task, int num) {","lastModifiedDate":"2023-09-04"},{"lineNumber":318,"author":{"gitId":"geraldngjx"},"content":" if (task.getStatusIcon().equals(\" \")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":319,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":320,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":321,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":322,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":323,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":324,"author":{"gitId":"geraldngjx"},"content":" task.toggleCompletion();","lastModifiedDate":"2023-08-27"},{"lineNumber":325,"author":{"gitId":"geraldngjx"},"content":" String updatedTaskString \u003d task.fileFormat();","lastModifiedDate":"2023-08-27"},{"lineNumber":326,"author":{"gitId":"geraldngjx"},"content":" this.storage.updateTask(num - 1, updatedTaskString);","lastModifiedDate":"2023-08-27"},{"lineNumber":327,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":328,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":329,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":330,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":331,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":332,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":333,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":334,"author":{"gitId":"geraldngjx"},"content":" * Deletes a task from the task list and updates the storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":335,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":336,"author":{"gitId":"geraldngjx"},"content":" * @param num The index of the task in the task list to be deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":337,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":338,"author":{"gitId":"geraldngjx"},"content":" public String deleteTask(Integer num) {","lastModifiedDate":"2023-09-04"},{"lineNumber":339,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"Noted. I\u0027ve removed this task:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":340,"author":{"gitId":"geraldngjx"},"content":" Task selectedTask \u003d lst.remove(num - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":341,"author":{"gitId":"geraldngjx"},"content":" this.storage.updateTask(num - 1, null);","lastModifiedDate":"2023-08-27"},{"lineNumber":342,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":343,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + selectedTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":344,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\nNow you have \" + lst.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":345,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":346,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":347,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":348,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":349,"author":{"gitId":"geraldngjx"},"content":" * Finds tasks that match a specified keyword and displays them.","lastModifiedDate":"2023-08-28"},{"lineNumber":350,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":351,"author":{"gitId":"geraldngjx"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-08-28"},{"lineNumber":352,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":353,"author":{"gitId":"geraldngjx"},"content":" private String findTasks(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":354,"author":{"gitId":"geraldngjx"},"content":" List\u003cTask\u003e matchingTasks \u003d lst.findTasksByKeyword(keyword);","lastModifiedDate":"2023-08-28"},{"lineNumber":355,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":356,"author":{"gitId":"geraldngjx"},"content":" String taskList \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":357,"author":{"gitId":"geraldngjx"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":358,"author":{"gitId":"geraldngjx"},"content":" taskList +\u003d (i + 1) + \". \" + matchingTasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":359,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":360,"author":{"gitId":"geraldngjx"},"content":" return taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":361,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":362,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"geraldngjx":362}},{"path":"src/main/java/geraldbot/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.util;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" * Handles reading and writing tasks to the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" private File file;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" * Constructor for Storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" * @param path The path to the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" public Storage(String path) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" this.file \u003d new File(path);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" createFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" * Returns the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" * @return The storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" public File getFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" return this.file;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":" * Creates a new file if it does not exist and also creates parent directories if needed.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" private void createFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" File parentFolder \u003d this.file.getParentFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":" if (!parentFolder.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":" parentFolder.mkdirs();","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"geraldngjx"},"content":" if (this.file.createNewFile()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"geraldngjx"},"content":" System.out.println(\"File has been created successfully: \" + this.file.getPath());","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"geraldngjx"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"geraldngjx"},"content":" System.out.println(\"There is an error creating the file.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"geraldngjx"},"content":" * Reads tasks from the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"geraldngjx"},"content":" * @return An ArrayList of Task objects.","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"geraldngjx"},"content":" public ArrayList\u003cTask\u003e read() {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"geraldngjx"},"content":" Scanner sc \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"geraldngjx"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"geraldngjx"},"content":" String[] line \u003d sc.nextLine().split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"geraldngjx"},"content":" String[] task \u003d new String[line.length];","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"geraldngjx"},"content":" for (int i \u003d 0; i \u003c line.length; i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"geraldngjx"},"content":" task[i] \u003d line[i].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"geraldngjx"},"content":" if (task[0].equals(\"T\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"geraldngjx"},"content":" taskList.add(new Todo(task[2], task[1].equals(\"1\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"geraldngjx"},"content":" } else if (task[0].equals(\"D\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"geraldngjx"},"content":" LocalDateTime deadline \u003d LocalDateTime.parse(task[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"geraldngjx"},"content":" taskList.add(new Deadline(task[2], task[1].equals(\"1\"), deadline));","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"geraldngjx"},"content":" } else if (task[0].equals(\"E\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"geraldngjx"},"content":" String[] timeframe \u003d task[3].split(\"-\");","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"geraldngjx"},"content":" taskList.add(new Event(task[2], task[1].equals(\"1\"), timeframe[0], timeframe[1]));","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"geraldngjx"},"content":" System.out.println(\"Unknown task type: \" + task[0]);","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"geraldngjx"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"geraldngjx"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"geraldngjx"},"content":" createFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"geraldngjx"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"geraldngjx"},"content":" * Adds a task in file format to the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"geraldngjx"},"content":" * @param fileFormat The formatted task to add.","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"geraldngjx"},"content":" public void addTask(String fileFormat) {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"geraldngjx"},"content":" FileWriter fw \u003d new FileWriter(this.file, true);","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"geraldngjx"},"content":" if (this.file.length() !\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"geraldngjx"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"geraldngjx"},"content":" fw.write(fileFormat);","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"geraldngjx"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"geraldngjx"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"geraldngjx"},"content":" * Updates a task in the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"geraldngjx"},"content":" * @param index The index of the task to update.","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"geraldngjx"},"content":" * @param updatedFile The updated task in file format.","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"geraldngjx"},"content":" public void updateTask(int index, String updatedFile) {","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"geraldngjx"},"content":" Scanner sc \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cString\u003e updatedTaskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"geraldngjx"},"content":" int idx \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"geraldngjx"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"geraldngjx"},"content":" String currTask \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"geraldngjx"},"content":" if (idx !\u003d index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"geraldngjx"},"content":" updatedTaskList.add(currTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"geraldngjx"},"content":" if (updatedFile !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"geraldngjx"},"content":" updatedTaskList.add(updatedFile);","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"geraldngjx"},"content":" idx++;","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"geraldngjx"},"content":" sc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"geraldngjx"},"content":" FileWriter fw \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"geraldngjx"},"content":" fw.write(String.join(\"\\n\", updatedTaskList));","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"geraldngjx"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"geraldngjx"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"geraldngjx":159}},{"path":"src/main/java/geraldbot/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.util;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" * Constructs a TaskList with the given list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" * @param taskList The initial list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" * Removes and returns the task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" * @param idx The index of the task to be removed.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" * @return The removed task.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" public Task remove(int idx) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" Task removedTask \u003d this.taskList.remove(idx);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" return removedTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":" * Returns the task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" * @param idx The index of the task to be retrieved.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":" public Task get(int idx) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":" Task selectedTask \u003d this.taskList.get(idx);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" return selectedTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"geraldngjx"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"geraldngjx"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"geraldngjx"},"content":" public int size() {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"geraldngjx"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"geraldngjx"},"content":" * Finds tasks in the list that match the specified keyword in their descriptions.","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"geraldngjx"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"geraldngjx"},"content":" * @return A list of tasks matching the keyword.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"geraldngjx"},"content":" public List\u003cTask\u003e findTasksByKeyword(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"geraldngjx"},"content":" return taskList.stream()","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"geraldngjx"},"content":" .filter(task -\u003e task.getDescription().contains(keyword))","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"geraldngjx"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"geraldngjx":75}},{"path":"src/main/java/geraldbot/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.util;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":" * Represents the user interface for interacting with GeraldBot.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" private final String line \u003d \"_____________________________________________________\";","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" private Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" * Greets the user with a welcome message.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" public void greet() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" System.out.println(\"Hello! I\u0027m GeraldBot\\n\" + \"What can I do for you?\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" * Displays a farewell message.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" public void bye() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" * Displays a horizontal line separator.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" public void showLine() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" * Reads user input from the console.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" * @return The input provided by the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" public String readInput() {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" String input \u003d this.sc.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" return input;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"geraldngjx":43}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"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":"geraldngjx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"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":12,"author":{"gitId":"geraldngjx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"geraldngjx":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"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\"geraldbot.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"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":12,"author":{"gitId":"geraldngjx"},"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":13,"author":{"gitId":"geraldngjx"},"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":14,"author":{"gitId":"geraldngjx"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"geraldngjx":19}},{"path":"src/test/java/geraldbot/util/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.util;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.exception.DukeInvalidCommandException;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" public void parse_todoCommand_successfullyAdded() {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d new Storage(\"testData/testStorageData.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" Parser parser \u003d new Parser(storage, taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" String input \u003d \"todo Buy groceries\";","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" assertDoesNotThrow(() -\u003e parser.parse(input));","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" assertTrue(taskList.get(0) instanceof Todo);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" public void parse_deadlineCommand_successfullyAdded() {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d new Storage(\"testData/testStorageData.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" Parser parser \u003d new Parser(storage, taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" String input \u003d \"deadline Submit report /by 16/03/2020 1800\";","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" assertDoesNotThrow(() -\u003e parser.parse(input));","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":" assertTrue(taskList.get(0) instanceof Deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" public void parse_eventCommand_successfullyAdded() {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d new Storage(\"testData/testStorageData.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":" Parser parser \u003d new Parser(storage, taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" String input \u003d \"event Team meeting /Monday 2pm/ 4pm\";","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"geraldngjx"},"content":" assertDoesNotThrow(() -\u003e parser.parse(input));","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"geraldngjx"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"geraldngjx"},"content":" assertTrue(taskList.get(0) instanceof Event);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"geraldngjx"},"content":" public void parse_invalidCommand_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d new Storage(\"testData/testStorageData.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"geraldngjx"},"content":" Parser parser \u003d new Parser(storage, taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"geraldngjx"},"content":" String input \u003d \"invalid_command\";","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"geraldngjx"},"content":" assertThrows(DukeInvalidCommandException.class, () -\u003e parser.parse(input));","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"geraldngjx"},"content":" public void parse_emptyDescription_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d new Storage(\"testData/testStorageData.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"geraldngjx"},"content":" Parser parser \u003d new Parser(storage, taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"geraldngjx"},"content":" String input \u003d \"todo \";","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"geraldngjx"},"content":" assertThrows(DukeInvalidCommandException.class, () -\u003e parser.parse(input));","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"geraldngjx":78}},{"path":"src/test/java/geraldbot/util/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.util;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" public void read_emptyFile_emptyTaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d initializeStorage();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d storage.read();","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" assertTrue(taskList.isEmpty());","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" public void read_existingFile_correctTaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d initializeStorage();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cString\u003e testData \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" testData.add(\"T | 1 | Buy groceries\");","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" testData.add(\"D | 0 | Submit report | 2023-08-31T18:00\");","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" testData.add(\"E | 0 | Team meeting | 2023-08-27T14:00-16:00\");","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" StorageTest.writeTestDataToFile(storage, testData);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" fail(\"Failed to write test data to file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d storage.read();","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" assertEquals(3, taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" assertTrue(taskList.get(0) instanceof Todo);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":" assertTrue(taskList.get(1) instanceof Deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" assertTrue(taskList.get(2) instanceof Event);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" public void addTask_validTask_successfullyAdded() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d initializeStorage();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":" Task newTask \u003d new Todo(\"Read a book\", false);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" String fileFormat \u003d newTask.fileFormat();","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"geraldngjx"},"content":" storage.addTask(fileFormat);","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d storage.read();","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"geraldngjx"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"geraldngjx"},"content":" public void updateTask_validIndex_updatedSuccessfully() {","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d initializeStorage();","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cString\u003e testData \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"geraldngjx"},"content":" testData.add(\"T | 0 | Buy groceries\");","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"geraldngjx"},"content":" StorageTest.writeTestDataToFile(storage, testData);","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"geraldngjx"},"content":" fail(\"Failed to write test data to file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"geraldngjx"},"content":" String updatedTaskFileFormat \u003d \"T | 1 | Buy groceries\";","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"geraldngjx"},"content":" storage.updateTask(0, updatedTaskFileFormat);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d storage.read();","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"geraldngjx"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"geraldngjx"},"content":" assertEquals(\"X\", taskList.get(0).getStatusIcon());","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"geraldngjx"},"content":" private Storage initializeStorage() {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"geraldngjx"},"content":" String testFilePath \u003d \"./testData/testStorageData.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d new Storage(testFilePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"geraldngjx"},"content":" File file \u003d storage.getFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"geraldngjx"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"geraldngjx"},"content":" fw.write(\"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"geraldngjx"},"content":" fw.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"geraldngjx"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"geraldngjx"},"content":" return storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"geraldngjx"},"content":" private static void writeTestDataToFile(Storage storage, ArrayList\u003cString\u003e testData) throws IOException {","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"geraldngjx"},"content":" File testFile \u003d new File(storage.getFile().getPath());","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"geraldngjx"},"content":" if (!testFile.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"geraldngjx"},"content":" testFile.getParentFile().mkdirs();","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"geraldngjx"},"content":" testFile.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"geraldngjx"},"content":" FileWriter fw \u003d new FileWriter(testFile);","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"geraldngjx"},"content":" fw.write(String.join(\"\\n\", testData));","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"geraldngjx"},"content":" fw.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"geraldngjx":107}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"blah","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"mark 99","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"deadline return book","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"delete","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"delete 0","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":"delete 3","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":12}}] +[{"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":"geraldngjx"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"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":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-28"},{"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":"geraldngjx"},"content":"// mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" mainClassName(\"geraldbot/Launcher\")","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"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":{"geraldngjx":22,"-":41}},{"path":"src/main/java/geraldbot/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"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":"geraldngjx"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"geraldngjx"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"geraldngjx"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"geraldngjx"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"geraldngjx"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"geraldngjx"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"geraldngjx":61}},{"path":"src/main/java/geraldbot/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.util.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.util.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" * The main class that represents the Duke chatbot application.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" * Duke is a task manager that can handle various commands to manage tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"public class Duke {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" private final Parser parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" * Constructs a Duke object and initializes the user interface and parser.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" * Reads task data from storage and initializes the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" public Duke() {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d new Storage(\"./data/data.txt\");","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d storage.read();","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" this.parser \u003d new Parser(storage, taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" String response \u003d parser.parse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" return response;","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" return e.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"geraldngjx":38,"-":1}},{"path":"src/main/java/geraldbot/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"geraldngjx":12}},{"path":"src/main/java/geraldbot/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"geraldngjx":31}},{"path":"src/main/java/geraldbot/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" private Duke duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"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":39,"author":{"gitId":"geraldngjx"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"geraldngjx":51}},{"path":"src/main/java/geraldbot/exception/DukeEmptyParametersException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents an exception thrown when a user doesn\u0027t provide the date/time for a Deadline/Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class DukeEmptyParametersException extends DukeException {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" * Constructs a DukeEmptyParametersException with a default error message when user does not input a date/time.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" public DukeEmptyParametersException() {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but you did not input a specific date/time for the Deadline/Event task! :-(\");","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":14}},{"path":"src/main/java/geraldbot/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents a custom exception specific to Duke application.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" * Constructs a DukeException with the specified error message.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":16}},{"path":"src/main/java/geraldbot/exception/DukeInvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents an exception thrown when an invalid command is provided by the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class DukeInvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" * Constructs a DukeInvalidCommandException with a valid command but with invalid usage.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" * @param command The command that caused the exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" public DukeInvalidCommandException(String command) {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" super(\"☹ OOPS!!! The description of a \" + command + \" cannot be empty.\");","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" * Constructs a DukeInvalidCommandException with a default error message for an unknown command.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" public DukeInvalidCommandException() {","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":23}},{"path":"src/main/java/geraldbot/exception/DukeInvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents an exception thrown when an invalid date or time is provided by the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class DukeInvalidDateException extends DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" * Constructs a DukeInvalidDateException with a default error message for an invalid date/time.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" public DukeInvalidDateException() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" super(\"☹ OOPS!!! The selected date/time is invalid.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"geraldngjx":14}},{"path":"src/main/java/geraldbot/exception/DukeInvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents an exception thrown when an invalid index is provided by the user for a task.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class DukeInvalidIndexException extends DukeException {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" * Constructs a DukeInvalidIndexException with a custom error message indicating the invalid index.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" * @param size The size of the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" public DukeInvalidIndexException(Integer size) {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but index is invalid! There are \" + size + \" tasks in the list! :-(\");","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":16}},{"path":"src/main/java/geraldbot/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":" * Represents a task with a deadline in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" * Constructs a `Deadline` task with the specified description, completion status, and deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" public Deadline(String description, boolean isDone, LocalDateTime by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" * Returns the formatted file representation of the `Deadline` task.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" * @return The file format representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" public String fileFormat() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" return \"D \" + super.fileFormat() + \" | \" + this.by;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" * Returns the string representation of the `Deadline` task.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" String formattedBy \u003d by.format(DateTimeFormatter.ofPattern(\"d MMMM yyyy, h:mma\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formattedBy + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":45}},{"path":"src/main/java/geraldbot/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents an event task in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" protected String start;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" protected String end;","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" * Constructs an `Event` task with the specified description, completion status, start time, and end time.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" * @param start The start time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" * @param end The end time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" public Event(String description, boolean isDone, String start, String end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" * Returns the formatted file representation of the `Event` task.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" * @return The file format representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" public String fileFormat() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" return \"E \" + super.fileFormat() + \" | \" + this.start + \"-\" + this.end;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" * Returns the string representation of the `Event` task.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" return \"[E]\" + super.toString() + \" (from: \" + start + \" \" + \"to: \" + end + \")\";","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":44}},{"path":"src/main/java/geraldbot/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents a task in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" * Constructs a task with the specified description and completion status.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" * Toggles the completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" public void toggleCompletion() {","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" this.isDone \u003d !this.isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" return this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" * Returns the status icon representing the completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" * @return The status icon (\"X\" for done, \" \" for not done).","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" * Returns the file format representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":" * @return The file format representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":" public String fileFormat() {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" String output \u003d \"| \" + (isDone ? \"1\" : \"0\") + \" | \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"geraldngjx"},"content":" return output;","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"geraldngjx"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"geraldngjx"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"geraldngjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"geraldngjx"},"content":" String output \u003d \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"geraldngjx"},"content":" return output;","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":66}},{"path":"src/main/java/geraldbot/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":" * Represents a to-do task in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" * Constructs a to-do task with the specified description and completion status.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" * @param isDone The completion status of the to-do task.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" * Returns the file format representation of the to-do task.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" * @return The file format representation of the to-do task.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" public String fileFormat() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" return \"T \" + super.fileFormat();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" * Returns the string representation of the to-do task.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" * @return The string representation of the to-do task.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":37}},{"path":"src/main/java/geraldbot/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.util;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.exception.DukeEmptyParametersException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.exception.DukeInvalidCommandException;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.exception.DukeInvalidDateException;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.exception.DukeInvalidIndexException;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" * The Parser class handles the parsing of user input and the execution of corresponding actions","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" * based on the parsed commands. It interacts with the Storage and TaskList classes to manage tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" private final TaskList lst;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" private enum TaskType {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" TODO,","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" DEADLINE,","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" EVENT","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" * Initializes a new Parser instance with the provided storage and task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" * @param storage The storage instance used for reading and writing tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" * @param taskList The task list containing the tasks to be processed.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" public Parser(Storage storage, ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":" this.lst \u003d new TaskList(taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" * Parses the user input and executes the corresponding actions.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":" * @param input The user input to be parsed and processed.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":" * @throws DukeException If an error occurs during parsing or execution.","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"geraldngjx"},"content":" public String parse(String input) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"geraldngjx"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"geraldngjx"},"content":" return this.printList();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"geraldngjx"},"content":" } else if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"geraldngjx"},"content":" return this.ui.bye();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"geraldngjx"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"geraldngjx"},"content":" if (input.replaceAll(\"\\\\s\", \"\").equals(input)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(\"find\");","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"geraldngjx"},"content":" String keyword \u003d input.substring(input.indexOf(\"find\") + 5).trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"geraldngjx"},"content":" return findTasks(keyword);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"geraldngjx"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"geraldngjx"},"content":" if (input.replaceAll(\"\\\\s\", \"\").equals(input)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(\"mark\");","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"geraldngjx"},"content":" String[] parsedString \u003d input.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"geraldngjx"},"content":" int num \u003d Integer.parseInt(parsedString[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"geraldngjx"},"content":" if (num \u003e lst.size() || num \u003c\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidIndexException(lst.size());","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"geraldngjx"},"content":" Task selectedTask \u003d lst.get(num - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"geraldngjx"},"content":" String message \u003d this.markCompletion(selectedTask, num);","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"geraldngjx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidIndexException(lst.size());","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"geraldngjx"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"geraldngjx"},"content":" if (input.replaceAll(\"\\\\s\", \"\").equals(input)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(\"unmark\");","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"geraldngjx"},"content":" String[] parsedString \u003d input.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"geraldngjx"},"content":" int num \u003d Integer.parseInt(parsedString[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"geraldngjx"},"content":" if (num \u003e lst.size() || num \u003c\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidIndexException(lst.size());","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"geraldngjx"},"content":" Task selectedTask \u003d lst.get(num - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"geraldngjx"},"content":" String message \u003d this.unmarkCompletion(selectedTask, num);","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"geraldngjx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidIndexException(lst.size());","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"geraldngjx"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"geraldngjx"},"content":" if (input.replaceAll(\"\\\\s\", \"\").equals(input)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(\"delete\");","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"geraldngjx"},"content":" String[] parsedString \u003d input.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"geraldngjx"},"content":" int num \u003d Integer.parseInt(parsedString[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"geraldngjx"},"content":" if (num \u003e lst.size() || num \u003c\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidIndexException(lst.size());","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"geraldngjx"},"content":" String message \u003d this.deleteTask(num);","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"geraldngjx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidIndexException(lst.size());","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"geraldngjx"},"content":" Parser.TaskType taskType;","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"geraldngjx"},"content":" if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"geraldngjx"},"content":" taskType \u003d Parser.TaskType.TODO;","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"geraldngjx"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"geraldngjx"},"content":" taskType \u003d Parser.TaskType.DEADLINE;","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"geraldngjx"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"geraldngjx"},"content":" taskType \u003d Parser.TaskType.EVENT;","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"geraldngjx"},"content":" taskType \u003d null;","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"geraldngjx"},"content":" if (taskType \u003d\u003d Parser.TaskType.TODO) {","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"geraldngjx"},"content":" if (input.replaceAll(\"\\\\s\", \"\").equals(input)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(\"todo\");","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"geraldngjx"},"content":" String command \u003d input.substring(0, input.indexOf(\u0027 \u0027));","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"geraldngjx"},"content":" String description \u003d input.substring(input.indexOf(\u0027 \u0027) + 1).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"geraldngjx"},"content":" if (description.equals(\"\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(command);","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"geraldngjx"},"content":" String message \u003d this.addTodo(description, false);","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"geraldngjx"},"content":" } else if (taskType \u003d\u003d Parser.TaskType.DEADLINE) {","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"geraldngjx"},"content":" if (input.replaceAll(\"\\\\s\", \"\").equals(input)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(\"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"geraldngjx"},"content":" String command \u003d input.substring(0, input.indexOf(\u0027 \u0027));","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"geraldngjx"},"content":" String task \u003d input.substring(input.indexOf(\u0027 \u0027) + 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"geraldngjx"},"content":" String[] parsedTask \u003d task.split(\"/\", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"geraldngjx"},"content":" String description \u003d parsedTask[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"geraldngjx"},"content":" if (parsedTask.length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"geraldngjx"},"content":" throw new DukeEmptyParametersException();","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"geraldngjx"},"content":" String by \u003d parsedTask[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"geraldngjx"},"content":" LocalDateTime deadlineDate \u003d parseDate(by);","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":163,"author":{"gitId":"geraldngjx"},"content":" if (description.equals(\"\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":164,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(command);","lastModifiedDate":"2023-08-27"},{"lineNumber":165,"author":{"gitId":"geraldngjx"},"content":" } else if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidDateException();","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"geraldngjx"},"content":" String message \u003d this.addDeadline(description, false, deadlineDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":171,"author":{"gitId":"geraldngjx"},"content":" } else if (taskType \u003d\u003d Parser.TaskType.EVENT) {","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":173,"author":{"gitId":"geraldngjx"},"content":" if (input.replaceAll(\"\\\\s\", \"\").equals(input)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(\"event\");","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":176,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"geraldngjx"},"content":" String command \u003d input.substring(0, input.indexOf(\u0027 \u0027));","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"geraldngjx"},"content":" String task \u003d input.substring(input.indexOf(\u0027 \u0027) + 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"geraldngjx"},"content":" String[] parsedTask \u003d task.split(\"/\");","lastModifiedDate":"2023-08-27"},{"lineNumber":180,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":181,"author":{"gitId":"geraldngjx"},"content":" if (parsedTask.length \u003c 3) {","lastModifiedDate":"2023-08-27"},{"lineNumber":182,"author":{"gitId":"geraldngjx"},"content":" throw new DukeEmptyParametersException();","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":185,"author":{"gitId":"geraldngjx"},"content":" String description \u003d parsedTask[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":186,"author":{"gitId":"geraldngjx"},"content":" String start \u003d parsedTask[1].substring(parsedTask[1].indexOf(\u0027 \u0027) + 1).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":187,"author":{"gitId":"geraldngjx"},"content":" String by \u003d parsedTask[2].substring(parsedTask[2].indexOf(\u0027 \u0027) + 1).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":188,"author":{"gitId":"geraldngjx"},"content":" if (description.equals(\"\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":189,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException(command);","lastModifiedDate":"2023-08-27"},{"lineNumber":190,"author":{"gitId":"geraldngjx"},"content":" } else if (start.equals(\"\") || by.equals(\"\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":191,"author":{"gitId":"geraldngjx"},"content":" throw new DukeEmptyParametersException();","lastModifiedDate":"2023-08-27"},{"lineNumber":192,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":193,"author":{"gitId":"geraldngjx"},"content":" String message \u003d this.addEvent(description, false, start, by);","lastModifiedDate":"2023-09-04"},{"lineNumber":194,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":196,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":197,"author":{"gitId":"geraldngjx"},"content":" throw new DukeInvalidCommandException();","lastModifiedDate":"2023-08-27"},{"lineNumber":198,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":199,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":200,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":201,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":202,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":203,"author":{"gitId":"geraldngjx"},"content":" * Parses a date string and returns a LocalDateTime object.","lastModifiedDate":"2023-08-28"},{"lineNumber":204,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":205,"author":{"gitId":"geraldngjx"},"content":" * @param dateStr The date string to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":206,"author":{"gitId":"geraldngjx"},"content":" * @return A LocalDateTime object representing the parsed date.","lastModifiedDate":"2023-08-28"},{"lineNumber":207,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":208,"author":{"gitId":"geraldngjx"},"content":" private LocalDateTime parseDate(String dateStr) {","lastModifiedDate":"2023-08-27"},{"lineNumber":209,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":210,"author":{"gitId":"geraldngjx"},"content":" String[] parts \u003d dateStr.split(\"\\\\s+\", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":211,"author":{"gitId":"geraldngjx"},"content":" String dateString \u003d parts.length \u003e 1 ? parts[1] : parts[0]; // Use the second part if available","lastModifiedDate":"2023-08-27"},{"lineNumber":212,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":213,"author":{"gitId":"geraldngjx"},"content":" return LocalDateTime.parse(dateString, DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":214,"author":{"gitId":"geraldngjx"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":215,"author":{"gitId":"geraldngjx"},"content":" return null;","lastModifiedDate":"2023-08-27"},{"lineNumber":216,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":217,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":218,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":219,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":220,"author":{"gitId":"geraldngjx"},"content":" * Adds a new todo task to the task list and storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":221,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":222,"author":{"gitId":"geraldngjx"},"content":" * @param input The description of the todo task.","lastModifiedDate":"2023-08-28"},{"lineNumber":223,"author":{"gitId":"geraldngjx"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":224,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":225,"author":{"gitId":"geraldngjx"},"content":" public String addTodo(String input, boolean isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":226,"author":{"gitId":"geraldngjx"},"content":" Todo newTask \u003d new Todo(input, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":227,"author":{"gitId":"geraldngjx"},"content":" String newTaskString \u003d newTask.fileFormat();","lastModifiedDate":"2023-08-27"},{"lineNumber":228,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":229,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"Got it. I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":230,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + newTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":231,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":232,"author":{"gitId":"geraldngjx"},"content":" lst.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":233,"author":{"gitId":"geraldngjx"},"content":" storage.addTask(newTaskString);","lastModifiedDate":"2023-08-27"},{"lineNumber":234,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":235,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\nNow you have \" + lst.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":236,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":237,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":238,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":239,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":240,"author":{"gitId":"geraldngjx"},"content":" * Adds a new deadline task to the task list and storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":241,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":242,"author":{"gitId":"geraldngjx"},"content":" * @param input The description of the deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":243,"author":{"gitId":"geraldngjx"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":244,"author":{"gitId":"geraldngjx"},"content":" * @param by The deadline in LocalDateTime format of that task.","lastModifiedDate":"2023-08-28"},{"lineNumber":245,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":246,"author":{"gitId":"geraldngjx"},"content":" public String addDeadline(String input, boolean isDone, LocalDateTime by) {","lastModifiedDate":"2023-09-04"},{"lineNumber":247,"author":{"gitId":"geraldngjx"},"content":" Deadline newTask \u003d new Deadline(input, isDone, by);","lastModifiedDate":"2023-08-27"},{"lineNumber":248,"author":{"gitId":"geraldngjx"},"content":" String newTaskString \u003d newTask.fileFormat();","lastModifiedDate":"2023-08-27"},{"lineNumber":249,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":250,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"Got it. I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":251,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + newTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":252,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":253,"author":{"gitId":"geraldngjx"},"content":" lst.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":254,"author":{"gitId":"geraldngjx"},"content":" storage.addTask(newTaskString);","lastModifiedDate":"2023-08-27"},{"lineNumber":255,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":256,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\nNow you have \" + lst.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":257,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":258,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":259,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":260,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":261,"author":{"gitId":"geraldngjx"},"content":" * Adds a new event task to the task list and storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":262,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":263,"author":{"gitId":"geraldngjx"},"content":" * @param input The description of the event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":264,"author":{"gitId":"geraldngjx"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":265,"author":{"gitId":"geraldngjx"},"content":" * @param start The start time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":266,"author":{"gitId":"geraldngjx"},"content":" * @param end The end time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":267,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":268,"author":{"gitId":"geraldngjx"},"content":" public String addEvent(String input, boolean isDone, String start, String end) {","lastModifiedDate":"2023-09-04"},{"lineNumber":269,"author":{"gitId":"geraldngjx"},"content":" Event newTask \u003d new Event(input, isDone, start, end);","lastModifiedDate":"2023-08-27"},{"lineNumber":270,"author":{"gitId":"geraldngjx"},"content":" String newTaskString \u003d newTask.fileFormat();","lastModifiedDate":"2023-08-27"},{"lineNumber":271,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":272,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"Got it. I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":273,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + newTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":274,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":275,"author":{"gitId":"geraldngjx"},"content":" lst.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":276,"author":{"gitId":"geraldngjx"},"content":" storage.addTask(newTaskString);","lastModifiedDate":"2023-08-27"},{"lineNumber":277,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":278,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\nNow you have \" + lst.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":279,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":280,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":281,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":282,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":283,"author":{"gitId":"geraldngjx"},"content":" * Prints the list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":284,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":285,"author":{"gitId":"geraldngjx"},"content":" public String printList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":286,"author":{"gitId":"geraldngjx"},"content":" String taskList \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":287,"author":{"gitId":"geraldngjx"},"content":" for (int i \u003d 0; i \u003c lst.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":288,"author":{"gitId":"geraldngjx"},"content":" taskList +\u003d (i + 1) + \". \" + lst.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":289,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":290,"author":{"gitId":"geraldngjx"},"content":" return taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":291,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":292,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":293,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":294,"author":{"gitId":"geraldngjx"},"content":" * Marks a task as done and updates the storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":295,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":296,"author":{"gitId":"geraldngjx"},"content":" * @param task The task to be marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":297,"author":{"gitId":"geraldngjx"},"content":" * @param num The index of the task in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":298,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":299,"author":{"gitId":"geraldngjx"},"content":" public String markCompletion(Task task, int num) {","lastModifiedDate":"2023-09-04"},{"lineNumber":300,"author":{"gitId":"geraldngjx"},"content":" if (task.getStatusIcon().equals(\"X\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":301,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":302,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":303,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":304,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":305,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":306,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":307,"author":{"gitId":"geraldngjx"},"content":" task.toggleCompletion();","lastModifiedDate":"2023-08-27"},{"lineNumber":308,"author":{"gitId":"geraldngjx"},"content":" String updatedTaskString \u003d task.fileFormat();","lastModifiedDate":"2023-08-27"},{"lineNumber":309,"author":{"gitId":"geraldngjx"},"content":" this.storage.updateTask(num - 1, updatedTaskString);","lastModifiedDate":"2023-08-27"},{"lineNumber":310,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":311,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":312,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":313,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":314,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":315,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":316,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":317,"author":{"gitId":"geraldngjx"},"content":" * Removes the completion status of a task and updates the storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":318,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":319,"author":{"gitId":"geraldngjx"},"content":" * @param task The task to be marked as not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":320,"author":{"gitId":"geraldngjx"},"content":" * @param num The index of the task in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":321,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":322,"author":{"gitId":"geraldngjx"},"content":" public String unmarkCompletion(Task task, int num) {","lastModifiedDate":"2023-09-04"},{"lineNumber":323,"author":{"gitId":"geraldngjx"},"content":" if (task.getStatusIcon().equals(\" \")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":324,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":325,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":326,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":327,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":328,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":329,"author":{"gitId":"geraldngjx"},"content":" task.toggleCompletion();","lastModifiedDate":"2023-08-27"},{"lineNumber":330,"author":{"gitId":"geraldngjx"},"content":" String updatedTaskString \u003d task.fileFormat();","lastModifiedDate":"2023-08-27"},{"lineNumber":331,"author":{"gitId":"geraldngjx"},"content":" this.storage.updateTask(num - 1, updatedTaskString);","lastModifiedDate":"2023-08-27"},{"lineNumber":332,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":333,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":334,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":335,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":336,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":337,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":338,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":339,"author":{"gitId":"geraldngjx"},"content":" * Deletes a task from the task list and updates the storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":340,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":341,"author":{"gitId":"geraldngjx"},"content":" * @param num The index of the task in the task list to be deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":342,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":343,"author":{"gitId":"geraldngjx"},"content":" public String deleteTask(Integer num) {","lastModifiedDate":"2023-09-04"},{"lineNumber":344,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"Noted. I\u0027ve removed this task:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":345,"author":{"gitId":"geraldngjx"},"content":" Task selectedTask \u003d lst.remove(num - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":346,"author":{"gitId":"geraldngjx"},"content":" this.storage.updateTask(num - 1, null);","lastModifiedDate":"2023-08-27"},{"lineNumber":347,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":348,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\t\" + selectedTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":349,"author":{"gitId":"geraldngjx"},"content":" message +\u003d \"\\nNow you have \" + lst.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":350,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":351,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":352,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":353,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":354,"author":{"gitId":"geraldngjx"},"content":" * Finds tasks that match a specified keyword and displays them.","lastModifiedDate":"2023-08-28"},{"lineNumber":355,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":356,"author":{"gitId":"geraldngjx"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-08-28"},{"lineNumber":357,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":358,"author":{"gitId":"geraldngjx"},"content":" private String findTasks(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":359,"author":{"gitId":"geraldngjx"},"content":" List\u003cTask\u003e matchingTasks \u003d lst.findTasksByKeyword(keyword);","lastModifiedDate":"2023-08-28"},{"lineNumber":360,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":361,"author":{"gitId":"geraldngjx"},"content":" String taskList \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":362,"author":{"gitId":"geraldngjx"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":363,"author":{"gitId":"geraldngjx"},"content":" taskList +\u003d (i + 1) + \". \" + matchingTasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":364,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":365,"author":{"gitId":"geraldngjx"},"content":" return taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":366,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":367,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"geraldngjx":367}},{"path":"src/main/java/geraldbot/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.util;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" * Handles reading and writing tasks to the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" private File file;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" * Constructor for Storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" * @param path The path to the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" public Storage(String path) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" this.file \u003d new File(path);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" createFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" * Returns the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" * @return The storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" public File getFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" return this.file;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":" * Creates a new file if it does not exist and also creates parent directories if needed.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" private void createFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" File parentFolder \u003d this.file.getParentFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":" if (!parentFolder.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":" parentFolder.mkdirs();","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"geraldngjx"},"content":" if (this.file.createNewFile()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"geraldngjx"},"content":" System.out.println(\"File has been created successfully: \" + this.file.getPath());","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"geraldngjx"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"geraldngjx"},"content":" System.out.println(\"There is an error creating the file.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"geraldngjx"},"content":" * Reads tasks from the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"geraldngjx"},"content":" * @return An ArrayList of Task objects.","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"geraldngjx"},"content":" public ArrayList\u003cTask\u003e read() {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"geraldngjx"},"content":" Scanner sc \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"geraldngjx"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"geraldngjx"},"content":" String[] line \u003d sc.nextLine().split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"geraldngjx"},"content":" String[] task \u003d new String[line.length];","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"geraldngjx"},"content":" for (int i \u003d 0; i \u003c line.length; i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"geraldngjx"},"content":" task[i] \u003d line[i].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"geraldngjx"},"content":" if (task[0].equals(\"T\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"geraldngjx"},"content":" taskList.add(new Todo(task[2], task[1].equals(\"1\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"geraldngjx"},"content":" } else if (task[0].equals(\"D\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"geraldngjx"},"content":" LocalDateTime deadline \u003d LocalDateTime.parse(task[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"geraldngjx"},"content":" taskList.add(new Deadline(task[2], task[1].equals(\"1\"), deadline));","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"geraldngjx"},"content":" } else if (task[0].equals(\"E\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"geraldngjx"},"content":" String[] timeframe \u003d task[3].split(\"-\");","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"geraldngjx"},"content":" taskList.add(new Event(task[2], task[1].equals(\"1\"), timeframe[0], timeframe[1]));","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"geraldngjx"},"content":" System.out.println(\"Unknown task type: \" + task[0]);","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"geraldngjx"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"geraldngjx"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"geraldngjx"},"content":" createFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"geraldngjx"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"geraldngjx"},"content":" * Adds a task in file format to the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"geraldngjx"},"content":" * @param fileFormat The formatted task to add.","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"geraldngjx"},"content":" public void addTask(String fileFormat) {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"geraldngjx"},"content":" FileWriter fw \u003d new FileWriter(this.file, true);","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"geraldngjx"},"content":" if (this.file.length() !\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"geraldngjx"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"geraldngjx"},"content":" fw.write(fileFormat);","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"geraldngjx"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"geraldngjx"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"geraldngjx"},"content":" * Updates a task in the storage file.","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"geraldngjx"},"content":" * @param index The index of the task to update.","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"geraldngjx"},"content":" * @param updatedFile The updated task in file format.","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"geraldngjx"},"content":" public void updateTask(int index, String updatedFile) {","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"geraldngjx"},"content":" Scanner sc \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cString\u003e updatedTaskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"geraldngjx"},"content":" int idx \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"geraldngjx"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"geraldngjx"},"content":" String currTask \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"geraldngjx"},"content":" if (idx !\u003d index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"geraldngjx"},"content":" updatedTaskList.add(currTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"geraldngjx"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"geraldngjx"},"content":" if (updatedFile !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"geraldngjx"},"content":" updatedTaskList.add(updatedFile);","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"geraldngjx"},"content":" idx++;","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"geraldngjx"},"content":" sc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"geraldngjx"},"content":" FileWriter fw \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"geraldngjx"},"content":" fw.write(String.join(\"\\n\", updatedTaskList));","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"geraldngjx"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"geraldngjx"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"geraldngjx":159}},{"path":"src/main/java/geraldbot/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.util;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" * Constructs a TaskList with the given list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" * @param taskList The initial list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" * Removes and returns the task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" * @param idx The index of the task to be removed.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" * @return The removed task.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" public Task remove(int idx) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" Task removedTask \u003d this.taskList.remove(idx);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" return removedTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":" * Returns the task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" * @param idx The index of the task to be retrieved.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":" public Task get(int idx) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":" Task selectedTask \u003d this.taskList.get(idx);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" return selectedTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"geraldngjx"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"geraldngjx"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"geraldngjx"},"content":" public int size() {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"geraldngjx"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"geraldngjx"},"content":" * Finds tasks in the list that match the specified keyword in their descriptions.","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"geraldngjx"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"geraldngjx"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"geraldngjx"},"content":" * @return A list of tasks matching the keyword.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"geraldngjx"},"content":" public List\u003cTask\u003e findTasksByKeyword(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"geraldngjx"},"content":" return taskList.stream()","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"geraldngjx"},"content":" .filter(task -\u003e task.getDescription().contains(keyword))","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"geraldngjx"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"geraldngjx":75}},{"path":"src/main/java/geraldbot/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.util;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":" * Represents the user interface for interacting with GeraldBot.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":" private Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":" * Greets the user with a welcome message.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" public void greet() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" System.out.println(\"Hello! I\u0027m GeraldBot\\n\" + \"What can I do for you?\");","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":" * Returns a farewell message.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" public String bye() {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" String message \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" return message;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" * Reads the next line of input from the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" * @return The next line of input from the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" public String readInput() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" String input \u003d this.sc.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" return input;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"geraldngjx":33}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"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":"geraldngjx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"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":12,"author":{"gitId":"geraldngjx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"geraldngjx":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"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\"geraldbot.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"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":12,"author":{"gitId":"geraldngjx"},"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":13,"author":{"gitId":"geraldngjx"},"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":14,"author":{"gitId":"geraldngjx"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"geraldngjx":19}},{"path":"src/test/java/geraldbot/util/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.util;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.exception.DukeInvalidCommandException;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":" public void parse_todoCommand_successfullyAdded() {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d new Storage(\"testData/testStorageData.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" Parser parser \u003d new Parser(storage, taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" String input \u003d \"todo Buy groceries\";","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" assertDoesNotThrow(() -\u003e parser.parse(input));","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" assertTrue(taskList.get(0) instanceof Todo);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" public void parse_deadlineCommand_successfullyAdded() {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d new Storage(\"testData/testStorageData.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":" Parser parser \u003d new Parser(storage, taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" String input \u003d \"deadline Submit report /by 16/03/2020 1800\";","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" assertDoesNotThrow(() -\u003e parser.parse(input));","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":" assertTrue(taskList.get(0) instanceof Deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" public void parse_eventCommand_successfullyAdded() {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d new Storage(\"testData/testStorageData.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":" Parser parser \u003d new Parser(storage, taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" String input \u003d \"event Team meeting /Monday 2pm/ 4pm\";","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"geraldngjx"},"content":" assertDoesNotThrow(() -\u003e parser.parse(input));","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"geraldngjx"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"geraldngjx"},"content":" assertTrue(taskList.get(0) instanceof Event);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"geraldngjx"},"content":" public void parse_invalidCommand_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d new Storage(\"testData/testStorageData.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"geraldngjx"},"content":" Parser parser \u003d new Parser(storage, taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"geraldngjx"},"content":" String input \u003d \"invalid_command\";","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"geraldngjx"},"content":" assertThrows(DukeInvalidCommandException.class, () -\u003e parser.parse(input));","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"geraldngjx"},"content":" public void parse_emptyDescription_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d new Storage(\"testData/testStorageData.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"geraldngjx"},"content":" Parser parser \u003d new Parser(storage, taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"geraldngjx"},"content":" String input \u003d \"todo \";","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"geraldngjx"},"content":" assertThrows(DukeInvalidCommandException.class, () -\u003e parser.parse(input));","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"geraldngjx":78}},{"path":"src/test/java/geraldbot/util/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"package geraldbot.util;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"geraldngjx"},"content":"import geraldbot.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"geraldngjx"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"geraldngjx"},"content":" public void read_emptyFile_emptyTaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d initializeStorage();","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d storage.read();","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"geraldngjx"},"content":" assertTrue(taskList.isEmpty());","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"geraldngjx"},"content":" public void read_existingFile_correctTaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d initializeStorage();","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cString\u003e testData \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"geraldngjx"},"content":" testData.add(\"T | 1 | Buy groceries\");","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"geraldngjx"},"content":" testData.add(\"D | 0 | Submit report | 2023-08-31T18:00\");","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"geraldngjx"},"content":" testData.add(\"E | 0 | Team meeting | 2023-08-27T14:00-16:00\");","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"geraldngjx"},"content":" StorageTest.writeTestDataToFile(storage, testData);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"geraldngjx"},"content":" fail(\"Failed to write test data to file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d storage.read();","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"geraldngjx"},"content":" assertEquals(3, taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"geraldngjx"},"content":" assertTrue(taskList.get(0) instanceof Todo);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"geraldngjx"},"content":" assertTrue(taskList.get(1) instanceof Deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"geraldngjx"},"content":" assertTrue(taskList.get(2) instanceof Event);","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"geraldngjx"},"content":" public void addTask_validTask_successfullyAdded() {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d initializeStorage();","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"geraldngjx"},"content":" Task newTask \u003d new Todo(\"Read a book\", false);","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"geraldngjx"},"content":" String fileFormat \u003d newTask.fileFormat();","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"geraldngjx"},"content":" storage.addTask(fileFormat);","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d storage.read();","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"geraldngjx"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"geraldngjx"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"geraldngjx"},"content":" public void updateTask_validIndex_updatedSuccessfully() {","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d initializeStorage();","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cString\u003e testData \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"geraldngjx"},"content":" testData.add(\"T | 0 | Buy groceries\");","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"geraldngjx"},"content":" StorageTest.writeTestDataToFile(storage, testData);","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"geraldngjx"},"content":" fail(\"Failed to write test data to file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"geraldngjx"},"content":" String updatedTaskFileFormat \u003d \"T | 1 | Buy groceries\";","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"geraldngjx"},"content":" storage.updateTask(0, updatedTaskFileFormat);","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"geraldngjx"},"content":" ArrayList\u003cTask\u003e taskList \u003d storage.read();","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"geraldngjx"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"geraldngjx"},"content":" assertEquals(\"X\", taskList.get(0).getStatusIcon());","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"geraldngjx"},"content":" private Storage initializeStorage() {","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"geraldngjx"},"content":" String testFilePath \u003d \"./testData/testStorageData.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"geraldngjx"},"content":" Storage storage \u003d new Storage(testFilePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"geraldngjx"},"content":" File file \u003d storage.getFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"geraldngjx"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"geraldngjx"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"geraldngjx"},"content":" fw.write(\"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"geraldngjx"},"content":" fw.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"geraldngjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"geraldngjx"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"geraldngjx"},"content":" return storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"geraldngjx"},"content":" private static void writeTestDataToFile(Storage storage, ArrayList\u003cString\u003e testData) throws IOException {","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"geraldngjx"},"content":" File testFile \u003d new File(storage.getFile().getPath());","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"geraldngjx"},"content":" if (!testFile.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"geraldngjx"},"content":" testFile.getParentFile().mkdirs();","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"geraldngjx"},"content":" testFile.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"geraldngjx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"geraldngjx"},"content":" FileWriter fw \u003d new FileWriter(testFile);","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"geraldngjx"},"content":" fw.write(String.join(\"\\n\", testData));","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"geraldngjx"},"content":" fw.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"geraldngjx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"geraldngjx"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"geraldngjx":111}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"geraldngjx"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"geraldngjx"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"geraldngjx"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"geraldngjx"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"geraldngjx"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"geraldngjx"},"content":"blah","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"geraldngjx"},"content":"mark 99","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"geraldngjx"},"content":"deadline return book","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"geraldngjx"},"content":"delete","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"geraldngjx"},"content":"delete 0","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"geraldngjx"},"content":"delete 3","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"geraldngjx"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"geraldngjx":12}}] diff --git a/geraldngjx_ip_master/commits.json b/geraldngjx_ip_master/commits.json index a14ec710..722e0add 100644 --- a/geraldngjx_ip_master/commits.json +++ b/geraldngjx_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"geraldngjx":[{"date":"2023-08-21","commitResults":[{"hash":"2f23679c506896fcfeab6cc97e511c0b75a8c8e3","isMergeCommit":false,"messageTitle":"Implement feature to greet user then exit and rename the bot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":7}}},{"hash":"2262fc09a5faf106b8a9ec5e37d705da8663794d","isMergeCommit":false,"messageTitle":"Implement feature to echo commands by user","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"cbf29a3f9a93018c9d5bef3491c3dba27dd8b454","isMergeCommit":false,"messageTitle":"Add feature to store text by user and display storage when requested","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":4}}},{"hash":"2df1b3b9e0b90f5aa99a9173919ca5c4f32c03ab","isMergeCommit":false,"messageTitle":"Add feature to mark and unmark task as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":14}}},{"hash":"c4252c3daefa4336f2ac83f69a0222263c50c92b","isMergeCommit":false,"messageTitle":"Add support for tracking three types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":4}}},{"hash":"2be6078e75d89faa1c9e89a88bb74e064d5b845a","isMergeCommit":false,"messageTitle":"Add automated text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0}}},{"hash":"860c7ebf1992915c4f1ac2005e5d28dc14a8ec16","isMergeCommit":false,"messageTitle":"Add error handling to handle incorrect inputs by user","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":64}}},{"hash":"06f2b22b7795ef76e169b5404f0ee902a1bf2981","isMergeCommit":false,"messageTitle":"Update automated text ui testing to reflect new changes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}},{"hash":"ed48ca804a4ab10e03f741f7531bc0c9ef19bd26","isMergeCommit":false,"messageTitle":"Add feature to delete task from list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":1}}},{"hash":"07d3bf9eef93470874ed51e0d0f23eb67a3fe260","isMergeCommit":false,"messageTitle":"Update automated text ui testing to reflect new changes for delete feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"a44ae364fa6a309bbf201ccbc39d2e2d9aeb7eb1","isMergeCommit":false,"messageTitle":"Fix style to remove unnecessary line breaks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":19}}}]},{"date":"2023-08-23","commitResults":[{"hash":"d757d5d9704a9043f6d16bde70733dcc5c711574","isMergeCommit":false,"messageTitle":"Add java enums to classify commands by TaskType","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}}]},{"date":"2023-08-27","commitResults":[{"hash":"2bee9749ee173b660cbd975c8f495c9adf44ec1d","isMergeCommit":false,"messageTitle":"Add feature to save task list to storage and add file formatting methods to task types","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":159,"deletions":18}}},{"hash":"c56c286baa4c2986a05795c786d00aa42c0f2587","isMergeCommit":false,"messageTitle":"Fix formatting bugs that prevent data from being read from the storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":11}}},{"hash":"44e702c1a95724ddbf05e925121ccfa12105b98a","isMergeCommit":false,"messageTitle":"Add features for file marking and deletion in the storage","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":36,"deletions":16}}},{"hash":"0b8fa8b793f75603cbbb70d816c530e57ff5e6dd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"7d38b91ec70cc99e90d614e6aade57370e029849","isMergeCommit":false,"messageTitle":"Add feature to understand date and time for Deadline Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":10}}},{"hash":"ef3f692987520104fdc9a7ac600db49c155c501f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"5e5e189948750bb119bf1cd6845337c0d7d7a056","isMergeCommit":false,"messageTitle":"Refactor code to extract Ui, Parser, TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":324,"deletions":274}}},{"hash":"3bfe2e90a5103857a657d91459bd017618128458","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"889adc413667d2d71cafb3f5b1d61620918b75bc","isMergeCommit":false,"messageTitle":"Remove unnecessary display line commands and extracted common methods into Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":31}}},{"hash":"d8a541705884adfebe8ce827029845e07f61fe0a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d8701a4c50b81dc77e4fd3d845a6d60cd3d50f1d","isMergeCommit":false,"messageTitle":"Organise the classes into suitable java packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":6}}},{"hash":"7cfe7db3c53c17747d7941eaf4a007ebb0787268","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"f6bb2d8be9162ea09f5b60fb8445042ff3c956e5","isMergeCommit":false,"messageTitle":"Add a few JUnit tests to test functionality of Storage and Parser","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":183,"deletions":0}}},{"hash":"8ccfb944322706dbef3029c02830b211ca8d2d9e","isMergeCommit":false,"messageTitle":"Edit build.gradle to create jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":1}}},{"hash":"6c3a681b3684690207d6d42fdb52924e16ca9083","isMergeCommit":false,"messageTitle":"Add javadocs to the code","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":292,"deletions":4}}},{"hash":"bb00e62b21a3cf55dc966988d0ba33ca9d512636","isMergeCommit":false,"messageTitle":"Add feature to find a task by searching for a keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":0}}},{"hash":"6d7df9fb6da89e1f9552959c0dac9d1cd51cb385","isMergeCommit":true,"messageTitle":"Fix merge conflict due to merging of branch-Level-9 to master","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"bd9e47db95282aaeb7e194b409e7db2ed7dec79f","isMergeCommit":false,"messageTitle":"Fix style issues according to checkstyle tool","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":43,"deletions":33}}},{"hash":"18d459b964322dc458acaadb016ac2b1aa5d1f02","isMergeCommit":false,"messageTitle":"Add GUI container for chatbot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":81,"deletions":1}}},{"hash":"358aac295fcd94fee8c85788c7edb0725ec170ef","isMergeCommit":false,"messageTitle":"Add dialog boxes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":2}}},{"hash":"8a4c104825d9f012dd7916294e07c2fe464af7c9","isMergeCommit":false,"messageTitle":"Add custom behaviour to DialogBox","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":3}}},{"hash":"bbb7dfe3f54228a82b10329416b64793590b34a7","isMergeCommit":false,"messageTitle":"Add fxml to the application","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":117,"deletions":141}}},{"hash":"3ddcaf429c24a5b5dcb366a3e79c87b253106100","isMergeCommit":false,"messageTitle":"Fix bug where GeraldBot is unable to parse input correctly","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":2,"deletions":2},"java":{"insertions":63,"deletions":44}}},{"hash":"c2a1b39ffc53a3c2a8a9345da5f14afa42c39a92","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"bd88653a845f4a262db94a054efb979170c5c094","isMergeCommit":false,"messageTitle":"Fix styling issues based on CheckStyle tool","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"geraldngjx":{"java":1335,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":22,"txt":12}},"authorContributionVariance":{"geraldngjx":88254.875},"authorDisplayNameMap":{"geraldngjx":"CS2103T-T15-4 GERA..IANG"}} +{"authorDailyContributionsMap":{"geraldngjx":[{"date":"2023-08-21","commitResults":[{"hash":"2f23679c506896fcfeab6cc97e511c0b75a8c8e3","isMergeCommit":false,"messageTitle":"Implement feature to greet user then exit and rename the bot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":7}}},{"hash":"2262fc09a5faf106b8a9ec5e37d705da8663794d","isMergeCommit":false,"messageTitle":"Implement feature to echo commands by user","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"cbf29a3f9a93018c9d5bef3491c3dba27dd8b454","isMergeCommit":false,"messageTitle":"Add feature to store text by user and display storage when requested","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":4}}},{"hash":"2df1b3b9e0b90f5aa99a9173919ca5c4f32c03ab","isMergeCommit":false,"messageTitle":"Add feature to mark and unmark task as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":14}}},{"hash":"c4252c3daefa4336f2ac83f69a0222263c50c92b","isMergeCommit":false,"messageTitle":"Add support for tracking three types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":4}}},{"hash":"2be6078e75d89faa1c9e89a88bb74e064d5b845a","isMergeCommit":false,"messageTitle":"Add automated text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0}}},{"hash":"860c7ebf1992915c4f1ac2005e5d28dc14a8ec16","isMergeCommit":false,"messageTitle":"Add error handling to handle incorrect inputs by user","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":64}}},{"hash":"06f2b22b7795ef76e169b5404f0ee902a1bf2981","isMergeCommit":false,"messageTitle":"Update automated text ui testing to reflect new changes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}},{"hash":"ed48ca804a4ab10e03f741f7531bc0c9ef19bd26","isMergeCommit":false,"messageTitle":"Add feature to delete task from list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":1}}},{"hash":"07d3bf9eef93470874ed51e0d0f23eb67a3fe260","isMergeCommit":false,"messageTitle":"Update automated text ui testing to reflect new changes for delete feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"a44ae364fa6a309bbf201ccbc39d2e2d9aeb7eb1","isMergeCommit":false,"messageTitle":"Fix style to remove unnecessary line breaks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":19}}}]},{"date":"2023-08-23","commitResults":[{"hash":"d757d5d9704a9043f6d16bde70733dcc5c711574","isMergeCommit":false,"messageTitle":"Add java enums to classify commands by TaskType","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}}]},{"date":"2023-08-27","commitResults":[{"hash":"2bee9749ee173b660cbd975c8f495c9adf44ec1d","isMergeCommit":false,"messageTitle":"Add feature to save task list to storage and add file formatting methods to task types","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":159,"deletions":18}}},{"hash":"c56c286baa4c2986a05795c786d00aa42c0f2587","isMergeCommit":false,"messageTitle":"Fix formatting bugs that prevent data from being read from the storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":11}}},{"hash":"44e702c1a95724ddbf05e925121ccfa12105b98a","isMergeCommit":false,"messageTitle":"Add features for file marking and deletion in the storage","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":36,"deletions":16}}},{"hash":"0b8fa8b793f75603cbbb70d816c530e57ff5e6dd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"7d38b91ec70cc99e90d614e6aade57370e029849","isMergeCommit":false,"messageTitle":"Add feature to understand date and time for Deadline Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":10}}},{"hash":"ef3f692987520104fdc9a7ac600db49c155c501f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"5e5e189948750bb119bf1cd6845337c0d7d7a056","isMergeCommit":false,"messageTitle":"Refactor code to extract Ui, Parser, TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":324,"deletions":274}}},{"hash":"3bfe2e90a5103857a657d91459bd017618128458","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"889adc413667d2d71cafb3f5b1d61620918b75bc","isMergeCommit":false,"messageTitle":"Remove unnecessary display line commands and extracted common methods into Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":31}}},{"hash":"d8a541705884adfebe8ce827029845e07f61fe0a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d8701a4c50b81dc77e4fd3d845a6d60cd3d50f1d","isMergeCommit":false,"messageTitle":"Organise the classes into suitable java packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":6}}},{"hash":"7cfe7db3c53c17747d7941eaf4a007ebb0787268","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"f6bb2d8be9162ea09f5b60fb8445042ff3c956e5","isMergeCommit":false,"messageTitle":"Add a few JUnit tests to test functionality of Storage and Parser","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":183,"deletions":0}}},{"hash":"8ccfb944322706dbef3029c02830b211ca8d2d9e","isMergeCommit":false,"messageTitle":"Edit build.gradle to create jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":1}}},{"hash":"6c3a681b3684690207d6d42fdb52924e16ca9083","isMergeCommit":false,"messageTitle":"Add javadocs to the code","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":292,"deletions":4}}},{"hash":"bb00e62b21a3cf55dc966988d0ba33ca9d512636","isMergeCommit":false,"messageTitle":"Add feature to find a task by searching for a keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":0}}},{"hash":"6d7df9fb6da89e1f9552959c0dac9d1cd51cb385","isMergeCommit":true,"messageTitle":"Fix merge conflict due to merging of branch-Level-9 to master","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"bd9e47db95282aaeb7e194b409e7db2ed7dec79f","isMergeCommit":false,"messageTitle":"Fix style issues according to checkstyle tool","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":43,"deletions":33}}},{"hash":"18d459b964322dc458acaadb016ac2b1aa5d1f02","isMergeCommit":false,"messageTitle":"Add GUI container for chatbot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":81,"deletions":1}}},{"hash":"358aac295fcd94fee8c85788c7edb0725ec170ef","isMergeCommit":false,"messageTitle":"Add dialog boxes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":2}}},{"hash":"8a4c104825d9f012dd7916294e07c2fe464af7c9","isMergeCommit":false,"messageTitle":"Add custom behaviour to DialogBox","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":3}}},{"hash":"bbb7dfe3f54228a82b10329416b64793590b34a7","isMergeCommit":false,"messageTitle":"Add fxml to the application","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":117,"deletions":141}}},{"hash":"3ddcaf429c24a5b5dcb366a3e79c87b253106100","isMergeCommit":false,"messageTitle":"Fix bug where GeraldBot is unable to parse input correctly","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":2,"deletions":2},"java":{"insertions":63,"deletions":44}}},{"hash":"c2a1b39ffc53a3c2a8a9345da5f14afa42c39a92","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"bd88653a845f4a262db94a054efb979170c5c094","isMergeCommit":false,"messageTitle":"Fix styling issues based on CheckStyle tool","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-05","commitResults":[{"hash":"8247e191e8f4c56a45077381f07064cd36d73705","isMergeCommit":false,"messageTitle":"Fix bug where bye command cannot be parsed","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":67}}}]}]},"authorFileTypeContributionMap":{"geraldngjx":{"java":1291,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":22,"txt":12}},"authorContributionVariance":{"geraldngjx":83834.445},"authorDisplayNameMap":{"geraldngjx":"CS2103T-T15-4 GERA..IANG"}} diff --git a/ivyy-poison_ip_master/authorship.json b/ivyy-poison_ip_master/authorship.json index 1c128779..cfe4f154 100644 --- a/ivyy-poison_ip_master/authorship.json +++ b/ivyy-poison_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":"ivyy-poison"},"content":"java {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":" sourceCompatibility \u003d JavaVersion.VERSION_11","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":" targetCompatibility \u003d JavaVersion.VERSION_11","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" mainClassName(\"duke/Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":"build.dependsOn test","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ivyy-poison":8,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":"/*","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" * Duke is a personal assistant chatbot that helps a person to keep track of various things.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":"public class Duke {","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" ","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" public enum CommandType {","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" LIST, MARK, DELETE, TODO, DEADLINE, EVENT, UNKNOWN, FIND","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" private Parser parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" private Duke() {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" this.tasks \u003d new TaskList(storage.readTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" private void run() {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" ui.printWelcomeMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" try (Scanner sc \u003d new Scanner(System.in)) {","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" while (true) {","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" break;","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" CommandType commandType \u003d parser.parseCommandType(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" handleCommand(commandType, input);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(new DukeException(\"An unexpected error occurred: \" + e.getMessage()));","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":" ui.printFarewellMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ivyy-poison"},"content":" * Main entry point of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ivyy-poison"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ivyy-poison"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"ivyy-poison"},"content":" Duke ekud \u003d new Duke();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"ivyy-poison"},"content":" ekud.run();","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":73,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":74,"author":{"gitId":"ivyy-poison"},"content":" ","lastModifiedDate":"2023-08-20"},{"lineNumber":75,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":76,"author":{"gitId":"ivyy-poison"},"content":" private void handleCommand(CommandType commandType, String command) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"ivyy-poison"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-20"},{"lineNumber":78,"author":{"gitId":"ivyy-poison"},"content":" case LIST:","lastModifiedDate":"2023-08-20"},{"lineNumber":79,"author":{"gitId":"ivyy-poison"},"content":" ui.printList(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"ivyy-poison"},"content":" break;","lastModifiedDate":"2023-08-20"},{"lineNumber":81,"author":{"gitId":"ivyy-poison"},"content":" case MARK:","lastModifiedDate":"2023-08-20"},{"lineNumber":82,"author":{"gitId":"ivyy-poison"},"content":" markTask(command);","lastModifiedDate":"2023-08-20"},{"lineNumber":83,"author":{"gitId":"ivyy-poison"},"content":" break;","lastModifiedDate":"2023-08-20"},{"lineNumber":84,"author":{"gitId":"ivyy-poison"},"content":" case DELETE:","lastModifiedDate":"2023-08-20"},{"lineNumber":85,"author":{"gitId":"ivyy-poison"},"content":" deleteTask(command);","lastModifiedDate":"2023-08-20"},{"lineNumber":86,"author":{"gitId":"ivyy-poison"},"content":" break;","lastModifiedDate":"2023-08-20"},{"lineNumber":87,"author":{"gitId":"ivyy-poison"},"content":" case TODO:","lastModifiedDate":"2023-08-20"},{"lineNumber":88,"author":{"gitId":"ivyy-poison"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-20"},{"lineNumber":89,"author":{"gitId":"ivyy-poison"},"content":" case EVENT:","lastModifiedDate":"2023-08-20"},{"lineNumber":90,"author":{"gitId":"ivyy-poison"},"content":" addTask(command);","lastModifiedDate":"2023-08-20"},{"lineNumber":91,"author":{"gitId":"ivyy-poison"},"content":" break;","lastModifiedDate":"2023-08-20"},{"lineNumber":92,"author":{"gitId":"ivyy-poison"},"content":" case FIND:","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ivyy-poison"},"content":" handleFind(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ivyy-poison"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ivyy-poison"},"content":" case UNKNOWN:","lastModifiedDate":"2023-08-20"},{"lineNumber":96,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ivyy-poison"},"content":" break;","lastModifiedDate":"2023-08-20"},{"lineNumber":98,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":99,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":100,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":101,"author":{"gitId":"ivyy-poison"},"content":" private void handleFind(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ivyy-poison"},"content":" ui.printFindMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ivyy-poison"},"content":" String keyword \u003d command.split(\" \")[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ivyy-poison"},"content":" TaskList filtered \u003d tasks.filter(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ivyy-poison"},"content":" ui.printList(filtered.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"ivyy-poison"},"content":" private void addTask(String task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":110,"author":{"gitId":"ivyy-poison"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-08-20"},{"lineNumber":111,"author":{"gitId":"ivyy-poison"},"content":" if (task.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":112,"author":{"gitId":"ivyy-poison"},"content":" newTask \u003d ToDo.createToDoFromCommand(task);","lastModifiedDate":"2023-08-20"},{"lineNumber":113,"author":{"gitId":"ivyy-poison"},"content":" } else if (task.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":114,"author":{"gitId":"ivyy-poison"},"content":" newTask \u003d Deadline.createDeadlineFromCommand(task);","lastModifiedDate":"2023-08-20"},{"lineNumber":115,"author":{"gitId":"ivyy-poison"},"content":" } else if (task.startsWith(\"event\")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":116,"author":{"gitId":"ivyy-poison"},"content":" newTask \u003d Event.createEventFromCommand(task);","lastModifiedDate":"2023-08-20"},{"lineNumber":117,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":118,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":119,"author":{"gitId":"ivyy-poison"},"content":" if (newTask !\u003d null) {","lastModifiedDate":"2023-08-20"},{"lineNumber":120,"author":{"gitId":"ivyy-poison"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-20"},{"lineNumber":121,"author":{"gitId":"ivyy-poison"},"content":" storage.write(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"ivyy-poison"},"content":" ui.printAddedTaskConfirmation(newTask, tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"ivyy-poison"},"content":" } ","lastModifiedDate":"2023-08-20"},{"lineNumber":124,"author":{"gitId":"ivyy-poison"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-20"},{"lineNumber":125,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":127,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":128,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":129,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"ivyy-poison"},"content":" private void markTask(String command) {","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":132,"author":{"gitId":"ivyy-poison"},"content":" int index \u003d Integer.parseInt(command.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-20"},{"lineNumber":133,"author":{"gitId":"ivyy-poison"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-20"},{"lineNumber":134,"author":{"gitId":"ivyy-poison"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-20"},{"lineNumber":135,"author":{"gitId":"ivyy-poison"},"content":" storage.write(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"ivyy-poison"},"content":" ui.printMarkedTaskConfirmation(task); ","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"ivyy-poison"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-20"},{"lineNumber":138,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(new DukeException(\"Invalid command format\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"ivyy-poison"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":142,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":143,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":144,"author":{"gitId":"ivyy-poison"},"content":" private void deleteTask(String command) {","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":146,"author":{"gitId":"ivyy-poison"},"content":" int index \u003d Integer.parseInt(command.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-20"},{"lineNumber":147,"author":{"gitId":"ivyy-poison"},"content":" Task task \u003d tasks.remove(index);","lastModifiedDate":"2023-08-20"},{"lineNumber":148,"author":{"gitId":"ivyy-poison"},"content":" storage.write(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"ivyy-poison"},"content":" ui.printDeletedTaskConfirmation(task, tasks); ","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"ivyy-poison"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-20"},{"lineNumber":151,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(new DukeException(\"Invalid command format\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"ivyy-poison"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"-"},"content":" } ","lastModifiedDate":"2019-07-29"},{"lineNumber":155,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":156,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":157,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":158,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ivyy-poison":156,"-":2}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"/*","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates exceptions specific to Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a DukeException object with the given message.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":" * @param message The message of the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" super(message);","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a DukeException object with the given message and cause.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" * @param message The message of the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" * @param cause The cause of the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" public DukeException(String message, Throwable cause) {","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" super(message, cause);","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"ivyy-poison":26}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"/*","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates a parser that parses user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":" * Returns the command type of the given command.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" * @param command The command to be parsed.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" * @return The command type of the given command.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" public Duke.CommandType parseCommandType(String command) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" if (command.startsWith(\"list\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" return Duke.CommandType.LIST;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" return Duke.CommandType.MARK;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" return Duke.CommandType.DELETE;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" return Duke.CommandType.TODO;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" return Duke.CommandType.DEADLINE;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" return Duke.CommandType.EVENT;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" return Duke.CommandType.FIND;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" else {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" return Duke.CommandType.UNKNOWN;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ivyy-poison":37}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":"/*","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates the storage of tasks in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" private File file;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" private String filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a Storage object with the default file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" public Storage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" this.filePath \u003d \"data/duke.txt\";","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" this.file \u003d getFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" private File getFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" new DukeException(\"Unable to create file: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" return file;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" private static Task addTaskFromStorage(String task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" if (task.startsWith(\"T\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" newTask \u003d ToDo.createToDoFromStorage(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" } else if (task.startsWith(\"D\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" newTask \u003d Deadline.createDeadlineFromStorage(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" } else if (task.startsWith(\"E\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" newTask \u003d Event.createEventFromStorage(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":" return newTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" * Reads the tasks from duke.txt and returns them as a list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":" * @return The list of tasks read from duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":" * @throws DukeException If there is an error reading from duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ivyy-poison"},"content":" public List\u003cTask\u003e readTasks() throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"ivyy-poison"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"ivyy-poison"},"content":" try (Scanner sc \u003d new Scanner(file)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"ivyy-poison"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"ivyy-poison"},"content":" String entry \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"ivyy-poison"},"content":" Task newTask \u003d addTaskFromStorage(entry);","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"ivyy-poison"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"Unable to read from storage: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"ivyy-poison"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ivyy-poison"},"content":" * Writes the given list of tasks to duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ivyy-poison"},"content":" * @param tasks The list of tasks to be written to duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ivyy-poison"},"content":" * @throws DukeException If there is an error writing to duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ivyy-poison"},"content":" public void write(List\u003cTask\u003e tasks) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"ivyy-poison"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"ivyy-poison"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"ivyy-poison"},"content":" fw.write(task.toStorageString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"ivyy-poison"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"Unable to write to storage: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ivyy-poison"},"content":" * Writes the given task to duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ivyy-poison"},"content":" * @param newTask The task to be written to duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ivyy-poison"},"content":" * @throws DukeException If there is an error writing to duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ivyy-poison"},"content":" public void write(Task newTask) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"ivyy-poison"},"content":" FileWriter fw \u003d new FileWriter(file, true);","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"ivyy-poison"},"content":" fw.write(newTask.toStorageString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"ivyy-poison"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"Unable to write to storage: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ivyy-poison":115}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"/*","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates a task that needs to be done before a specific date/time.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" * Constructor for a Deadline object with the given description and by.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" * @param by The date/time by which the deadline needs to be done.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"d MMM yyyy HHmm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a Deadline object with a given description and by as given in command string.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" * @param command The command to create the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" * @return The deadline object constructed from the given command.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" public static Deadline createDeadlineFromCommand(String command) throws DukeException {","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" if (command.length() \u003c\u003d 9) {","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" } else if (!command.contains(\" /by \")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The deadline command must contain a /by.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.endsWith(\" /by \")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The deadline command must contain a description after /by.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" String[] split \u003d command.substring(9).split(\" /by \");","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" return new Deadline(split[0], split[1]);","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a Deadline object with the given description, by, and done status.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" * @param storageString The string from duke.txt representing a row of data for a deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" * @return The deadline object constructed from the given storage string.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" public static Deadline createDeadlineFromStorage(String storageString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" String[] split \u003d storageString.split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" String isDone \u003d split[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" String taskDescription \u003d split[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":" String by \u003d split[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d new Deadline(taskDescription, by);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":" if (isDone.equals(\"1\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" return deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ivyy-poison"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":70,"author":{"gitId":"ivyy-poison"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"ivyy-poison"},"content":" String byString \u003d by.format(DateTimeFormatter.ofPattern(\"dd-mm-yyyy HH:mm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"ivyy-poison"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byString + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":74,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the deadline for storage in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the deadline for storage in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ivyy-poison"},"content":" public String toStorageString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"ivyy-poison"},"content":" String byString \u003d by.format(DateTimeFormatter.ofPattern(\"d MMM yyyy HHmm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"ivyy-poison"},"content":" return \"D\" + super.toStorageString() + \" | \" + byString;","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-20"},{"lineNumber":85,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"ivyy-poison":85}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"/*","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates a task that starts at a specific time and ends at a specific time.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" * Constructor for an Event object with the given description, start time, and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"d MMM yyyy HHmm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter.ofPattern(\"d MMM yyyy HHmm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" * Constructs an Event object with a given description, start time, end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" * @param command The command to create the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" * @return The event object constructed from the given command.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" public static Event createEventFromCommand(String command) throws DukeException {","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" ","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" if (command.length() \u003c\u003d 6) {","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" } else if (!command.contains(\" /from \")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The event command must contain a /from.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" } else if (!command.contains(\" /to \")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The event command must contain a /to.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.endsWith(\" /from \")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The event command must contain a description after /from.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.endsWith(\" /to \")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The event command must contain a description after /to.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" String[] tmpSplit \u003d command.substring(6).split(\" /from \");","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" String taskDescription \u003d tmpSplit[0];","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" String[] split \u003d tmpSplit[1].split(\" /to \");","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" String from \u003d split[0];","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" String to \u003d split[1];","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" return new Event(taskDescription, from, to);","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":" * Constructs an Event object with the given description, start time, end time, and done status.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" * @param storageString The string from duke.txt representing a row of data for an event.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" * @return The event object constructed from the given string.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":" public static Event createEventFromStorage(String storageString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":" String[] split \u003d storageString.split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"ivyy-poison"},"content":" String isDone \u003d split[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"ivyy-poison"},"content":" String taskDescription \u003d split[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"ivyy-poison"},"content":" String from \u003d split[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"ivyy-poison"},"content":" String to \u003d split[4];","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"ivyy-poison"},"content":" Event event \u003d new Event(taskDescription, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"ivyy-poison"},"content":" if (isDone.equals(\"1\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"ivyy-poison"},"content":" event.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"ivyy-poison"},"content":" return event;","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"ivyy-poison"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ivyy-poison"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":82,"author":{"gitId":"ivyy-poison"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":83,"author":{"gitId":"ivyy-poison"},"content":" String fromString \u003d from.format(DateTimeFormatter.ofPattern(\"dd-mm-yyyy HH:mm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"ivyy-poison"},"content":" String toString \u003d to.format(DateTimeFormatter.ofPattern(\"dd-mm-yyyy HH:mm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"ivyy-poison"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromString + \" to: \" + toString +\")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":87,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":88,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the event for storage in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the event for storage in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ivyy-poison"},"content":" public String toStorageString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"ivyy-poison"},"content":" String fromString \u003d from.format(DateTimeFormatter.ofPattern(\"d MMM yyyy HHmm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"ivyy-poison"},"content":" String toString \u003d to.format(DateTimeFormatter.ofPattern(\"d MMM yyyy HHmm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"ivyy-poison"},"content":" return \"E\" + super.toStorageString() + \" | \" + fromString + \" | \" + toString;","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"ivyy-poison"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"ivyy-poison":99}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"/*","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":" protected String description;","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":" * Constructor for a Task object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" * Returns the status icon associated with whether a task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" * @return The status icon associated with whether a task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" ","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the task for storage in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the task for storage in duke.txt..","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" public String toStorageString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" return \" | \" + ( this.isDone ? 1 : 0 ) + \" | \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" return this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"ivyy-poison":57}},{"path":"src/main/java/duke/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"/*","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":" ","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":" * Constructor for a ToDo object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" * @param description The description of the todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" public ToDo (String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a ToDo object with a given description as found in the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" * @param command The command to create the todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" * @return The todo object constructed from the given command.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" public static ToDo createToDoFromCommand(String command) throws DukeException {","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" if (command.length() \u003c\u003d 5) {","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" return new ToDo (command.substring(5));","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a ToDo object with the given description and done status.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" * @param storageString The string from duke.txt representing a row of data for a todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" * @return The todo object constructed from the given storage string.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" public static ToDo createToDoFromStorage(String storageString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" String[] split \u003d storageString.split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" String isDone \u003d split[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" String taskDescription \u003d split[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" ToDo todo \u003d new ToDo (taskDescription);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" if (isDone.equals(\"1\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" return todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the todo for storage in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the todo for storage in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":" public String toStorageString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"ivyy-poison"},"content":" return \"T\" + super.toStorageString();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"ivyy-poison":67}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import java.util.List;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"/*","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates the user interface of the application.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" * It provides methods to print various messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" private final String LOGO \u003d \",------.,--. ,--. \\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" + \"| .---\\\u0027| |,-.,--.,--. ,-| | \\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" + \"| `--, | /| || |\u0027 .-. | \\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" + \"| `---.| \\\\\\\\ \\\\\\\\ \u0027\u0027 \u0027\\\\\\\\ `-\\\u0027 \\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" + \"`------\u0027`--\u0027`--\u0027`----\u0027 `---\u0027 \\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" private final String LINE \u003d \"-\".repeat(60);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" * Prints the welcome message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" public void printWelcomeMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Hello! I\u0027m \\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LOGO);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" * Prints the farewell message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" public void printFarewellMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" * Prints confirmation when user successfully adds task to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" * @param task The Newly added task","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" * @param tasks The updated list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" public void printAddedTaskConfirmation(Task task, TaskList tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Got it. I\u0027ve added this task: \");","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":" * Prints confirmation when user successfully deletes task from the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" * @param task The deleted task","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" * @param tasks The updated list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":" public void printDeletedTaskConfirmation(Task task, TaskList tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Noted. I\u0027ve removed this task: \");","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ivyy-poison"},"content":" * Prints confirmation when user successfully marks task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ivyy-poison"},"content":" * @param task The marked task","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ivyy-poison"},"content":" public void printMarkedTaskConfirmation(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done: \");","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ivyy-poison"},"content":" * Prints the error message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ivyy-poison"},"content":" * @param e The exception that was thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ivyy-poison"},"content":" public void printErrorMessage(DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"OOPS!!! \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ivyy-poison"},"content":" * Prints the list of tasks to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ivyy-poison"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ivyy-poison"},"content":" public void printList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"ivyy-poison"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"ivyy-poison"},"content":" System.out.println((i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"ivyy-poison"},"content":" public void printFindMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"ivyy-poison"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ivyy-poison":112}},{"path":"src/main/java/duke/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.util;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"import java.util.List;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"/*","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates a list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" * It provides methods to add, remove, and get tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" * It also provides a method to get the number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a TaskList object with an empty list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" * The list of tasks is represented as an ArrayList.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a TaskList object with the given list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" * The list of tasks is represented as an ArrayList.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" * Adds the given task to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" * @param task The task to be added to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" * Returns the task at the given index in the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" * @param index The index of the task to be returned.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" * @return The task at the given index in the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" * @throws DukeException If the given index is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" public Task get(int index) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"Invalid task index\");","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" * Returns the number of tasks in the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":" * @return The number of tasks in the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":" public int size() {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"ivyy-poison"},"content":" return tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ivyy-poison"},"content":" * Removes the task at the given index in the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ivyy-poison"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ivyy-poison"},"content":" * @return The task that was removed.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ivyy-poison"},"content":" * @throws DukeException If the given index is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ivyy-poison"},"content":" public Task remove(int index) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"ivyy-poison"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"Invalid task index\");","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"ivyy-poison"},"content":" } else if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"There are no tasks to delete\");","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"ivyy-poison"},"content":" Task deletedTask \u003d this.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"ivyy-poison"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"ivyy-poison"},"content":" return deletedTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"ivyy-poison"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ivyy-poison"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ivyy-poison"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ivyy-poison"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ivyy-poison"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"ivyy-poison"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"ivyy-poison"},"content":" public TaskList filter(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ivyy-poison"},"content":" List\u003cTask\u003e filtered \u003d tasks.stream()","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ivyy-poison"},"content":" .filter(task -\u003e task.getDescription().contains(keyword))","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ivyy-poison"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ivyy-poison"},"content":" return new TaskList(filtered);","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ivyy-poison"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ivyy-poison":103}},{"path":"src/test/java/duke/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":" public void toStorageString_stringRepresentation_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d new Deadline (\"read book\", \"23 Aug 2020 2359\");","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"D | 0 | read book | 23 Aug 2020 2359\", deadline.toStorageString());","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" public void toString_stringRepresentation_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d new Deadline (\"read book\", \"23 Aug 2020 2359\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[D][ ] read book (by: 23-59-2020 23:59)\", deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" public void createDeadlineFromCommand_createDeadlineObject_success() throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d Deadline.createDeadlineFromCommand(\"deadline read book /by 23 Aug 2020 2359\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[D][ ] read book (by: 23-59-2020 23:59)\", deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" public void createDeadlineFromCommand_illegalArgument_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d Deadline.createDeadlineFromCommand(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"The description of a deadline cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" public void createDeadlineFromCommand_illegalArgument_exceptionThrown2() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d Deadline.createDeadlineFromCommand(\"deadline read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"The deadline command must contain a /by.\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" public void createDeadlineFromCommand_illegalArgument_exceptionThrown3() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d Deadline.createDeadlineFromCommand(\"deadline read book /by \");","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"The deadline command must contain a description after /by.\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" public void createDeadlineFromStorage_createDeadlineObject_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d Deadline.createDeadlineFromStorage(\"D | 0 | read book | 23 Aug 2020 2359\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[D][ ] read book (by: 23-59-2020 23:59)\", deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":" public void createDeadlineFromStorage_createDoneDeadlineObject_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d Deadline.createDeadlineFromStorage(\"D | 1 | read book | 23 Aug 2020 2359\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[D][X] read book (by: 23-59-2020 23:59)\", deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ivyy-poison":64}},{"path":"src/test/java/duke/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":" public void toStorageString_stringRepresentation_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" ToDo todo \u003d new ToDo (\"read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"T | 0 | read book\", todo.toStorageString());","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" public void toString_stringRepresentation_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" ToDo todo \u003d new ToDo (\"read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[T][ ] read book\", todo.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" public void createToDoFromCommand_createToDoObject_success() throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" ToDo todo \u003d ToDo.createToDoFromCommand(\"todo read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[T][ ] read book\", todo.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" public void createToDoFromCommand_illegalArgument_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" ToDo todo \u003d ToDo.createToDoFromCommand(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" public void createToDoFromStorage_createToDoObject_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" ToDo todo \u003d ToDo.createToDoFromStorage(\"T | 0 | read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[T][ ] read book\", todo.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" public void createToDoFromStorage_createDoneToDoObject_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" ToDo todo \u003d ToDo.createToDoFromStorage(\"T | 1 | read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[T][X] read book\", todo.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ivyy-poison":47}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"T | 0 | borrow book","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ivyy-poison":1}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"todo borrow book","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"mark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"something","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"deadline return book /by next monday","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"delete 5","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"delete 4","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"ivyy-poison":11}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"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":"ivyy-poison"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":"java {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" sourceCompatibility \u003d JavaVersion.VERSION_11","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" targetCompatibility \u003d JavaVersion.VERSION_11","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" mavenCentral()","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":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"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":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":" mainClassName(\"duke/Launcher\")","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"ivyy-poison"},"content":"build.dependsOn test","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ivyy-poison":28,"-":41}},{"path":"src/main/java/duke/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates the types of commands that can be executed by the application.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"public enum CommandType {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":" LIST, MARK, DELETE, TODO, DEADLINE, EVENT, UNKNOWN, FIND, EXIT","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ivyy-poison":8}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" * Duke is a personal assistant chatbot that helps a person to keep track of various things.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":"public class Duke {","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" private Parser parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a Duke object.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" public Duke() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" this.tasks \u003d new TaskList(storage.readTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" CommandType commandType \u003d parser.parseCommandType(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" return handleCommand(commandType, input);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" return \"Duke heard: \" + input;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" private void run() {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":" ui.printWelcomeMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":" try (Scanner sc \u003d new Scanner(System.in)) {","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":" while (true) {","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" break;","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":" CommandType commandType \u003d parser.parseCommandType(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":" handleCommand(commandType, input);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"ivyy-poison"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(new DukeException(\"An unexpected error occurred: \" + e.getMessage()));","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"ivyy-poison"},"content":" ui.printFarewellMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"ivyy-poison"},"content":" * Main entry point of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ivyy-poison"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ivyy-poison"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"ivyy-poison"},"content":" Duke ekud \u003d new Duke();","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"ivyy-poison"},"content":" ekud.run();","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":82,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":83,"author":{"gitId":"ivyy-poison"},"content":" // private void handleCommand(CommandType commandType, String command) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"ivyy-poison"},"content":" // switch (commandType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"ivyy-poison"},"content":" // case LIST:","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"ivyy-poison"},"content":" // ui.printList(tasks.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"ivyy-poison"},"content":" // break;","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"ivyy-poison"},"content":" // case MARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"ivyy-poison"},"content":" // markTask(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"ivyy-poison"},"content":" // break;","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"ivyy-poison"},"content":" // case DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"ivyy-poison"},"content":" // deleteTask(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"ivyy-poison"},"content":" // break;","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"ivyy-poison"},"content":" // case TODO:","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"ivyy-poison"},"content":" // case DEADLINE:","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"ivyy-poison"},"content":" // case EVENT:","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"ivyy-poison"},"content":" // addTask(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"ivyy-poison"},"content":" // break;","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"ivyy-poison"},"content":" // case FIND:","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"ivyy-poison"},"content":" // handleFind(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"ivyy-poison"},"content":" // break;","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"ivyy-poison"},"content":" // case UNKNOWN:","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"ivyy-poison"},"content":" // ui.printErrorMessage(new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"ivyy-poison"},"content":" // break;","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"ivyy-poison"},"content":" // }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"ivyy-poison"},"content":" // }","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"ivyy-poison"},"content":" private String handleCommand(CommandType commandType, String command) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"ivyy-poison"},"content":" Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"ivyy-poison"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-20"},{"lineNumber":111,"author":{"gitId":"ivyy-poison"},"content":" case LIST:","lastModifiedDate":"2023-08-20"},{"lineNumber":112,"author":{"gitId":"ivyy-poison"},"content":" ui.printList(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"ivyy-poison"},"content":" return ui.displayList(tasks.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"ivyy-poison"},"content":" case MARK:","lastModifiedDate":"2023-08-20"},{"lineNumber":116,"author":{"gitId":"ivyy-poison"},"content":" task \u003d markTask(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"ivyy-poison"},"content":" return ui.displayMarkedTaskConfirmation(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"ivyy-poison"},"content":" case DELETE:","lastModifiedDate":"2023-08-20"},{"lineNumber":120,"author":{"gitId":"ivyy-poison"},"content":" task \u003d deleteTask(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"ivyy-poison"},"content":" return ui.displayDeletedTaskConfirmation(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"ivyy-poison"},"content":" case TODO:","lastModifiedDate":"2023-08-20"},{"lineNumber":124,"author":{"gitId":"ivyy-poison"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-20"},{"lineNumber":125,"author":{"gitId":"ivyy-poison"},"content":" case EVENT:","lastModifiedDate":"2023-08-20"},{"lineNumber":126,"author":{"gitId":"ivyy-poison"},"content":" task \u003d addTask(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"ivyy-poison"},"content":" return ui.displayAddedTaskConfirmation(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"ivyy-poison"},"content":" case FIND:","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"ivyy-poison"},"content":" TaskList filteredList \u003d handleFind(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"ivyy-poison"},"content":" return ui.displayList(filteredList.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"ivyy-poison"},"content":" case UNKNOWN:","lastModifiedDate":"2023-08-20"},{"lineNumber":134,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"ivyy-poison"},"content":" return ui.displayErrorMessage(new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"ivyy-poison"},"content":" case EXIT:","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"ivyy-poison"},"content":" ui.printFarewellMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"ivyy-poison"},"content":" return ui.displayFarewellMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"ivyy-poison"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"ivyy-poison"},"content":" return \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":143,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":144,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":145,"author":{"gitId":"ivyy-poison"},"content":" private TaskList handleFind(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"ivyy-poison"},"content":" ui.printFindMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"ivyy-poison"},"content":" String keyword \u003d command.split(\" \")[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"ivyy-poison"},"content":" TaskList filtered \u003d tasks.filter(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"ivyy-poison"},"content":" ui.printList(filtered.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"ivyy-poison"},"content":" return filtered;","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"ivyy-poison"},"content":" private Task addTask(String task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":155,"author":{"gitId":"ivyy-poison"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-08-20"},{"lineNumber":156,"author":{"gitId":"ivyy-poison"},"content":" if (task.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":157,"author":{"gitId":"ivyy-poison"},"content":" newTask \u003d ToDo.createToDoFromCommand(task);","lastModifiedDate":"2023-08-20"},{"lineNumber":158,"author":{"gitId":"ivyy-poison"},"content":" } else if (task.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":159,"author":{"gitId":"ivyy-poison"},"content":" newTask \u003d Deadline.createDeadlineFromCommand(task);","lastModifiedDate":"2023-08-20"},{"lineNumber":160,"author":{"gitId":"ivyy-poison"},"content":" } else if (task.startsWith(\"event\")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":161,"author":{"gitId":"ivyy-poison"},"content":" newTask \u003d Event.createEventFromCommand(task);","lastModifiedDate":"2023-08-20"},{"lineNumber":162,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":163,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":164,"author":{"gitId":"ivyy-poison"},"content":" if (newTask !\u003d null) {","lastModifiedDate":"2023-08-20"},{"lineNumber":165,"author":{"gitId":"ivyy-poison"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-20"},{"lineNumber":166,"author":{"gitId":"ivyy-poison"},"content":" storage.write(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"ivyy-poison"},"content":" ui.printAddedTaskConfirmation(newTask, tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":169,"author":{"gitId":"ivyy-poison"},"content":" return newTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"ivyy-poison"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-20"},{"lineNumber":171,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":173,"author":{"gitId":"ivyy-poison"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":175,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":176,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"ivyy-poison"},"content":" private Task markTask(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":179,"author":{"gitId":"ivyy-poison"},"content":" int index \u003d Integer.parseInt(command.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-20"},{"lineNumber":180,"author":{"gitId":"ivyy-poison"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-20"},{"lineNumber":181,"author":{"gitId":"ivyy-poison"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-20"},{"lineNumber":182,"author":{"gitId":"ivyy-poison"},"content":" storage.write(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"ivyy-poison"},"content":" ui.printMarkedTaskConfirmation(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"ivyy-poison"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"ivyy-poison"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-20"},{"lineNumber":186,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(new DukeException(\"Invalid command format\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":187,"author":{"gitId":"ivyy-poison"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":188,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":189,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":190,"author":{"gitId":"ivyy-poison"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":192,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":193,"author":{"gitId":"ivyy-poison"},"content":" private Task deleteTask(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":195,"author":{"gitId":"ivyy-poison"},"content":" int index \u003d Integer.parseInt(command.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-20"},{"lineNumber":196,"author":{"gitId":"ivyy-poison"},"content":" Task task \u003d tasks.remove(index);","lastModifiedDate":"2023-08-20"},{"lineNumber":197,"author":{"gitId":"ivyy-poison"},"content":" storage.write(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":198,"author":{"gitId":"ivyy-poison"},"content":" ui.printDeletedTaskConfirmation(task, tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":199,"author":{"gitId":"ivyy-poison"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"ivyy-poison"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-20"},{"lineNumber":201,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(new DukeException(\"Invalid command format\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":202,"author":{"gitId":"ivyy-poison"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":203,"author":{"gitId":"ivyy-poison"},"content":" ui.printErrorMessage(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":205,"author":{"gitId":"ivyy-poison"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":207,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ivyy-poison":205,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"public class Launcher {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ivyy-poison":13}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"import duke.components.MainWindow;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ivyy-poison":33}},{"path":"src/main/java/duke/components/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.components;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" private Label dialog;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" // @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" // private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" private DialogBox(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" // displayPicture.setImage(img);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" return new DialogBox(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":" var db \u003d new DialogBox(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ivyy-poison":64}},{"path":"src/main/java/duke/components/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.components;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" private Duke duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" public void initialize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ivyy-poison":54}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates exceptions specific to Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a DukeException object with the given message.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":" * @param message The message of the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" super(message);","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a DukeException object with the given message and cause.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" * @param message The message of the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" * @param cause The cause of the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" public DukeException(String message, Throwable cause) {","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" super(message, cause);","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"ivyy-poison":26}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import duke.CommandType;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates a parser that parses user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":" * Returns the command type of the given command.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" * @param command The command to be parsed.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" * @return The command type of the given command.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" public CommandType parseCommandType(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" if (command.startsWith(\"list\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" return CommandType.LIST;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" return CommandType.MARK;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" return CommandType.DELETE;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" return CommandType.TODO;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" return CommandType.DEADLINE;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" return CommandType.EVENT;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" return CommandType.FIND;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.startsWith(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" return CommandType.EXIT;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" return CommandType.UNKNOWN;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ivyy-poison":38}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates the storage of tasks in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" private File file;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" private String filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a Storage object with the default file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" public Storage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" this.filePath \u003d \"data/duke.txt\";","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" this.file \u003d getFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" private File getFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" new DukeException(\"Unable to create file: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" return file;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" private static Task addTaskFromStorage(String task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" if (task.startsWith(\"T\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" newTask \u003d ToDo.createToDoFromStorage(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" } else if (task.startsWith(\"D\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" newTask \u003d Deadline.createDeadlineFromStorage(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" } else if (task.startsWith(\"E\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" newTask \u003d Event.createEventFromStorage(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":" return newTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" * Reads the tasks from duke.txt and returns them as a list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":" * @return The list of tasks read from duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":" * @throws DukeException If there is an error reading from duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ivyy-poison"},"content":" public List\u003cTask\u003e readTasks() throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"ivyy-poison"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"ivyy-poison"},"content":" try (Scanner sc \u003d new Scanner(file)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"ivyy-poison"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"ivyy-poison"},"content":" String entry \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"ivyy-poison"},"content":" Task newTask \u003d addTaskFromStorage(entry);","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"ivyy-poison"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"Unable to read from storage: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"ivyy-poison"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"ivyy-poison"},"content":" * Writes the given list of tasks to duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ivyy-poison"},"content":" * @param tasks The list of tasks to be written to duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ivyy-poison"},"content":" * @throws DukeException If there is an error writing to duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ivyy-poison"},"content":" public void write(List\u003cTask\u003e tasks) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"ivyy-poison"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"ivyy-poison"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"ivyy-poison"},"content":" fw.write(task.toStorageString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"ivyy-poison"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"Unable to write to storage: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"ivyy-poison"},"content":" * Writes the given task to duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ivyy-poison"},"content":" * @param newTask The task to be written to duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ivyy-poison"},"content":" * @throws DukeException If there is an error writing to duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ivyy-poison"},"content":" public void write(Task newTask) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"ivyy-poison"},"content":" FileWriter fw \u003d new FileWriter(file, true);","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"ivyy-poison"},"content":" fw.write(newTask.toStorageString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"ivyy-poison"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"Unable to write to storage: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ivyy-poison":115}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates a task that needs to be done before a specific date/time.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" * Constructor for a Deadline object with the given description and by.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" * @param by The date/time by which the deadline needs to be done.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"d MMM yyyy HHmm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a Deadline object with a given description and by as given in command string.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" * @param command The command to create the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" * @return The deadline object constructed from the given command.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" public static Deadline createDeadlineFromCommand(String command) throws DukeException {","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" if (command.length() \u003c\u003d 9) {","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" } else if (!command.contains(\" /by \")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The deadline command must contain a /by.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.endsWith(\" /by \")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The deadline command must contain a description after /by.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" String[] split \u003d command.substring(9).split(\" /by \");","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" return new Deadline(split[0], split[1]);","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a Deadline object with the given description, by, and done status.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" * @param storageString The string from duke.txt representing a row of data for a deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" * @return The deadline object constructed from the given storage string.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" public static Deadline createDeadlineFromStorage(String storageString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" String[] split \u003d storageString.split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" String isDone \u003d split[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" String taskDescription \u003d split[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" String by \u003d split[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d new Deadline(taskDescription, by);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":" if (isDone.equals(\"1\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" return deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ivyy-poison"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"ivyy-poison"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":70,"author":{"gitId":"ivyy-poison"},"content":" String byString \u003d by.format(DateTimeFormatter.ofPattern(\"dd-mm-yyyy HH:mm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"ivyy-poison"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byString + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":73,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the deadline for storage in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the deadline for storage in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ivyy-poison"},"content":" public String toStorageString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"ivyy-poison"},"content":" String byString \u003d by.format(DateTimeFormatter.ofPattern(\"d MMM yyyy HHmm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"ivyy-poison"},"content":" return \"D\" + super.toStorageString() + \" | \" + byString;","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"ivyy-poison":83}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates a task that starts at a specific time and ends at a specific time.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" * Constructor for an Event object with the given description, start time, and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"d MMM yyyy HHmm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter.ofPattern(\"d MMM yyyy HHmm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" * Constructs an Event object with a given description, start time, end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" * @param command The command to create the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" * @return The event object constructed from the given command.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" public static Event createEventFromCommand(String command) throws DukeException {","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" if (command.length() \u003c\u003d 6) {","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" } else if (!command.contains(\" /from \")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The event command must contain a /from.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" } else if (!command.contains(\" /to \")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The event command must contain a /to.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.endsWith(\" /from \")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The event command must contain a description after /from.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" } else if (command.endsWith(\" /to \")) {","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The event command must contain a description after /to.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" String[] tmpSplit \u003d command.substring(6).split(\" /from \");","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" String taskDescription \u003d tmpSplit[0];","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" String[] split \u003d tmpSplit[1].split(\" /to \");","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" String from \u003d split[0];","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" String to \u003d split[1];","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" return new Event(taskDescription, from, to);","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":" * Constructs an Event object with the given description, start time, end time, and done status.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":" * @param storageString The string from duke.txt representing a row of data for an event.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" * @return The event object constructed from the given string.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":" public static Event createEventFromStorage(String storageString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":" String[] split \u003d storageString.split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":" String isDone \u003d split[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"ivyy-poison"},"content":" String taskDescription \u003d split[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"ivyy-poison"},"content":" String from \u003d split[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"ivyy-poison"},"content":" String to \u003d split[4];","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"ivyy-poison"},"content":" Event event \u003d new Event(taskDescription, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"ivyy-poison"},"content":" if (isDone.equals(\"1\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"ivyy-poison"},"content":" event.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"ivyy-poison"},"content":" return event;","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ivyy-poison"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":81,"author":{"gitId":"ivyy-poison"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":82,"author":{"gitId":"ivyy-poison"},"content":" String fromString \u003d from.format(DateTimeFormatter.ofPattern(\"dd-mm-yyyy HH:mm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"ivyy-poison"},"content":" String toString \u003d to.format(DateTimeFormatter.ofPattern(\"dd-mm-yyyy HH:mm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"ivyy-poison"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromString + \" to: \" + toString + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":86,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":87,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the event for storage in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the event for storage in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ivyy-poison"},"content":" public String toStorageString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"ivyy-poison"},"content":" String fromString \u003d from.format(DateTimeFormatter.ofPattern(\"d MMM yyyy HHmm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"ivyy-poison"},"content":" String toString \u003d to.format(DateTimeFormatter.ofPattern(\"d MMM yyyy HHmm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"ivyy-poison"},"content":" return \"E\" + super.toStorageString() + \" | \" + fromString + \" | \" + toString;","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"ivyy-poison":97}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":" protected String description;","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":" * Constructor for a Task object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" * Returns the status icon associated with whether a task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" * @return The status icon associated with whether a task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the task for storage in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the task for storage in duke.txt..","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" public String toStorageString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" return \" | \" + (this.isDone ? 1 : 0) + \" | \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" return this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"ivyy-poison":62}},{"path":"src/main/java/duke/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":" * Constructor for a ToDo object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" * @param description The description of the todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a ToDo object with a given description as found in the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" * @param command The command to create the todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" * @return The todo object constructed from the given command.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" public static ToDo createToDoFromCommand(String command) throws DukeException {","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" if (command.length() \u003c\u003d 5) {","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" return new ToDo(command.substring(5));","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a ToDo object with the given description and done status.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" * @param storageString The string from duke.txt representing a row of data for a todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" * @return The todo object constructed from the given storage string.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" public static ToDo createToDoFromStorage(String storageString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" String[] split \u003d storageString.split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" String isDone \u003d split[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" String taskDescription \u003d split[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" ToDo todo \u003d new ToDo(taskDescription);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" if (isDone.equals(\"1\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" return todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" * Returns the string representation of the todo for storage in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":" * @return The string representation of the todo for storage in duke.txt.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":" public String toStorageString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"ivyy-poison"},"content":" return \"T\" + super.toStorageString();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"ivyy-poison":67}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import java.util.List;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates the user interface of the application.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" * It provides methods to print various messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" private final String LOGO \u003d \",------.,--. ,--. \\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" + \"| .---\\\u0027| |,-.,--.,--. ,-| | \\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" + \"| `--, | /| || |\u0027 .-. | \\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" + \"| `---.| \\\\\\\\ \\\\\\\\ \u0027\u0027 \u0027\\\\\\\\ `-\\\u0027 \\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" + \"`------\u0027`--\u0027`--\u0027`----\u0027 `---\u0027 \\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" private final String LINE \u003d \"-\".repeat(60);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" * Prints the welcome message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" public void printWelcomeMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Hello! I\u0027m \\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LOGO);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" * Returns the welcome message to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" * @return The welcome message as a String.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" public String displayWelcomeMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" return \"Hello! I\u0027m \\n\" + LOGO + \"What can I do for you?\";","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" * Prints the farewell message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" public void printFarewellMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" * Returns the farewell message to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" * @return The farewell message as a String.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":" public String displayFarewellMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" * Prints confirmation when user successfully adds task to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":" * @param task The Newly added task","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":" * @param tasks The updated list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ivyy-poison"},"content":" public void printAddedTaskConfirmation(Task task, TaskList tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Got it. I\u0027ve added this task: \");","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"ivyy-poison"},"content":" * Returns confirmation when user successfully adds task to the list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"ivyy-poison"},"content":" * @param task The Newly added task","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"ivyy-poison"},"content":" * @param tasks The updated list of tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"ivyy-poison"},"content":" * @return The confirmation message as a String.","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"ivyy-poison"},"content":" public String displayAddedTaskConfirmation(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"ivyy-poison"},"content":" return \"Got it. I\u0027ve added this task: \\n\" + \" \" + task + \"\\n\" + \"Now you have \" + tasks.size()","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"ivyy-poison"},"content":" + \" tasks in the list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"ivyy-poison"},"content":" * Prints confirmation when user successfully deletes task from the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ivyy-poison"},"content":" * @param task The deleted task","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ivyy-poison"},"content":" * @param tasks The updated list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ivyy-poison"},"content":" public void printDeletedTaskConfirmation(Task task, TaskList tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Noted. I\u0027ve removed this task: \");","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"ivyy-poison"},"content":" * Returns confirmation when user successfully deletes task from the list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"ivyy-poison"},"content":" * @param task The deleted task","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"ivyy-poison"},"content":" * @param tasks The updated list of tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"ivyy-poison"},"content":" * @return The confirmation message as a String.","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"ivyy-poison"},"content":" public String displayDeletedTaskConfirmation(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"ivyy-poison"},"content":" return \"Noted. I\u0027ve removed this task: \\n\" + \" \" + task + \"\\n\" + \"Now you have \" + tasks.size()","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"ivyy-poison"},"content":" + \" tasks in the list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"ivyy-poison"},"content":" * Prints confirmation when user successfully marks task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"ivyy-poison"},"content":" * @param task The marked task","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"ivyy-poison"},"content":" public void printMarkedTaskConfirmation(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done: \");","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"ivyy-poison"},"content":" public String displayMarkedTaskConfirmation(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"ivyy-poison"},"content":" return \"Nice! I\u0027ve marked this task as done: \\n\" + \" \" + task;","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"ivyy-poison"},"content":" * Prints the error message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"ivyy-poison"},"content":" * @param e The exception that was thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"ivyy-poison"},"content":" public void printErrorMessage(DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"OOPS!!! \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"ivyy-poison"},"content":" * Returns the error message to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"ivyy-poison"},"content":" * @param e The exception that was thrown.","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"ivyy-poison"},"content":" * @return The error message as a String.","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"ivyy-poison"},"content":" public String displayErrorMessage(DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"ivyy-poison"},"content":" return \"OOPS!!! \" + e.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"ivyy-poison"},"content":" * Prints the list of tasks to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"ivyy-poison"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"ivyy-poison"},"content":" public void printList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"ivyy-poison"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"ivyy-poison"},"content":" System.out.println((i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"ivyy-poison"},"content":" * Returns the list of tasks to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"ivyy-poison"},"content":" * @param tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"ivyy-poison"},"content":" * @return The list of tasks as a String.","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"ivyy-poison"},"content":" public String displayList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"ivyy-poison"},"content":" String result \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"ivyy-poison"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"ivyy-poison"},"content":" result +\u003d (i + 1) + \". \" + tasks.get(i) + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"ivyy-poison"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"ivyy-poison"},"content":" * Prints the header string before the displayed search result.","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"ivyy-poison"},"content":" public void printFindMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"ivyy-poison"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":185,"author":{"gitId":"ivyy-poison"},"content":" * Returns a header string before the displayed search result.","lastModifiedDate":"2023-09-05"},{"lineNumber":186,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":187,"author":{"gitId":"ivyy-poison"},"content":" * @return The header of search result as a String.","lastModifiedDate":"2023-09-05"},{"lineNumber":188,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":189,"author":{"gitId":"ivyy-poison"},"content":" public String displayFindMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"ivyy-poison"},"content":" return \"Here are the matching tasks in your list:\";","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ivyy-poison":192}},{"path":"src/main/java/duke/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.util;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"import java.util.List;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":" * Encapsulates a list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" * It provides methods to add, remove, and get tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" * It also provides a method to get the number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a TaskList object with an empty list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" * The list of tasks is represented as an ArrayList.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" * Constructs a TaskList object with the given list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" * The list of tasks is represented as an ArrayList.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" * Adds the given task to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" * @param task The task to be added to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" * Returns the task at the given index in the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" * @param index The index of the task to be returned.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" * @return The task at the given index in the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" * @throws DukeException If the given index is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":" public Task get(int index) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"Invalid task index\");","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":" * Returns the number of tasks in the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" * @return The number of tasks in the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":" public int size() {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":" return tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"ivyy-poison"},"content":" * Removes the task at the given index in the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ivyy-poison"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ivyy-poison"},"content":" * @return The task that was removed.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ivyy-poison"},"content":" * @throws DukeException If the given index is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ivyy-poison"},"content":" public Task remove(int index) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"ivyy-poison"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"Invalid task index\");","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"ivyy-poison"},"content":" } else if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"ivyy-poison"},"content":" throw new DukeException(\"There are no tasks to delete\");","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"ivyy-poison"},"content":" Task deletedTask \u003d this.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"ivyy-poison"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"ivyy-poison"},"content":" return deletedTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"ivyy-poison"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ivyy-poison"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ivyy-poison"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"ivyy-poison"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"ivyy-poison"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"ivyy-poison"},"content":" * Returns a new TaskList object with tasks that contain the given keyword in their description.","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"ivyy-poison"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"ivyy-poison"},"content":" * @param keyword The keyword to filter the tasks by.","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"ivyy-poison"},"content":" * @return A new TaskList object with tasks that contain the given keyword in their description.","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"ivyy-poison"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"ivyy-poison"},"content":" public TaskList filter(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ivyy-poison"},"content":" List\u003cTask\u003e filtered \u003d tasks.stream()","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ivyy-poison"},"content":" .filter(task -\u003e task.getDescription().contains(keyword))","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ivyy-poison"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ivyy-poison"},"content":" return new TaskList(filtered);","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ivyy-poison":107}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" style\u003d\"-fx-border-color: grey; -fx-border-width: 5;\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"15.0\" right\u003d\"15.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" \u003c/padding\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ivyy-poison":19}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"\u003c?import javafx.scene.Cursor?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"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.components.MainWindow\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" promptText\u003d\"Enter message here\" AnchorPane.bottomAnchor\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" \u003cFont name\u003d\"System Bold\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" \u003c/font\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"315.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"85.0\" text\u003d\"Send\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" \u003ccursor\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" \u003cCursor fx:constant\u003d\"DEFAULT\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" \u003c/cursor\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"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-02"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ivyy-poison":27}},{"path":"src/test/java/duke/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":" public void toStorageString_stringRepresentation_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d new Deadline (\"read book\", \"23 Aug 2020 2359\");","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"D | 0 | read book | 23 Aug 2020 2359\", deadline.toStorageString());","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" public void toString_stringRepresentation_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d new Deadline (\"read book\", \"23 Aug 2020 2359\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[D][ ] read book (by: 23-59-2020 23:59)\", deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" public void createDeadlineFromCommand_createDeadlineObject_success() throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d Deadline.createDeadlineFromCommand(\"deadline read book /by 23 Aug 2020 2359\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[D][ ] read book (by: 23-59-2020 23:59)\", deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" public void createDeadlineFromCommand_illegalArgument_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d Deadline.createDeadlineFromCommand(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"The description of a deadline cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" public void createDeadlineFromCommand_illegalArgument_exceptionThrown2() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d Deadline.createDeadlineFromCommand(\"deadline read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"The deadline command must contain a /by.\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" public void createDeadlineFromCommand_illegalArgument_exceptionThrown3() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d Deadline.createDeadlineFromCommand(\"deadline read book /by \");","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"The deadline command must contain a description after /by.\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ivyy-poison"},"content":" public void createDeadlineFromStorage_createDeadlineObject_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d Deadline.createDeadlineFromStorage(\"D | 0 | read book | 23 Aug 2020 2359\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[D][ ] read book (by: 23-59-2020 23:59)\", deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ivyy-poison"},"content":" public void createDeadlineFromStorage_createDoneDeadlineObject_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ivyy-poison"},"content":" Deadline deadline \u003d Deadline.createDeadlineFromStorage(\"D | 1 | read book | 23 Aug 2020 2359\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[D][X] read book (by: 23-59-2020 23:59)\", deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ivyy-poison":64}},{"path":"src/test/java/duke/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":" public void toStorageString_stringRepresentation_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":" ToDo todo \u003d new ToDo (\"read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"T | 0 | read book\", todo.toStorageString());","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ivyy-poison"},"content":" public void toString_stringRepresentation_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ivyy-poison"},"content":" ToDo todo \u003d new ToDo (\"read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[T][ ] read book\", todo.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ivyy-poison"},"content":" public void createToDoFromCommand_createToDoObject_success() throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ivyy-poison"},"content":" ToDo todo \u003d ToDo.createToDoFromCommand(\"todo read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[T][ ] read book\", todo.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ivyy-poison"},"content":" public void createToDoFromCommand_illegalArgument_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ivyy-poison"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ivyy-poison"},"content":" ToDo todo \u003d ToDo.createToDoFromCommand(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ivyy-poison"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ivyy-poison"},"content":" public void createToDoFromStorage_createToDoObject_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ivyy-poison"},"content":" ToDo todo \u003d ToDo.createToDoFromStorage(\"T | 0 | read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[T][ ] read book\", todo.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ivyy-poison"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ivyy-poison"},"content":" public void createToDoFromStorage_createDoneToDoObject_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ivyy-poison"},"content":" ToDo todo \u003d ToDo.createToDoFromStorage(\"T | 1 | read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ivyy-poison"},"content":" assertEquals(\"[T][X] read book\", todo.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ivyy-poison"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ivyy-poison"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ivyy-poison"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ivyy-poison":47}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"T | 0 | borrow book","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ivyy-poison":1}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ivyy-poison"},"content":"todo borrow book","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"ivyy-poison"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"ivyy-poison"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"ivyy-poison"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"ivyy-poison"},"content":"mark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"ivyy-poison"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"ivyy-poison"},"content":"something","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"ivyy-poison"},"content":"deadline return book /by next monday","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"ivyy-poison"},"content":"delete 5","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"ivyy-poison"},"content":"delete 4","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"ivyy-poison"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"ivyy-poison":11}}] diff --git a/ivyy-poison_ip_master/commits.json b/ivyy-poison_ip_master/commits.json index df24c7e3..38a4352c 100644 --- a/ivyy-poison_ip_master/commits.json +++ b/ivyy-poison_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ivyy-poison":[{"date":"2023-08-20","commitResults":[{"hash":"66f9511b6a722c5f288b276e157ff06feb8775e1","isMergeCommit":false,"messageTitle":"Achieve Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":6}}},{"hash":"d42b49767c8ca8dc03f9aa2538cfd4621892b60d","isMergeCommit":false,"messageTitle":"Achieve Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":12}}},{"hash":"271b356a5d6e787da22694838120fd97572c5fa4","isMergeCommit":false,"messageTitle":"Achieve Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":10}}},{"hash":"8e05a41ee44dce980026234c38078962ff8cb744","isMergeCommit":false,"messageTitle":"Achieve Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":2}}},{"hash":"edf9c9e136d04e3c9d1fc7947a538335b6acdb07","isMergeCommit":false,"messageTitle":"Achieve Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":5}}},{"hash":"38ced77ba8a6371859b6432755b29840939e09a4","isMergeCommit":false,"messageTitle":"Achieve Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"sh":{"insertions":0,"deletions":0}}},{"hash":"6d7a708d7bc49fd82c3a0cbe523be37a4ccd9cc1","isMergeCommit":false,"messageTitle":"Achieve Level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":34}}},{"hash":"a3c0efb5d3a9dc7e3c4880e341c40db7f47b90a0","isMergeCommit":false,"messageTitle":"Achieve Level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":20,"deletions":0}}},{"hash":"553d892ca1f462ba2c634eafe9b56d1f181e0e50","isMergeCommit":false,"messageTitle":"Achieve A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":8}}}]},{"date":"2023-08-26","commitResults":[{"hash":"a575b2095138103accca5c7a0376646939aa584a","isMergeCommit":false,"messageTitle":"Refactor code to better adhere to standards","messageBody":"* Remove unnecessary indentations on line breaks and switch block\n","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":21}}}]},{"date":"2023-08-27","commitResults":[{"hash":"ac01a77ce9398ae43bb329e4235af803cfcdb1e1","isMergeCommit":false,"messageTitle":"Implement basic read and write into data file","messageBody":"* Read from text file to generate event list\n* Write events into text file using chatbot interface\n","fileTypesAndContributionMap":{"java":{"insertions":114,"deletions":0}}},{"hash":"9c6361ed599843525bd29620eceea8ce89521f97","isMergeCommit":false,"messageTitle":"Implement save into storage for mark and delete function","messageBody":"* Update gitignore to exclude /data folder in commits to github\n* Implement overrideStorage static method to update data file after each marked or deleted event\n","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"7172b25bb295418a3443d5d2b0229ba29e584b76","isMergeCommit":false,"messageTitle":"Incorporate date-time format into implementation","messageBody":"* Store datetimes as LocalDateTime objects in Tasks\n* Accept only well-formatted date times as valid inputs to create new tasks\n* Display and render tasks with differently formatted date time\n","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":10}}},{"hash":"9077139a1dfe314c30d08205ce2464edd30fec2c","isMergeCommit":false,"messageTitle":"Implement classes for Parser, Ui, Storage, and TaskList","messageBody":"* Refactor code to better adhere to OOP design principles\n* Make minor tweaks to formatting of various event types for bugfix\n* Create Parser, Ui, Storage and TaskList classes\n","fileTypesAndContributionMap":{"java":{"insertions":263,"deletions":179}}},{"hash":"fdfffc55b0a5d631597c17a88310118790299963","isMergeCommit":false,"messageTitle":"Refactor code and Achieve a-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":23}}},{"hash":"c2d8c22da8119893c7f1834384d6e3bd5138fd26","isMergeCommit":false,"messageTitle":"Organize classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":3}}},{"hash":"a5295468a1be70028f8214c5fd0c372ccdb39ba3","isMergeCommit":false,"messageTitle":"Initialise Gradle file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1},"txt":{"insertions":1,"deletions":0}}},{"hash":"4b26ad0948e9c723afccf5074cbf88b4fdfbad04","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"* Merge add-gradle-support branch into master in order to incorporate gradle support into Duke chatbot\n","fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"949f73669d8b09349cb0133976b4d2c4242298a0","isMergeCommit":true,"messageTitle":"Merge add-gradle-support to integrate gradle with packaging","messageBody":"Merge branch \u0027add-gradle-support\u0027 into a-Packages\n","fileTypesAndContributionMap":{}},{"hash":"4895bc6e8b264f44a9d5951face26ac87c8ef829","isMergeCommit":false,"messageTitle":"Untrack data folder","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"e1590948464c0092e0cd5e0a882a478c1c70be54","isMergeCommit":false,"messageTitle":"Add gradle support to ip project","messageBody":"* Refactor code and arrange into file directories supported by gradle\n* Tweak build.gradle file and add main Java class.\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":9,"deletions":5}}},{"hash":"cf8da8fe65ee79a61c3e03d2c939d003f78391a5","isMergeCommit":true,"messageTitle":"Merge commit \u0027e1590948\u0027 into main","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"0f6ead730cb11d94d965850462f0af595ee4c856","isMergeCommit":false,"messageTitle":"Implement JUnit tests for ToDo and Deadline classes","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":111,"deletions":0}}},{"hash":"d9ecec31cf7950ae4c7bb7ed491a7bec6f361f34","isMergeCommit":false,"messageTitle":"Tweak build.gradle and create JAR file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1}}},{"hash":"c3023a53642a3dd5dfe79a1a3192a6f157c7db14","isMergeCommit":false,"messageTitle":"Add JavaDoc comments for all public methods in Duke package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":255,"deletions":4}}},{"hash":"eccc5deaa6694b9b39af9d25299332e8ba8007f6","isMergeCommit":false,"messageTitle":"Implement search feature for tasks in task list","messageBody":"* Implement new filter method in TaskList that returns a new TaskList object\n* Implement new method to handle find command\n","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":1}}},{"hash":"84f4ec6dd88139e8c029dd8de60439220db5a9c7","isMergeCommit":false,"messageTitle":"Refactor code to improve coding standard","messageBody":"* Reorder package imports to improve readability in determining dependencies\n","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":4}}},{"hash":"0eda6ae9f65af56af1ae4f26888998b14a8818e4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Javadoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7b19362d1ab47a15759c73be0f33a013078e1178","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ivyy-poison":{"java":968,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":8,"txt":12}},"authorContributionVariance":{"ivyy-poison":53149.54},"authorDisplayNameMap":{"ivyy-poison":"CS2103T-W11-1 IVAN.. HAO"}} +{"authorDailyContributionsMap":{"ivyy-poison":[{"date":"2023-08-20","commitResults":[{"hash":"66f9511b6a722c5f288b276e157ff06feb8775e1","isMergeCommit":false,"messageTitle":"Achieve Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":6}}},{"hash":"d42b49767c8ca8dc03f9aa2538cfd4621892b60d","isMergeCommit":false,"messageTitle":"Achieve Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":12}}},{"hash":"271b356a5d6e787da22694838120fd97572c5fa4","isMergeCommit":false,"messageTitle":"Achieve Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":10}}},{"hash":"8e05a41ee44dce980026234c38078962ff8cb744","isMergeCommit":false,"messageTitle":"Achieve Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":2}}},{"hash":"edf9c9e136d04e3c9d1fc7947a538335b6acdb07","isMergeCommit":false,"messageTitle":"Achieve Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":5}}},{"hash":"38ced77ba8a6371859b6432755b29840939e09a4","isMergeCommit":false,"messageTitle":"Achieve Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"sh":{"insertions":0,"deletions":0}}},{"hash":"6d7a708d7bc49fd82c3a0cbe523be37a4ccd9cc1","isMergeCommit":false,"messageTitle":"Achieve Level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":34}}},{"hash":"a3c0efb5d3a9dc7e3c4880e341c40db7f47b90a0","isMergeCommit":false,"messageTitle":"Achieve Level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":20,"deletions":0}}},{"hash":"553d892ca1f462ba2c634eafe9b56d1f181e0e50","isMergeCommit":false,"messageTitle":"Achieve A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":8}}}]},{"date":"2023-08-26","commitResults":[{"hash":"a575b2095138103accca5c7a0376646939aa584a","isMergeCommit":false,"messageTitle":"Refactor code to better adhere to standards","messageBody":"* Remove unnecessary indentations on line breaks and switch block\n","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":21}}}]},{"date":"2023-08-27","commitResults":[{"hash":"ac01a77ce9398ae43bb329e4235af803cfcdb1e1","isMergeCommit":false,"messageTitle":"Implement basic read and write into data file","messageBody":"* Read from text file to generate event list\n* Write events into text file using chatbot interface\n","fileTypesAndContributionMap":{"java":{"insertions":114,"deletions":0}}},{"hash":"9c6361ed599843525bd29620eceea8ce89521f97","isMergeCommit":false,"messageTitle":"Implement save into storage for mark and delete function","messageBody":"* Update gitignore to exclude /data folder in commits to github\n* Implement overrideStorage static method to update data file after each marked or deleted event\n","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"7172b25bb295418a3443d5d2b0229ba29e584b76","isMergeCommit":false,"messageTitle":"Incorporate date-time format into implementation","messageBody":"* Store datetimes as LocalDateTime objects in Tasks\n* Accept only well-formatted date times as valid inputs to create new tasks\n* Display and render tasks with differently formatted date time\n","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":10}}},{"hash":"9077139a1dfe314c30d08205ce2464edd30fec2c","isMergeCommit":false,"messageTitle":"Implement classes for Parser, Ui, Storage, and TaskList","messageBody":"* Refactor code to better adhere to OOP design principles\n* Make minor tweaks to formatting of various event types for bugfix\n* Create Parser, Ui, Storage and TaskList classes\n","fileTypesAndContributionMap":{"java":{"insertions":263,"deletions":179}}},{"hash":"fdfffc55b0a5d631597c17a88310118790299963","isMergeCommit":false,"messageTitle":"Refactor code and Achieve a-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":23}}},{"hash":"c2d8c22da8119893c7f1834384d6e3bd5138fd26","isMergeCommit":false,"messageTitle":"Organize classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":3}}},{"hash":"a5295468a1be70028f8214c5fd0c372ccdb39ba3","isMergeCommit":false,"messageTitle":"Initialise Gradle file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1},"txt":{"insertions":1,"deletions":0}}},{"hash":"4b26ad0948e9c723afccf5074cbf88b4fdfbad04","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"* Merge add-gradle-support branch into master in order to incorporate gradle support into Duke chatbot\n","fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"949f73669d8b09349cb0133976b4d2c4242298a0","isMergeCommit":true,"messageTitle":"Merge add-gradle-support to integrate gradle with packaging","messageBody":"Merge branch \u0027add-gradle-support\u0027 into a-Packages\n","fileTypesAndContributionMap":{}},{"hash":"4895bc6e8b264f44a9d5951face26ac87c8ef829","isMergeCommit":false,"messageTitle":"Untrack data folder","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"e1590948464c0092e0cd5e0a882a478c1c70be54","isMergeCommit":false,"messageTitle":"Add gradle support to ip project","messageBody":"* Refactor code and arrange into file directories supported by gradle\n* Tweak build.gradle file and add main Java class.\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":9,"deletions":5}}},{"hash":"cf8da8fe65ee79a61c3e03d2c939d003f78391a5","isMergeCommit":true,"messageTitle":"Merge commit \u0027e1590948\u0027 into main","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"0f6ead730cb11d94d965850462f0af595ee4c856","isMergeCommit":false,"messageTitle":"Implement JUnit tests for ToDo and Deadline classes","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":111,"deletions":0}}},{"hash":"d9ecec31cf7950ae4c7bb7ed491a7bec6f361f34","isMergeCommit":false,"messageTitle":"Tweak build.gradle and create JAR file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1}}},{"hash":"c3023a53642a3dd5dfe79a1a3192a6f157c7db14","isMergeCommit":false,"messageTitle":"Add JavaDoc comments for all public methods in Duke package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":255,"deletions":4}}},{"hash":"eccc5deaa6694b9b39af9d25299332e8ba8007f6","isMergeCommit":false,"messageTitle":"Implement search feature for tasks in task list","messageBody":"* Implement new filter method in TaskList that returns a new TaskList object\n* Implement new method to handle find command\n","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":1}}},{"hash":"84f4ec6dd88139e8c029dd8de60439220db5a9c7","isMergeCommit":false,"messageTitle":"Refactor code to improve coding standard","messageBody":"* Reorder package imports to improve readability in determining dependencies\n","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":4}}},{"hash":"0eda6ae9f65af56af1ae4f26888998b14a8818e4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Javadoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7b19362d1ab47a15759c73be0f33a013078e1178","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"96735777f807823e5d0ce13c0744ebf2474c6c06","isMergeCommit":false,"messageTitle":"Implement tutorial part 1","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"java":{"insertions":14,"deletions":1}}},{"hash":"66d72b2e65a0e875617fb37f6b2dc8fa5e2fe57a","isMergeCommit":false,"messageTitle":"Implement tutorial part 2","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":63,"deletions":3}}}]},{"date":"2023-09-02","commitResults":[{"hash":"feb922f6a67a13b95062dde834f62cf925e7cde1","isMergeCommit":false,"messageTitle":"Implement tutorial part 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":1}}},{"hash":"93c450a6e390e4466bb71cf4492ec358036605a1","isMergeCommit":false,"messageTitle":"Implement tutorial part 4","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":46,"deletions":0},"java":{"insertions":127,"deletions":26}}},{"hash":"7a32416d36309111a2c8f3b4f9b772fefef5331f","isMergeCommit":false,"messageTitle":"Integrate chatbot functionalities with JavaFX UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":168}}},{"hash":"bd2f896dc293bd082916c775005c74fdb9fde4b4","isMergeCommit":false,"messageTitle":"Add checkstyle checks to gradle project","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"aef855c6081a5fcee4b86e5fc9da724e86c960bc","isMergeCommit":false,"messageTitle":"Refactor code to adhere to style rules","messageBody":"* Ran checkstyle on code in main folder and fixed most errors\n","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":128,"deletions":130}}}]},{"date":"2023-09-05","commitResults":[{"hash":"6160c983c7193a1296cbc3abf6ba503bcd3ad980","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ivyy-poison":{"java":1275,"md":0,"fxml":46,"sh":0,"bat":0,"gradle":28,"txt":12}},"authorContributionVariance":{"ivyy-poison":53157.004},"authorDisplayNameMap":{"ivyy-poison":"CS2103T-W11-1 IVAN.. HAO"}} diff --git a/jedkohjk_ip_master/authorship.json b/jedkohjk_ip_master/authorship.json index ebb85ef6..13a3c026 100644 --- a/jedkohjk_ip_master/authorship.json +++ b/jedkohjk_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":"jedkohjk"},"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":"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":{"jedkohjk":1,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.VerboseUi;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * The main chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"public class Duke {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" Duke bot \u003d new Duke(\"chatBot\");","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" bot.run();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * Constructor for Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @param name Name of the bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" public Duke(String name) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" this.tasks \u003d this.storage.loadTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" this.ui \u003d new VerboseUi(name);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * Runs the chatbot, receiving commands and terminating only on bye.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" ui.greet();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" Command cmd \u003d Parser.parse(ui.readCommand());","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" cmd.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" isExit \u003d cmd.isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" ui.print(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":53}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * Command to terminate the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Constructor for ByeCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" public ByeCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" super(\"bye\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" return List.of();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" ui.print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":50}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.Argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Actionable representing a command input by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" protected final String commandName;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" protected Map\u003cString, Object\u003e args;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" * Constructor for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @param commandName The name of the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" public Command(String commandName, Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" this.commandName \u003d commandName;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" this.args \u003d args;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" protected abstract List\u003cCommandElement\u003e getCommandElements();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * Generates regex pattern expected for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" * @return Regex pattern expected for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" public Pattern getPattern() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" return Pattern.compile(String.join(\"\", this.getCommandElements().stream().map(","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" e -\u003e e.getRegexForm()).collect(Collectors.toList())));","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * Generates readable expected structure for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * @return Readable expected structure for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" public String getStructure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" List\u003cString\u003e struct \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" struct.add(commandName);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" for (CommandElement e : this.getCommandElements()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" struct.add(e.getName());","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" return String.join(\" \", struct);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" List\u003cString\u003e commandList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" commandList.add(this.commandName);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" int i \u003d 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" for (CommandElement e : this.getCommandElements()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" if (e instanceof Argument) {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" commandList.add(((Argument) e).formatOutput(args.get(e.toString())).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":" commandList.add(e.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"jedkohjk"},"content":" return String.join(\" \", commandList);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jedkohjk"},"content":" * Generates list of arguments expected from command.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jedkohjk"},"content":" * @return List of arguments expected from command.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jedkohjk"},"content":" public List\u003cArgument\u003e getArguments() {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"jedkohjk"},"content":" List\u003cArgument\u003e argsList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"jedkohjk"},"content":" argsList.add(null);","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"jedkohjk"},"content":" for (CommandElement e : this.getCommandElements()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"jedkohjk"},"content":" if (e instanceof Argument) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"jedkohjk"},"content":" argsList.add((Argument) e);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"jedkohjk"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"jedkohjk"},"content":" argsList.add(null);","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"jedkohjk"},"content":" return argsList;","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"jedkohjk"},"content":" * Get command to act.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"jedkohjk"},"content":" * @param tasks The list of tasks to act on.","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"jedkohjk"},"content":" * @param ui The Ui to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"jedkohjk"},"content":" * @param storage The Storage to update data.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"jedkohjk"},"content":" * @throws DukeException When the execution fails.","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"jedkohjk"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"jedkohjk"},"content":" * Returns whether the command is to terminate the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"jedkohjk"},"content":" * @return Whether the command is to terminate the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"jedkohjk"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":114}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * Command to find all relevant tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * Constructor for ListCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" public FindCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" super(\"find\", args);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" public List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"key\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" String key \u003d (String) this.args.get(\"key\");","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" List\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" if (task.isRelated(key)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" filteredTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"Here are the relevant tasks:\\n%s\", ui.stringifyList(filteredTasks)));","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jedkohjk":60}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * Command to list all current tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Constructor for ListCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" public ListCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" super(\"list\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" return List.of();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"Here are the tasks in your list:\\n%s\", ui.stringifyList(tasks)));","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":49}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.IndexArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Command to mark a task as complete.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructor for MarkCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public MarkCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(\"mark\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" return List.of(new IndexArgument(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" int idx \u003d (int) ((Integer) this.args.get(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" tasks.mark(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"Nice! I\u0027ve marked this task as done:\\n %s\", tasks.access(idx).toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":53}},{"path":"src/main/java/duke/command/OngoingCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.DateArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Command to list all events on a given date.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"public class OngoingCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * Constructor for OngoingCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public OngoingCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" super(\"ongoing\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return List.of(new DateArgument(\"date\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" LocalDate date \u003d (LocalDate) this.args.get(\"date\");","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" List\u003cTask\u003e filteredEvents \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" if ((task instanceof Event) \u0026\u0026 ((Event) task).isOngoing(date)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" filteredEvents.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"Here are the ongoing events on %s:\\n%s\",","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" ui.stringifyDate(date), ui.stringifyList(filteredEvents)));","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":62}},{"path":"src/main/java/duke/command/QueueCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * Command to list all deadlines in sorted order.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"public class QueueCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * Constructor for QueueCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public QueueCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" super(\"queue\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return List.of();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" List\u003cDeadline\u003e deadlines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" deadlines.add((Deadline) task);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"Here is the queue of deadlines:\\n%s\", ui.stringifyList(deadlines)));","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":58}},{"path":"src/main/java/duke/command/RemoveCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.IndexArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Command to remove an task from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"public class RemoveCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructor for RemoveCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public RemoveCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(\"remove\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" return List.of(new IndexArgument(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" int idx \u003d (int) ((Integer) this.args.get(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"Noted. I\u0027ve removed this task:\\n %s\\n%s\",","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" tasks.delete(idx).toString(), ui.getTaskCount(tasks.size())));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":53}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.IndexArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Command to mark a task as incomplete.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructor for UnmarkCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public UnmarkCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(\"unmark\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" return List.of(new IndexArgument(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" int idx \u003d (int) ((Integer) this.args.get(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" tasks.unmark(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"OK, I\u0027ve marked this task as not done yet:\\n %s\", tasks.access(idx).toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":53}},{"path":"src/main/java/duke/command/task/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.DateArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.field.Field;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"public class DeadlineCommand extends TaskCommand {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructor for DeadlineCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public DeadlineCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(\"deadline\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"description\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" new Field(\"/by\"), new DateArgument(\"by\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" protected Deadline makeTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" return new Deadline((String) this.args.get(\"description\"), (LocalDate) this.args.get(\"by\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":44}},{"path":"src/main/java/duke/command/task/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DateRangeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.DateArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.field.Field;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new event.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"public class EventCommand extends TaskCommand {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * Constructor for EventCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public EventCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" super(\"event\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"description\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" new Field(\"/from\"), new DateArgument(\"from\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" new Field(\"/to\"), new DateArgument(\"to\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" protected Event makeTask() throws DateRangeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" return new Event((String) this.args.get(\"description\"), (LocalDate) this.args.get(\"from\"), (LocalDate) this.args.get(\"to\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":46}},{"path":"src/main/java/duke/command/task/TaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new task.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"public abstract class TaskCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructor for TaskCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param commandName The name of the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public TaskCommand(String commandName, Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" super(commandName, args);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" protected abstract Task makeTask() throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" Task newTask \u003d this.makeTask();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"Got it. I\u0027ve added this task:\\n %s\\n%s\",","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" tasks.access(tasks.size()).toString(), ui.getTaskCount(tasks.size())));","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":49}},{"path":"src/main/java/duke/command/task/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.ToDo;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"public class ToDoCommand extends TaskCommand {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" private Map\u003cString, Object\u003e inputs;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructor for ToDoCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" public ToDoCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" super(\"todo\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"description\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" protected ToDo makeTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" return new ToDo((String) this.args.get(\"description\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":42}},{"path":"src/main/java/duke/exception/CommandFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when the general format of a command is wrong.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class CommandFormatException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructor for CommandFormatException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param cmd The command in question.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * @param format The correct format for the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" public CommandFormatException(String cmd, String format) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"☹ OOPS!!! %s command should have the following format:\\n %s\", cmd, format));","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":18}},{"path":"src/main/java/duke/exception/DateRangeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when an end date precedes a start date.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class DateRangeException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructor for DateRangeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" public DateRangeException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" super(\"☹ OOPS!!! End date cannot be before start date.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":15}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * General exception thrown by duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructor for DukeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param msg The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" super(msg);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":17}},{"path":"src/main/java/duke/exception/EmptyArgException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when an argument is left empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class EmptyArgException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructor for EmptyArgException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param arg The name of the argument in question.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" public EmptyArgException(String arg) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"☹ OOPS!!! %s field should not be empty.\", arg));","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":17}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when a command is not recognised.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructor for InvalidCommandException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param cmd The invalid command entered.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" public InvalidCommandException(String cmd) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what \\\"%s\\\" means :-(\", cmd));","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":17}},{"path":"src/main/java/duke/exception/InvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when a date is input in the wrong format.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class InvalidDateException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructor for InvalidDateException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" public InvalidDateException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" super(\"☹ OOPS!!! Please enter a valid date in yyyy-mm-dd format.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":15}},{"path":"src/main/java/duke/exception/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when an index is input in the wrong format.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class InvalidIndexException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructor for InvalidIndexException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" public InvalidIndexException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" super(\"☹ OOPS!!! Please enter a valid positive integer for the index.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":15}},{"path":"src/main/java/duke/exception/OutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when the index entered is out of range of the current list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class OutOfBoundsException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Constructor for OutOfBoundsException.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * @param index The index input.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * @param taskCount The current number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" public OutOfBoundsException(int index, int taskCount) {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"☹ OOPS!!! %d is out of range. %s\", index, Ui.getTaskCount(taskCount)));","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":20}},{"path":"src/main/java/duke/object/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.OutOfBoundsException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" * List containing Tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Marks task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to mark the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" public void mark(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" this.access(index).mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * Unmarks task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to unmark the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" public void unmark(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" this.access(index).unmark();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" * Accesses task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to access the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" * @return The task at the index.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" public Task access(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" this.checkBounds(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" return super.get(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" * Deletes task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to delete the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * @return The deleted task.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" public Task delete(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" this.checkBounds(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" return super.remove(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" private void checkBounds(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" if (index \u003e this.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" throw new OutOfBoundsException(index, this.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":62}},{"path":"src/main/java/duke/object/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.DeadlineCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Task with an end date.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"public class Deadline extends Task implements Comparable\u003cDeadline\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructor for Deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param by The end date of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), Ui.stringifyDate(this.by));","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" return (new DeadlineCommand(Map.ofEntries(","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"description\", this.description),","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"by\", this.by)))).toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" + \"\\n\" + super.toCommand(idx) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" public int compareTo(Deadline other) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" return (int) ChronoUnit.DAYS.between(other.by, this.by);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":55}},{"path":"src/main/java/duke/object/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.EventCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DateRangeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Task with a start and end date.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" protected LocalDate from;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" protected LocalDate to;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructor for Event.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param from The start date of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @param to The end date of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * @throws DateRangeException When the start date is after the end date.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public Event(String description, LocalDate from, LocalDate to) throws DateRangeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" if (to.isBefore(from)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" throw new DateRangeException();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" Ui.stringifyDate(this.from), Ui.stringifyDate(this.to));","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" return (new EventCommand(Map.ofEntries(","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"description\", this.description),","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"from\", this.from),","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"to\", this.to)))).toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" + \"\\n\" + super.toCommand(idx) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" * Returns whether the event is happening on a given date.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" * @param date The date one is checking.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" * @return Whether the event is happening on that date.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" public boolean isOngoing(LocalDate date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" return !(date.isBefore(this.from) || date.isAfter(this.to));","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":66}},{"path":"src/main/java/duke/object/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" * Represents a task stored by the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"public class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" protected String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructor for Task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * Marks task as complete.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" public void mark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * Marks task as incomplete.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" public void unmark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[%s] %s\", this.isDone ? \"X\" : \" \", this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * Constructs the command needed to create the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" * @param idx The task\u0027s index in a given list;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" * @return The string command needed to create the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" Map\u003cString, Object\u003e indexMap \u003d Map.ofEntries(new SimpleEntry\u003c\u003e(\"index\", idx));","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" return (new MarkCommand(indexMap)).toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" return (new UnmarkCommand(indexMap)).toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" * Returns whether a key is related to the task description.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" * @param key The key to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" * @return Whether the key is a substring of the task description.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" public boolean isRelated(String key) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" return this.description.contains(key);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":73}},{"path":"src/main/java/duke/object/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.ToDoCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" * Task without any date requirements.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Constructor for ToDo.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" return (new ToDoCommand(Map.ofEntries(","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"description\", this.description)))).toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" + \"\\n\" + super.toCommand(idx) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":39}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.command.OngoingCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.command.QueueCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.command.RemoveCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.DeadlineCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.EventCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.ToDoCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.CommandFormatException;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.Argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"import java.util.function.Function;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * Object to interpret user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" private static final Map\u003cString, Function\u003cMap\u003cString, Object\u003e, Command\u003e\u003e COMMANDS \u003d Map.ofEntries(","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"list\", x -\u003e new ListCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"find\", x -\u003e new FindCommand(x)),","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"queue\", x -\u003e new QueueCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"ongoing\", x -\u003e new OngoingCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"mark\", x -\u003e new MarkCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"unmark\", x -\u003e new UnmarkCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"todo\", x -\u003e new ToDoCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"deadline\", x -\u003e new DeadlineCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"event\", x -\u003e new EventCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"remove\", x -\u003e new RemoveCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"bye\", x -\u003e new ByeCommand(x)));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" * Converts input to Command.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" * @param input User input.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * @return Command based on the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @throws DukeException When the input is not formatted correctly.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" public static Command parse(String input) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" String[] commandParts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" String commandName \u003d commandParts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" String commandArgs \u003d commandParts.length \u003e 1 ? commandParts[1] : \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" Map\u003cString, Object\u003e args \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" if (!COMMANDS.containsKey(commandName)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidCommandException(commandName);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" Command cmd \u003d COMMANDS.get(commandName).apply(args);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" Matcher groups \u003d cmd.getPattern().matcher(commandArgs);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" if (!groups.matches()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" throw new CommandFormatException(commandName, cmd.getStructure());","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" List\u003cArgument\u003e fields \u003d cmd.getArguments();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" for (int i \u003d 0; i \u003c fields.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" Argument arg \u003d fields.get(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" if (arg !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" args.put(arg.toString(), arg.formatInput(groups.group(i)));","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" return cmd;","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":74}},{"path":"src/main/java/duke/parser/element/CommandElement.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * A substring of a command representing a logical unit.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public interface CommandElement {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Get the name of the command element.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @return Name of the command element.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" abstract String getName();","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * Get how the command element will be represented in regex.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * @return The command element in regex form.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" abstract String getRegexForm();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":22}},{"path":"src/main/java/duke/parser/element/argument/Argument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" * The variable user inputs in a command.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"public abstract class Argument implements CommandElement {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" private String text;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Constructor for Argument.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" public Argument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" this.text \u003d text;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public String getName() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"{ %s }\", this.text);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" public String getRegexForm() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return \"(.*)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" return this.text;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" * Interprets the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * @return The object interpreted with semantic meaning to the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" * @throws DukeException if the input cannot be converted into something of meaning.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" public abstract Object formatInput(String input) throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" * Converts a value from the program to readable form.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" * @param val Object with semantic meaning to the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" * @return The readable form of the object.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" public abstract String formatOutput(Object val);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":63}},{"path":"src/main/java/duke/parser/element/argument/DateArgument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" * Input must be a date.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"public class DateArgument extends Argument {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Constructor for DateArgument.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" public DateArgument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" super(text);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" public LocalDate formatInput(String input) throws InvalidDateException {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" return LocalDate.parse(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidDateException();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" public String formatOutput(Object val) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" return val.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":41}},{"path":"src/main/java/duke/parser/element/argument/IndexArgument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * Input must be an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class IndexArgument extends Argument {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Constructor for IndexArgument.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" public IndexArgument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" super(text);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public Integer formatInput(String input) throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" int idx;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" idx \u003d Integer.parseInt(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" if (idx \u003c\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return idx;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public String formatOutput(Object val) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" return String.valueOf((int) ((Integer) val));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":44}},{"path":"src/main/java/duke/parser/element/argument/StringArgument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.EmptyArgException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * Input must be a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class StringArgument extends Argument {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Constructor for StringArgument.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" public StringArgument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" super(text);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public String formatInput(String input) throws EmptyArgException {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" if (input \u003d\u003d null || input.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" throw new EmptyArgException(this.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" return input;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" public String formatOutput(Object val) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return val.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":38}},{"path":"src/main/java/duke/parser/element/field/Field.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.field;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * A fixed string that acts as a delimiter in a command.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class Field implements CommandElement {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" private String text;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Constructor for Field.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * @param text The text represented by the field.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" public Field(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" this.text \u003d text;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" public String getName() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" return this.text;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" public String getRegexForm() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"( %s )\", this.text);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return this.text;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":45}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.SilentUi;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.VerboseUi;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * Writes data to and retrieves data from storage file.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" private File dataFile;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * Constructor for storage object.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" public Storage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" this.dataFile \u003d new File(String.join(File.separator, \".\", \"duke_data\", \"data.txt\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" makeFile(this.dataFile);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" private void makeFile(File file) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" File dir \u003d file.getParentFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" dir.mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" } catch (IOException e) {}","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * Generates TaskList from stored data.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * @return TaskList from stored data.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" public TaskList loadTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" ui \u003d new SilentUi(new Scanner(dataFile));","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" ui \u003d new SilentUi(new Scanner(System.in));","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" while (ui.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" String saved \u003d ui.readCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" if (saved.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" continue;","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" Command cmd \u003d Parser.parse(saved);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" cmd.execute(tasks, ui, this);","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" (new VerboseUi(\"\")).print(\"☹ OOPS!!! Data file is corrupted. Starting from a clear state...\");","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" tasks.clear();","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" ui.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jedkohjk"},"content":" * Saves TaskList to file.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jedkohjk"},"content":" * @param tasks TaskList to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jedkohjk"},"content":" public void save(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"jedkohjk"},"content":" FileWriter writer \u003d new FileWriter(dataFile, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"jedkohjk"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jedkohjk"},"content":" writer.append(tasks.get(i).toCommand(i + 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"jedkohjk"},"content":" writer.flush();","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"jedkohjk"},"content":" writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"jedkohjk"},"content":" } catch (IOException e) {}","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":91}},{"path":"src/main/java/duke/ui/SilentUi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * Ui used internally that does not print any output.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class SilentUi extends Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Constructor for SilentUi.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * @param sc The scanner from which input is read.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" public SilentUi(Scanner sc) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" super(sc);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public void print(String msg) {}","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" public void greet() {}","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":31}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" * Interface that reads in inputs and displays outputs.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"public abstract class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" protected Scanner sc;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Constructor for Ui.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * @param sc The scanner from which inputs are read.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" public Ui(Scanner sc) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" this.sc \u003d sc;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * Method to display message.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @param msg Message to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" public abstract void print(String msg);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" * Display default greeting.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" public abstract void greet();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * Shared default message for counting tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" * @param n Number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" * @return The default message for that number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" public static String getTaskCount(int n) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"You have %d task%s in the list now.\", n, n \u003d\u003d 1 ? \"\" : \"s\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * Converts list to be displayed as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * @param arr List converted.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" * @return The list as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" public static \u003cT\u003e String stringifyList(List\u003cT\u003e arr) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" List\u003cString\u003e enumArr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" for (T e : arr) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" enumArr.add(String.format(\"%d. %s\", i++, e.toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" return String.join(\"\\n\", enumArr);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" * Converts date to be displayed as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" * @param date Date converted.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" * @return The date as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" public static String stringifyDate(LocalDate date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" return date.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":" * Returns next line read in.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jedkohjk"},"content":" * @return The line read in.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jedkohjk"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"jedkohjk"},"content":" return sc.nextLine().replaceAll(\"\\n\", \"\").trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jedkohjk"},"content":" * Returns whether or not there is more user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jedkohjk"},"content":" * @return Whether or not there is more user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"jedkohjk"},"content":" public boolean hasNext() {","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"jedkohjk"},"content":" return sc.hasNext();","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"jedkohjk"},"content":" * Stop monitoring input.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"jedkohjk"},"content":" public void close() {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"jedkohjk"},"content":" sc.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":97}},{"path":"src/main/java/duke/ui/VerboseUi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * A Ui that reads inputs from the user and prints to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class VerboseUi extends Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" private static final String HORIZONTAL_LINE \u003d \"_\".repeat(60);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" private String name;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * Constructor for VerboseUi.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * @param name Name used when greeting users.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" public VerboseUi(String name) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" super(new Scanner(System.in));","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" public void greet() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" print(String.format(\"Hello! I\u0027m %s\\nWhat can I do for you?\", name));","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" public void print(String msg) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" printIndent(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" for (String line : msg.split(\"\\n\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" printIndent(\" \".repeat(2) + line);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" printIndent(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" System.out.println();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" private void printIndent(String msg) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" for (String line : msg.split(\"\\n\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" System.out.println(\" \".repeat(2) + line);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":51}},{"path":"src/test/java/duke/parser/element/argument/IndexArgumentTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class IndexArgumentTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" public void formatInput_string_invalidIndexException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" (new IndexArgument(\"\")).formatInput(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" } catch (InvalidIndexException e) {}","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" public void formatInput_nonpositiveInteger_invalidIndexException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" (new IndexArgument(\"\")).formatInput(\"0\");","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" } catch (InvalidIndexException e) {}","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" public void formatInput_positiveInteger_integer() {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" assertEquals((new IndexArgument(\"\")).formatInput(\"1\"), 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":35}},{"path":"src/test/java/duke/ui/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class UiTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" public void stringifyList_stringList_enumeratedList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" assertEquals(Ui.stringifyList(List.of(\"first\", \"second\", \"third\")), \"1. first\\n2. second\\n3. third\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" public void stringifyList_intList_enumeratedList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" assertEquals(Ui.stringifyList(List.of(1, 2, 3)), \"1. 1\\n2. 2\\n3. 3\");","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" public void stringifyList_emptyList_emptyString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" assertEquals(Ui.stringifyList(List.of()), \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":25}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"todo read book","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"deadline return book /by 2023-06-06","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"list all","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"unmark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"event project meeting /from 2023-08-06 /to 2023-08-06","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"mark all","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"todo","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"event project eating /from 2023-08-23 /to 2023-08-20","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"event project eating /from 2023-08-20 /to 2023-08-23","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"mark 0","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"deadline /by 2023-08-06","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"event eat /to 2023-06-06","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"mark 2","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"ongoing 2023-08-21","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"unmark","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"deadline eat book /by 2022-06-09","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"do","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"unmark 2","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"bye bye","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"queue","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"find book","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"jedkohjk":23}},{"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":"jedkohjk"},"content":"REM delete past data","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"if exist ../data rmdir -s -q ../data","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"jedkohjk":3,"-":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":"jedkohjk"},"content":"# delete past data","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"if [ -d \"../data\" ]","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"then","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" rm -rf ../data","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"fi","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/**/*.java","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"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":29,"author":{"gitId":"jedkohjk"},"content":"java -classpath ../bin duke/Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"jedkohjk":8,"-":36}}] +[{"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":"jedkohjk"},"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":"-"},"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":"jedkohjk"},"content":" mainClass.set(\"duke/Duke\")","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":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jedkohjk":6,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.VerboseUi;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * The main chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"public class Duke {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * Constructor for Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @param name Name of the bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" public Duke(String name) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" this.ui \u003d new VerboseUi(name);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" this.storage \u003d new Storage(this.ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" this.tasks \u003d this.storage.loadTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" * Runs the chatbot, receiving commands and terminating only on bye.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" ui.greet();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" Command cmd \u003d Parser.parse(ui.readCommand());","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" cmd.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" isExit \u003d cmd.isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" ui.print(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" Duke bot \u003d new Duke(\"chatBot\");","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" bot.run();","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":53}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * Command to terminate the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Constructor for ByeCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" public ByeCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" super(\"bye\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" return List.of();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" ui.print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":50}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.Argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Actionable representing a command input by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" protected final String commandName;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" protected Map\u003cString, Object\u003e args;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" * Constructor for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @param commandName The name of the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" public Command(String commandName, Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" this.commandName \u003d commandName;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" this.args \u003d args;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" protected abstract List\u003cCommandElement\u003e getCommandElements();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * Generates regex pattern expected for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" * @return Regex pattern expected for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" public Pattern getPattern() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" return Pattern.compile(String.join(\"\", this.getCommandElements().stream().map(","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" e -\u003e e.getRegexForm()).collect(Collectors.toList())));","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * Generates readable expected structure for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * @return Readable expected structure for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" public String getStructure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" List\u003cString\u003e struct \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" struct.add(commandName);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" for (CommandElement e : this.getCommandElements()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" struct.add(e.getName());","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" return String.join(\" \", struct);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" List\u003cString\u003e commandList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" commandList.add(this.commandName);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" int i \u003d 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" for (CommandElement e : this.getCommandElements()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" if (e instanceof Argument) {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" commandList.add(((Argument) e).formatOutput(args.get(e.toString())).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":" commandList.add(e.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"jedkohjk"},"content":" return String.join(\" \", commandList);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jedkohjk"},"content":" * Generates list of arguments expected from command.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jedkohjk"},"content":" * @return List of arguments expected from command.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jedkohjk"},"content":" public List\u003cArgument\u003e getArguments() {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"jedkohjk"},"content":" List\u003cArgument\u003e argsList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"jedkohjk"},"content":" argsList.add(null);","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"jedkohjk"},"content":" for (CommandElement e : this.getCommandElements()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"jedkohjk"},"content":" if (e instanceof Argument) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"jedkohjk"},"content":" argsList.add((Argument) e);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"jedkohjk"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"jedkohjk"},"content":" argsList.add(null);","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"jedkohjk"},"content":" return argsList;","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"jedkohjk"},"content":" * Get command to act.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"jedkohjk"},"content":" * @param tasks The list of tasks to act on.","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"jedkohjk"},"content":" * @param ui The Ui to interact with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"jedkohjk"},"content":" * @param storage The Storage to update data.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"jedkohjk"},"content":" * @throws DukeException When the execution fails.","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"jedkohjk"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"jedkohjk"},"content":" * Returns whether the command is to terminate the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"jedkohjk"},"content":" * @return Whether the command is to terminate the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"jedkohjk"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":114}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * Command to find all relevant tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * Constructor for ListCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public FindCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" super(\"find\", args);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" public List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"key\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" String key \u003d (String) this.args.get(\"key\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" List\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" if (task.isRelated(key)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" filteredTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"Here are the relevant tasks:\\n%s\", ui.stringifyList(filteredTasks)));","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jedkohjk":59}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * Command to list all current tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Constructor for ListCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" public ListCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" super(\"list\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" return List.of();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"Here are the tasks in your list:\\n%s\", ui.stringifyList(tasks)));","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":49}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.IndexArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Command to mark a task as complete.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructor for MarkCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public MarkCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(\"mark\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" return List.of(new IndexArgument(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" int idx \u003d (int) ((Integer) this.args.get(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" tasks.mark(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"Nice! I\u0027ve marked this task as done:\\n %s\", tasks.access(idx).toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":53}},{"path":"src/main/java/duke/command/OngoingCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.DateArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Command to list all events on a given date.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"public class OngoingCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * Constructor for OngoingCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public OngoingCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" super(\"ongoing\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return List.of(new DateArgument(\"date\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" LocalDate date \u003d (LocalDate) this.args.get(\"date\");","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" List\u003cTask\u003e filteredEvents \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" if ((task instanceof Event) \u0026\u0026 ((Event) task).isOngoing(date)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" filteredEvents.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"Here are the ongoing events on %s:\\n%s\",","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" ui.stringifyDate(date), ui.stringifyList(filteredEvents)));","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":62}},{"path":"src/main/java/duke/command/QueueCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * Command to list all deadlines in sorted order.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"public class QueueCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * Constructor for QueueCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public QueueCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" super(\"queue\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return List.of();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" List\u003cDeadline\u003e deadlines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" deadlines.add((Deadline) task);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"Here is the queue of deadlines:\\n%s\", ui.stringifyList(deadlines)));","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":58}},{"path":"src/main/java/duke/command/RemoveCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.IndexArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Command to remove an task from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"public class RemoveCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructor for RemoveCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public RemoveCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(\"remove\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" return List.of(new IndexArgument(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" int idx \u003d (int) ((Integer) this.args.get(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"Noted. I\u0027ve removed this task:\\n %s\\n%s\",","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" tasks.delete(idx).toString(), ui.getTaskCount(tasks.size())));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":53}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.IndexArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Command to mark a task as incomplete.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructor for UnmarkCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public UnmarkCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(\"unmark\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" return List.of(new IndexArgument(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" int idx \u003d (int) ((Integer) this.args.get(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" tasks.unmark(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"OK, I\u0027ve marked this task as not done yet:\\n %s\", tasks.access(idx).toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":53}},{"path":"src/main/java/duke/command/task/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.DateArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.field.Field;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"public class DeadlineCommand extends TaskCommand {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructor for DeadlineCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public DeadlineCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(\"deadline\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"description\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" new Field(\"/by\"), new DateArgument(\"by\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" protected Deadline makeTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" return new Deadline((String) this.args.get(\"description\"), (LocalDate) this.args.get(\"by\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":44}},{"path":"src/main/java/duke/command/task/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DateRangeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.DateArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.field.Field;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new event.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"public class EventCommand extends TaskCommand {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * Constructor for EventCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public EventCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" super(\"event\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"description\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" new Field(\"/from\"), new DateArgument(\"from\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" new Field(\"/to\"), new DateArgument(\"to\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" protected Event makeTask() throws DateRangeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" return new Event((String) this.args.get(\"description\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" (LocalDate) this.args.get(\"from\"), (LocalDate) this.args.get(\"to\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":47}},{"path":"src/main/java/duke/command/task/TaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new task.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"public abstract class TaskCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructor for TaskCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param commandName The name of the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public TaskCommand(String commandName, Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(commandName, args);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" protected abstract Task makeTask() throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" Task newTask \u003d this.makeTask();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" ui.print(String.format(\"Got it. I\u0027ve added this task:\\n %s\\n%s\",","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" tasks.access(tasks.size()).toString(), ui.getTaskCount(tasks.size())));","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":48}},{"path":"src/main/java/duke/command/task/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"public class ToDoCommand extends TaskCommand {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" private Map\u003cString, Object\u003e inputs;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructor for ToDoCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" public ToDoCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" super(\"todo\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"description\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" protected ToDo makeTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" return new ToDo((String) this.args.get(\"description\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":42}},{"path":"src/main/java/duke/exception/CommandFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when the general format of a command is wrong.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class CommandFormatException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructor for CommandFormatException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param cmd The command in question.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * @param format The correct format for the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" public CommandFormatException(String cmd, String format) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"☹ OOPS!!! %s command should have the following format:\\n %s\", cmd, format));","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":18}},{"path":"src/main/java/duke/exception/DateRangeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when an end date precedes a start date.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class DateRangeException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructor for DateRangeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" public DateRangeException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" super(\"☹ OOPS!!! End date cannot be before start date.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":15}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * General exception thrown by duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructor for DukeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param msg The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" super(msg);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":17}},{"path":"src/main/java/duke/exception/EmptyArgException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when an argument is left empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class EmptyArgException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructor for EmptyArgException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param arg The name of the argument in question.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" public EmptyArgException(String arg) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"☹ OOPS!!! %s field should not be empty.\", arg));","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":17}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when a command is not recognised.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructor for InvalidCommandException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param cmd The invalid command entered.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" public InvalidCommandException(String cmd) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what \\\"%s\\\" means :-(\", cmd));","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":17}},{"path":"src/main/java/duke/exception/InvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when a date is input in the wrong format.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class InvalidDateException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructor for InvalidDateException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" public InvalidDateException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" super(\"☹ OOPS!!! Please enter a valid date in yyyy-mm-dd format.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":15}},{"path":"src/main/java/duke/exception/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when an index is input in the wrong format.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class InvalidIndexException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructor for InvalidIndexException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" public InvalidIndexException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" super(\"☹ OOPS!!! Please enter a valid positive integer for the index.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":15}},{"path":"src/main/java/duke/exception/OutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when the index entered is out of range of the current list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class OutOfBoundsException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Constructor for OutOfBoundsException.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * @param index The index input.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * @param taskCount The current number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" public OutOfBoundsException(int index, int taskCount) {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"☹ OOPS!!! %d is out of range. %s\", index, Ui.getTaskCount(taskCount)));","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":20}},{"path":"src/main/java/duke/object/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.OutOfBoundsException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * List containing Tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Marks task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to mark the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" public void mark(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" this.access(index).mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * Unmarks task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to unmark the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" public void unmark(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" this.access(index).unmark();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" * Accesses task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to access the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @return The task at the index.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public Task access(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" this.checkBounds(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return super.get(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * Deletes task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to delete the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @return The deleted task.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" public Task delete(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" this.checkBounds(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" return super.remove(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" private void checkBounds(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" if (index \u003e this.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" throw new OutOfBoundsException(index, this.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":63}},{"path":"src/main/java/duke/object/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.DeadlineCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * Task with an end date.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"public class Deadline extends Task implements Comparable\u003cDeadline\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructor for Deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param by The end date of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), Ui.stringifyDate(this.by));","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return (new DeadlineCommand(Map.ofEntries(","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"description\", this.description),","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"by\", this.by)))).toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" + \"\\n\" + super.toCommand(idx) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" public int compareTo(Deadline other) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" return (int) ChronoUnit.DAYS.between(other.by, this.by);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":56}},{"path":"src/main/java/duke/object/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.EventCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DateRangeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * Task with a start and end date.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" protected LocalDate from;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" protected LocalDate to;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * Constructor for Event.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @param from The start date of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * @param to The end date of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" * @throws DateRangeException When the start date is after the end date.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" public Event(String description, LocalDate from, LocalDate to) throws DateRangeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" if (to.isBefore(from)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" throw new DateRangeException();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" Ui.stringifyDate(this.from), Ui.stringifyDate(this.to));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" return (new EventCommand(Map.ofEntries(","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"description\", this.description),","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"from\", this.from),","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"to\", this.to)))).toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" + \"\\n\" + super.toCommand(idx) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" * Returns whether the event is happening on a given date.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" * @param date The date one is checking.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" * @return Whether the event is happening on that date.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" public boolean isOngoing(LocalDate date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" return !(date.isBefore(this.from) || date.isAfter(this.to));","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":67}},{"path":"src/main/java/duke/object/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" * Represents a task stored by the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"public class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" protected String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructor for Task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * Marks task as complete.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" public void mark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * Marks task as incomplete.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" public void unmark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[%s] %s\", this.isDone ? \"X\" : \" \", this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * Constructs the command needed to create the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" * @param idx The task\u0027s index in a given list;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" * @return The string command needed to create the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" Map\u003cString, Object\u003e indexMap \u003d Map.ofEntries(new SimpleEntry\u003c\u003e(\"index\", idx));","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" return (new MarkCommand(indexMap)).toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" return (new UnmarkCommand(indexMap)).toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" * Returns whether a key is related to the task description.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" * @param key The key to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" * @return Whether the key is a substring of the task description.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" public boolean isRelated(String key) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" return this.description.contains(key);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":73}},{"path":"src/main/java/duke/object/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.ToDoCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Task without any date requirements.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Constructor for ToDo.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return (new ToDoCommand(Map.ofEntries(","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"description\", this.description)))).toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" + \"\\n\" + super.toCommand(idx) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":40}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.util.function.Function;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"import duke.command.OngoingCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"import duke.command.QueueCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"import duke.command.RemoveCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.DeadlineCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.EventCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.ToDoCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.CommandFormatException;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.Argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * Object to interpret user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" private static final Map\u003cString, Function\u003cMap\u003cString, Object\u003e, Command\u003e\u003e COMMANDS \u003d Map.ofEntries(","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"list\", x -\u003e new ListCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"find\", x -\u003e new FindCommand(x)),","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"queue\", x -\u003e new QueueCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"ongoing\", x -\u003e new OngoingCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"mark\", x -\u003e new MarkCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"unmark\", x -\u003e new UnmarkCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"todo\", x -\u003e new ToDoCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"deadline\", x -\u003e new DeadlineCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"event\", x -\u003e new EventCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"remove\", x -\u003e new RemoveCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"bye\", x -\u003e new ByeCommand(x)));","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * Converts input to Command.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * @param input User input.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @return Command based on the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * @throws DukeException When the input is not formatted correctly.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" public static Command parse(String input) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" String[] commandParts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" String commandName \u003d commandParts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" String commandArgs \u003d commandParts.length \u003e 1 ? commandParts[1] : \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" Map\u003cString, Object\u003e args \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" if (!COMMANDS.containsKey(commandName)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidCommandException(commandName);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" Command cmd \u003d COMMANDS.get(commandName).apply(args);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" Matcher groups \u003d cmd.getPattern().matcher(commandArgs);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" if (!groups.matches()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" throw new CommandFormatException(commandName, cmd.getStructure());","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" List\u003cArgument\u003e fields \u003d cmd.getArguments();","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" for (int i \u003d 0; i \u003c fields.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" Argument arg \u003d fields.get(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" if (arg !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" args.put(arg.toString(), arg.formatInput(groups.group(i)));","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" return cmd;","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":75}},{"path":"src/main/java/duke/parser/element/CommandElement.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * A substring of a command representing a logical unit.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public interface CommandElement {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Get the name of the command element.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @return Name of the command element.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" abstract String getName();","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * Get how the command element will be represented in regex.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * @return The command element in regex form.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" abstract String getRegexForm();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":22}},{"path":"src/main/java/duke/parser/element/argument/Argument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" * The variable user inputs in a command.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"public abstract class Argument implements CommandElement {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" private String text;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Constructor for Argument.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" public Argument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" this.text \u003d text;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public String getName() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"{ %s }\", this.text);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" public String getRegexForm() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return \"(.*)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" return this.text;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" * Interprets the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * @return The object interpreted with semantic meaning to the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" * @throws DukeException if the input cannot be converted into something of meaning.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" public abstract Object formatInput(String input) throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" * Converts a value from the program to readable form.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" * @param val Object with semantic meaning to the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" * @return The readable form of the object.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" public abstract String formatOutput(Object val);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":63}},{"path":"src/main/java/duke/parser/element/argument/DateArgument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Input must be a date.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"public class DateArgument extends Argument {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Constructor for DateArgument.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" public DateArgument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" super(text);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public LocalDate formatInput(String input) throws InvalidDateException {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" return LocalDate.parse(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidDateException();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" public String formatOutput(Object val) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" return val.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":42}},{"path":"src/main/java/duke/parser/element/argument/IndexArgument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * Input must be an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class IndexArgument extends Argument {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Constructor for IndexArgument.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" public IndexArgument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" super(text);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public Integer formatInput(String input) throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" int idx;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" idx \u003d Integer.parseInt(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" if (idx \u003c\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return idx;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public String formatOutput(Object val) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" return String.valueOf((int) ((Integer) val));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":44}},{"path":"src/main/java/duke/parser/element/argument/StringArgument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.EmptyArgException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * Input must be a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class StringArgument extends Argument {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Constructor for StringArgument.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" public StringArgument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" super(text);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public String formatInput(String input) throws EmptyArgException {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" if (input \u003d\u003d null || input.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" throw new EmptyArgException(this.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" return input;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" public String formatOutput(Object val) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return val.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":38}},{"path":"src/main/java/duke/parser/element/field/Field.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.field;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * A fixed string that acts as a delimiter in a command.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class Field implements CommandElement {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" private String text;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Constructor for Field.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * @param text The text represented by the field.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" public Field(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" this.text \u003d text;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" public String getName() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" return this.text;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" public String getRegexForm() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"( %s )\", this.text);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return this.text;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":45}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.SilentUi;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Writes data to and retrieves data from storage file.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" private File dataFile;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" private Ui display;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" * Constructor for storage object.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @param display The UI to inform user of any failures.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" public Storage(Ui display) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" this.display \u003d display;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" this.dataFile \u003d new File(String.join(File.separator, \".\", \"duke_data\", \"data.txt\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" makeFile(this.dataFile);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" private void makeFile(File file) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" File dir \u003d file.getParentFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" dir.mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" display.print(\"Failed to create data file.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * Generates TaskList from stored data.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * @return TaskList from stored data.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" public TaskList loadTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" ui \u003d new SilentUi(new Scanner(dataFile));","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" ui \u003d new SilentUi(new Scanner(System.in));","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" while (ui.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" String saved \u003d ui.readCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" if (saved.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" continue;","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" Command cmd \u003d Parser.parse(saved);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" cmd.execute(tasks, ui, this);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" display.print(\"Data file is corrupted. Starting from a clear state...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" tasks.clear();","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":" ui.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jedkohjk"},"content":" * Saves TaskList to file.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jedkohjk"},"content":" * @param tasks TaskList to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jedkohjk"},"content":" public void save(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"jedkohjk"},"content":" FileWriter writer \u003d new FileWriter(dataFile, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"jedkohjk"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"jedkohjk"},"content":" writer.append(tasks.get(i).toCommand(i + 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"jedkohjk"},"content":" writer.flush();","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"jedkohjk"},"content":" writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"jedkohjk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"jedkohjk"},"content":" display.print(\"Failed to save data file.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":95}},{"path":"src/main/java/duke/ui/SilentUi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * Ui used internally that does not print any output.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class SilentUi extends Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Constructor for SilentUi.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * @param sc The scanner from which input is read.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" public SilentUi(Scanner sc) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" super(sc);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public void print(String msg) {}","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" public void greet() {}","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":31}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" * Interface that reads in inputs and displays outputs.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"public abstract class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" protected Scanner sc;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Constructor for Ui.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * @param sc The scanner from which inputs are read.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" public Ui(Scanner sc) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" this.sc \u003d sc;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * Method to display message.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @param msg Message to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" public abstract void print(String msg);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" * Display default greeting.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" public abstract void greet();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * Shared default message for counting tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" * @param n Number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" * @return The default message for that number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" public static String getTaskCount(int n) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"You have %d task%s in the list now.\", n, n \u003d\u003d 1 ? \"\" : \"s\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * Converts list to be displayed as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * @param arr List converted.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" * @return The list as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" public static \u003cT\u003e String stringifyList(List\u003cT\u003e arr) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" List\u003cString\u003e enumArr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" for (T e : arr) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" enumArr.add(String.format(\"%d. %s\", i++, e.toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" return String.join(\"\\n\", enumArr);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" * Converts date to be displayed as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" * @param date Date converted.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" * @return The date as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" public static String stringifyDate(LocalDate date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" return date.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":" * Returns next line read in.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jedkohjk"},"content":" * @return The line read in.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jedkohjk"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"jedkohjk"},"content":" return sc.nextLine().replaceAll(\"\\n\", \"\").trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jedkohjk"},"content":" * Returns whether or not there is more user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jedkohjk"},"content":" * @return Whether or not there is more user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"jedkohjk"},"content":" public boolean hasNext() {","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"jedkohjk"},"content":" return sc.hasNext();","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"jedkohjk"},"content":" * Stop monitoring input.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"jedkohjk"},"content":" public void close() {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"jedkohjk"},"content":" sc.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":97}},{"path":"src/main/java/duke/ui/VerboseUi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * A Ui that reads inputs from the user and prints to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class VerboseUi extends Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" private static final String HORIZONTAL_LINE \u003d \"_\".repeat(60);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" private String name;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * Constructor for VerboseUi.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * @param name Name used when greeting users.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" public VerboseUi(String name) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" super(new Scanner(System.in));","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" public void greet() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" print(String.format(\"Hello! I\u0027m %s\\nWhat can I do for you?\", name));","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" public void print(String msg) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" printIndent(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" for (String line : msg.split(\"\\n\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" printIndent(\" \".repeat(2) + line);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" printIndent(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" System.out.println();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" private void printIndent(String msg) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" for (String line : msg.split(\"\\n\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" System.out.println(\" \".repeat(2) + line);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":51}},{"path":"src/test/java/duke/parser/element/argument/IndexArgumentTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"public class IndexArgumentTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" public void formatInput_string_invalidIndexException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" IndexArgument tested \u003d new IndexArgument(\"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" tested.formatInput(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public void formatInput_nonpositiveInteger_invalidIndexException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" IndexArgument tested \u003d new IndexArgument(\"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" tested.formatInput(\"0\");","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" public void formatInput_positiveInteger_integer() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" assertEquals((new IndexArgument(\"\")).formatInput(\"1\"), 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":43}},{"path":"src/test/java/duke/ui/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"public class UiTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" public void stringifyList_stringList_enumeratedList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" assertEquals(Ui.stringifyList(List.of(\"first\", \"second\", \"third\")), \"1. first\\n2. second\\n3. third\");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" public void stringifyList_intList_enumeratedList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" assertEquals(Ui.stringifyList(List.of(1, 2, 3)), \"1. 1\\n2. 2\\n3. 3\");","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" public void stringifyList_emptyList_emptyString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" assertEquals(Ui.stringifyList(List.of()), \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"todo read book","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"deadline return book /by 2023-06-06","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"list all","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"unmark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"event project meeting /from 2023-08-06 /to 2023-08-06","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"mark all","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"todo","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"event project eating /from 2023-08-23 /to 2023-08-20","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"event project eating /from 2023-08-20 /to 2023-08-23","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"mark 0","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"deadline /by 2023-08-06","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"event eat /to 2023-06-06","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"mark 2","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"ongoing 2023-08-21","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"unmark","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"deadline eat book /by 2022-06-09","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"do","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"unmark 2","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"bye bye","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"queue","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"find book","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"jedkohjk":23}},{"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":"jedkohjk"},"content":"REM delete past data","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"if exist ../data rmdir -s -q ../data","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"jedkohjk":3,"-":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":"jedkohjk"},"content":"# delete past data","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"if [ -d \"../data\" ]","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"then","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" rm -rf ../data","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"fi","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/**/*.java","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"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":29,"author":{"gitId":"jedkohjk"},"content":"java -classpath ../bin duke/Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"jedkohjk":8,"-":36}}] diff --git a/jedkohjk_ip_master/commits.json b/jedkohjk_ip_master/commits.json index 4deb9ecc..7f0b9647 100644 --- a/jedkohjk_ip_master/commits.json +++ b/jedkohjk_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"jedkohjk":[{"date":"2023-08-20","commitResults":[{"hash":"d89901cea786845d5dbd1f673278685bef652d12","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":6}}},{"hash":"2a08137b15c3f03d808f50a0d370276b7473e8f7","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}},{"hash":"db1b6cb43cba20a28af6b51337ea5b4e41d7578a","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}},{"hash":"715a36d09dca866bf6c1db2ebb26d1b17605a735","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":3}}},{"hash":"c3a7e86eec41a25ecc31b9e75579adb789e5320c","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":23}}},{"hash":"cc0cfd589846d8fc54505e27106a0b91621d4490","isMergeCommit":false,"messageTitle":"A TextUiTesting. Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0}}}]},{"date":"2023-08-21","commitResults":[{"hash":"901797c3bed123431bae3ab412a9ee178c85dfef","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":18,"deletions":2},"java":{"insertions":104,"deletions":22}}},{"hash":"cfbfe529012168541eb0cbdffada3c252939becc","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":16,"deletions":3}}}]},{"date":"2023-08-22","commitResults":[{"hash":"505aba97be438ff7c82f3f8e0b65780239d1065e","isMergeCommit":false,"messageTitle":"A Enums. Use Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":117,"deletions":131}}}]},{"date":"2023-08-24","commitResults":[{"hash":"155f2b58550b7483534f7d90169ddb38ca4fb158","isMergeCommit":false,"messageTitle":"A Exceptions","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":116,"deletions":85}}},{"hash":"f1ca52060f77ddd7747c0b83d6d5738cd173d22f","isMergeCommit":false,"messageTitle":"fix style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":230,"deletions":230}}}]},{"date":"2023-08-28","commitResults":[{"hash":"c8acea85052c4d356d41c208ba6d064fea939386","isMergeCommit":false,"messageTitle":"add save function","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":26},"java":{"insertions":660,"deletions":222},"bat":{"insertions":3,"deletions":0},"sh":{"insertions":6,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"bc3ffe8c84a90582e9b592e71220978f37090fe8","isMergeCommit":false,"messageTitle":"add date validation","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":5},"java":{"insertions":149,"deletions":15}}},{"hash":"b90ab614fde152b0b6dc546ef7de184e1fc2b309","isMergeCommit":false,"messageTitle":"add oop classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":126},"sh":{"insertions":1,"deletions":1}}},{"hash":"76041d45eb43f27104d2a2335ebb112d5a483e34","isMergeCommit":false,"messageTitle":"organise duke into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":1160,"deletions":963},"sh":{"insertions":1,"deletions":1}}},{"hash":"428a52523dda7662183c74dd0f68733cea74537f","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c9f289cdecf673d1f1fee8037b5805c5788368f6","isMergeCommit":false,"messageTitle":"add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":1,"deletions":2}}},{"hash":"51c42a047435e300dedc47f3bad12b4e07dc1d4e","isMergeCommit":false,"messageTitle":"add junit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":12}}},{"hash":"934c2aa7d9bc69034fb4e07d64247571e4711b79","isMergeCommit":false,"messageTitle":"bug fixes and new tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":25}}}]},{"date":"2023-08-30","commitResults":[{"hash":"0ad609d96919212844a9b7951338375b83477519","isMergeCommit":false,"messageTitle":"add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":463,"deletions":25}}},{"hash":"346fc50f5d3c8b920934c12b5e83227b45fcb6b8","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":25}}},{"hash":"45896c44872eb174ce5ee394e60e6b8f80af30d3","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":56,"deletions":7},"sh":{"insertions":1,"deletions":1}}},{"hash":"2cbb6622304691f3c1b17ea438d5663cc1d23739","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4c6b497ab60d1da50529db42a69521783b25e3e9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"39272e314da6310fce72c6187db5c6a7824fdfa5","isMergeCommit":false,"messageTitle":"add javadocs for find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"20764663a4d37290a90f3b4ed37e7f94e95d72f7","isMergeCommit":false,"messageTitle":"Bug fixes.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"9e663b522af5eb5737aa04c494dc0ffae91537be","isMergeCommit":false,"messageTitle":"Add inheritdoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":172,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"1215b6f7850fa5b6a36c8040ccc41606839d2384","isMergeCommit":false,"messageTitle":"Put entrypoint in Duke class","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":16,"deletions":40},"sh":{"insertions":3,"deletions":3}}},{"hash":"3fadb5d3d07c1e0960655cc9894a9b0db7c90783","isMergeCommit":false,"messageTitle":"Update gradle path","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"jedkohjk":{"java":1872,"md":0,"fxml":0,"sh":8,"bat":3,"gradle":1,"txt":23}},"authorContributionVariance":{"jedkohjk":422037.44},"authorDisplayNameMap":{"jedkohjk":"CS2103T-W17-3 JED ..KEAT"}} +{"authorDailyContributionsMap":{"jedkohjk":[{"date":"2023-08-20","commitResults":[{"hash":"d89901cea786845d5dbd1f673278685bef652d12","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":6}}},{"hash":"2a08137b15c3f03d808f50a0d370276b7473e8f7","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}},{"hash":"db1b6cb43cba20a28af6b51337ea5b4e41d7578a","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}},{"hash":"715a36d09dca866bf6c1db2ebb26d1b17605a735","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":3}}},{"hash":"c3a7e86eec41a25ecc31b9e75579adb789e5320c","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":23}}},{"hash":"cc0cfd589846d8fc54505e27106a0b91621d4490","isMergeCommit":false,"messageTitle":"A TextUiTesting. Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0}}}]},{"date":"2023-08-21","commitResults":[{"hash":"901797c3bed123431bae3ab412a9ee178c85dfef","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":18,"deletions":2},"java":{"insertions":104,"deletions":22}}},{"hash":"cfbfe529012168541eb0cbdffada3c252939becc","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":16,"deletions":3}}}]},{"date":"2023-08-22","commitResults":[{"hash":"505aba97be438ff7c82f3f8e0b65780239d1065e","isMergeCommit":false,"messageTitle":"A Enums. Use Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":117,"deletions":131}}}]},{"date":"2023-08-24","commitResults":[{"hash":"155f2b58550b7483534f7d90169ddb38ca4fb158","isMergeCommit":false,"messageTitle":"A Exceptions","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":116,"deletions":85}}},{"hash":"f1ca52060f77ddd7747c0b83d6d5738cd173d22f","isMergeCommit":false,"messageTitle":"fix style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":230,"deletions":230}}}]},{"date":"2023-08-28","commitResults":[{"hash":"c8acea85052c4d356d41c208ba6d064fea939386","isMergeCommit":false,"messageTitle":"add save function","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":26},"java":{"insertions":660,"deletions":222},"bat":{"insertions":3,"deletions":0},"sh":{"insertions":6,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"bc3ffe8c84a90582e9b592e71220978f37090fe8","isMergeCommit":false,"messageTitle":"add date validation","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":5},"java":{"insertions":149,"deletions":15}}},{"hash":"b90ab614fde152b0b6dc546ef7de184e1fc2b309","isMergeCommit":false,"messageTitle":"add oop classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":126},"sh":{"insertions":1,"deletions":1}}},{"hash":"76041d45eb43f27104d2a2335ebb112d5a483e34","isMergeCommit":false,"messageTitle":"organise duke into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":1160,"deletions":963},"sh":{"insertions":1,"deletions":1}}},{"hash":"428a52523dda7662183c74dd0f68733cea74537f","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c9f289cdecf673d1f1fee8037b5805c5788368f6","isMergeCommit":false,"messageTitle":"add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":1,"deletions":2}}},{"hash":"51c42a047435e300dedc47f3bad12b4e07dc1d4e","isMergeCommit":false,"messageTitle":"add junit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":12}}},{"hash":"934c2aa7d9bc69034fb4e07d64247571e4711b79","isMergeCommit":false,"messageTitle":"bug fixes and new tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":25}}}]},{"date":"2023-08-30","commitResults":[{"hash":"0ad609d96919212844a9b7951338375b83477519","isMergeCommit":false,"messageTitle":"add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":463,"deletions":25}}},{"hash":"346fc50f5d3c8b920934c12b5e83227b45fcb6b8","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":25}}},{"hash":"45896c44872eb174ce5ee394e60e6b8f80af30d3","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":56,"deletions":7},"sh":{"insertions":1,"deletions":1}}},{"hash":"2cbb6622304691f3c1b17ea438d5663cc1d23739","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4c6b497ab60d1da50529db42a69521783b25e3e9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"39272e314da6310fce72c6187db5c6a7824fdfa5","isMergeCommit":false,"messageTitle":"add javadocs for find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"20764663a4d37290a90f3b4ed37e7f94e95d72f7","isMergeCommit":false,"messageTitle":"Bug fixes.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"9e663b522af5eb5737aa04c494dc0ffae91537be","isMergeCommit":false,"messageTitle":"Add inheritdoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":172,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"1215b6f7850fa5b6a36c8040ccc41606839d2384","isMergeCommit":false,"messageTitle":"Put entrypoint in Duke class","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":16,"deletions":40},"sh":{"insertions":3,"deletions":3}}},{"hash":"3fadb5d3d07c1e0960655cc9894a9b0db7c90783","isMergeCommit":false,"messageTitle":"Update gradle path","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"c4d3a8be43d6033ac71aa21d6662fdae779054e4","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":183,"deletions":165}}}]}]},"authorFileTypeContributionMap":{"jedkohjk":{"java":1890,"md":0,"fxml":0,"sh":8,"bat":3,"gradle":6,"txt":23}},"authorContributionVariance":{"jedkohjk":418251.38},"authorDisplayNameMap":{"jedkohjk":"CS2103T-W17-3 JED ..KEAT"}} diff --git a/jonasongg_ip_master/authorship.json b/jonasongg_ip_master/authorship.json index b72538c0..1c1d6d50 100644 --- a/jonasongg_ip_master/authorship.json +++ b/jonasongg_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":"jonasongg"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"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,"jonasongg":1}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeStorageException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * Represents a Duke chat-bot which can store and manage tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" * Creates a Duke chat-bot object.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" * @param filePath The path to the file to store the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" this.tasks \u003d new TaskList(storage.loadData());","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" } catch (DukeStorageException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" ui.showErrorMessage(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" * Runs the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" boolean isRunning \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" if (tasks.getSize() !\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" ui.showLoadedTasksMessage();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" while (isRunning) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" Command command \u003d Parser.parse(ui.readInput());","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" command.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" isRunning \u003d !command.isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" ui.showErrorMessage(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":" new Duke(Paths.get(\"data\", \"duke.txt\").toAbsolutePath().toString()).run();","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":3,"jonasongg":55}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeIllegalArgumentsException;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeUnknownCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" * Represents a parser for the Duke chat-bot that parses the user input and returns the corresponding command.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" private static final DateTimeFormatter dateTimeFormat \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" * Parses the user input and returns the corresponding command.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" * @param fullCommand The user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" * @return The corresponding command.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" * @throws DukeException If the user input is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" String[] splitInput \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" String commandWord \u003d splitInput[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" switch (commandWord) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" return new MarkCommand(Integer.parseInt(splitInput[1]) - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" return new UnmarkCommand(Integer.parseInt(splitInput[1]) - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(\"The description of a todo cannot be empty\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" return new AddCommand(new Todo(splitInput[1].trim()));","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(\"The description of an deadline cannot be empty\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jonasongg"},"content":" String[] splitInputBy \u003d fullCommand.split(\"/by\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jonasongg"},"content":" String[] splitDeadlineDescription \u003d splitInputBy[0].split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jonasongg"},"content":" if (splitDeadlineDescription.length \u003d\u003d 1 || splitDeadlineDescription[1].equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(\"The description of an deadline cannot be empty\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jonasongg"},"content":" if (splitInputBy.length \u003d\u003d 1 || splitInputBy[1].equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jonasongg"},"content":" \"The deadline date must be specified! (after /by)\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jonasongg"},"content":" return new AddCommand(new Deadline(splitDeadlineDescription[1].trim(),","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jonasongg"},"content":" LocalDateTime.parse(splitInputBy[1].trim(), dateTimeFormat)));","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jonasongg"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jonasongg"},"content":" \"The deadline date provided must be in the format: dd/mm/yyyy HHmm (in 24h format)\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jonasongg"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jonasongg"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(\"The description of an event cannot be empty\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"jonasongg"},"content":" String[] splitInputFrom \u003d fullCommand.split(\"/from\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jonasongg"},"content":" String[] splitEventDescription \u003d splitInputFrom[0].split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jonasongg"},"content":" if (splitEventDescription.length \u003d\u003d 1 || splitEventDescription[1].equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(\"The description of an event cannot be empty\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jonasongg"},"content":" if (splitInputFrom.length \u003d\u003d 1 || splitInputFrom[1].equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"jonasongg"},"content":" \"The start time of the event must be specified! (after /from)\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"jonasongg"},"content":" String[] splitInputTo \u003d splitInputFrom[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"jonasongg"},"content":" if (splitInputTo.length \u003d\u003d 1 || splitInputTo[1].equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"jonasongg"},"content":" \"The end time of the event must be specified! (after /to)\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"jonasongg"},"content":" return new AddCommand(","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"jonasongg"},"content":" new Event(splitInputFrom[0].trim(),","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"jonasongg"},"content":" LocalDateTime.parse(splitInputTo[0].trim(), dateTimeFormat),","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"jonasongg"},"content":" LocalDateTime.parse(splitInputTo[1].trim(), dateTimeFormat)));","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"jonasongg"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"jonasongg"},"content":" \"The event dates provided must be in the format: dd/mm/yyyy HHmm (in 24h format)\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"jonasongg"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"jonasongg"},"content":" return new DeleteCommand(Integer.parseInt(splitInput[1]) - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"jonasongg"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"jonasongg"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(\"The keyword to search for cannot be empty!\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"jonasongg"},"content":" return new FindCommand(splitInput[1].trim());","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"jonasongg"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"jonasongg"},"content":" throw new DukeUnknownCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":116}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeStorageException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" * Represents a storage for the Duke chat-bot that stores the tasks in a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" * This serves to allow the tasks to be saved and loaded on the hard drive when Duke starts and exits.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" private final String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * Creates a Storage object.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" * @param filePath The path to the file to store the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" * Creates the file that stores the tasks if it does not exist.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" * @param file The file to be created.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" * @throws DukeStorageException If the file cannot be created, or some other IOException is thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" private void createFile(File file) throws DukeStorageException {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" boolean isCreated \u003d file.getParentFile().mkdirs() \u0026\u0026 file.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" if (!isCreated \u0026\u0026 !file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" throw new DukeStorageException(\"Something went wrong with creating the store of tasks.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" throw new DukeStorageException(\"Something went wrong with creating the store of tasks.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":" * Loads the tasks from the file provided by the filepath when Duke first starts.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":" * @throws DukeStorageException If the file cannot be created, or some other IOException is thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jonasongg"},"content":" public List\u003cTask\u003e loadData() throws DukeStorageException {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jonasongg"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jonasongg"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jonasongg"},"content":" Scanner loader \u003d new Scanner(file);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jonasongg"},"content":" while (loader.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jonasongg"},"content":" String[] fields \u003d loader.nextLine().split(\";\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jonasongg"},"content":" String description \u003d fields[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jonasongg"},"content":" boolean isDone \u003d fields[1].equals(\"X\");","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jonasongg"},"content":" switch (fields[0]) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jonasongg"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jonasongg"},"content":" tasks.add(new Todo(description, isDone));","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jonasongg"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jonasongg"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jonasongg"},"content":" tasks.add(new Deadline(description, isDone, LocalDateTime.parse(fields[3])));","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jonasongg"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jonasongg"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"jonasongg"},"content":" tasks.add(new Event(description, isDone, LocalDateTime.parse(fields[3]),","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"jonasongg"},"content":" LocalDateTime.parse(fields[4])));","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"jonasongg"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"jonasongg"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"jonasongg"},"content":" createFile(file);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"jonasongg"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"jonasongg"},"content":" * Saves the tasks to the file provided by the filepath after Duke exits.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"jonasongg"},"content":" * @throws DukeStorageException If the file cannot be created, or some other IOException is thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"jonasongg"},"content":" public void saveData(TaskList tasks) throws DukeStorageException {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"jonasongg"},"content":" try (FileWriter fw \u003d new FileWriter(filePath)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"jonasongg"},"content":" fw.write(tasks.stringifyTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"jonasongg"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"jonasongg"},"content":" throw new DukeStorageException(\"Something went wrong with saving the tasks\");","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":100}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * Represents a list of tasks to be used by the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * Creates a TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" * Creates a TaskList object with the given list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" * Gets the task at the given index.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" * @return The task at the given index.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" * Adds a task to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" * Removes the task at the given index.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":" public void removeTask(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jonasongg"},"content":" * Stringifies the list of tasks for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jonasongg"},"content":" * @return The stringified list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jonasongg"},"content":" public String stringifyTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jonasongg"},"content":" return tasks.stream().map(Task::encodeTask).collect(Collectors.joining(\"\\n\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jonasongg"},"content":" * Gets the size of the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jonasongg"},"content":" * @return The size of the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jonasongg"},"content":" public int getSize() {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jonasongg"},"content":" return tasks.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jonasongg"},"content":" * Finds tasks that match the specified keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jonasongg"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jonasongg"},"content":" * @return A task list containing tasks that match the specified keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jonasongg"},"content":" public TaskList findTasks(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jonasongg"},"content":" return new TaskList(tasks.stream()","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"jonasongg"},"content":" .filter(task -\u003e task.matchDescription(keyword))","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"jonasongg"},"content":" .collect(Collectors.toList()));","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":89}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" * Represents the user interface of the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * Handles the input and output of the chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" private static final String HORIZONTAL_LINE \u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * Creates a Ui object.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" public Ui() {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" * Reads the input from the user using the default System.in Scanner.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * @return The input from the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" public String readInput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" private void outputMessage(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" System.out.println(HORIZONTAL_LINE + message + HORIZONTAL_LINE);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" * Shows the welcome message when the Duke chat-bot starts.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" public void showWelcomeMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" outputMessage(\" Hello! I\u0027m Pixel\\n What can I do for you?\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" * Shows the message when the Duke chat-bot loads the tasks from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" public void showLoadedTasksMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" outputMessage(\" Loaded tasks from database!\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" * Shows the goodbye message when the Duke chat-bot exits.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" * Also closes the default System.in Scanner.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":" public void closeAndGoodbyeMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":" outputMessage(\" Bye. Hope to see you again soon!\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":" scanner.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jonasongg"},"content":" * Shows the error message when the Duke chat-bot encounters an error, specifically a DukeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jonasongg"},"content":" * @param e The DukeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jonasongg"},"content":" public void showErrorMessage(DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jonasongg"},"content":" outputMessage(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jonasongg"},"content":" * Shows the list of tasks when the Duke chat-bot lists the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks to be shown.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jonasongg"},"content":" public void listTasks(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jonasongg"},"content":" if (tasks.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jonasongg"},"content":" outputMessage(\" There are no tasks in your list!\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"jonasongg"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"jonasongg"},"content":" StringBuilder tasksString \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"jonasongg"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"jonasongg"},"content":" tasksString.append(String.format(\" %d. %s\\n\", i + 1, tasks.getTask(i).toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"jonasongg"},"content":" outputMessage(String.format(\" Here are the tasks in your list:\\n%s\", tasksString));","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"jonasongg"},"content":" * Shows the message when the Duke chat-bot marks a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"jonasongg"},"content":" * @param task The task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"jonasongg"},"content":" public void showDoneMessage(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"jonasongg"},"content":" outputMessage(String.format(\" Nice! I\u0027ve marked this task as done:\\n %s\\n\", task));","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"jonasongg"},"content":" * Shows the message when the Duke chat-bot marks a task as not done yet.","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"jonasongg"},"content":" * @param task The task to be marked as not done yet.","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"jonasongg"},"content":" public void showUndoneMessage(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"jonasongg"},"content":" outputMessage(String.format(\" OK, I\u0027ve marked this task as not done yet:\\n %s\\n\", task));","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"jonasongg"},"content":" * Shows the message when the Duke chat-bot adds a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"jonasongg"},"content":" * @param taskSize The size of the list of tasks after adding.","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"jonasongg"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"jonasongg"},"content":" public void showAddMessage(int taskSize, Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"jonasongg"},"content":" outputMessage(String.format(","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"jonasongg"},"content":" \" Got it. I\u0027ve added this task:\\n %s\\n Now you have %d task%s in the list.\\n\",","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"jonasongg"},"content":" task, taskSize, taskSize \u003d\u003d 1 ? \"\" : \"s\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"jonasongg"},"content":" * Shows the message when the Duke chat-bot deletes a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"jonasongg"},"content":" * @param taskSize The size of the list of tasks after deletion.","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"jonasongg"},"content":" * @param task The task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"jonasongg"},"content":" public void showDeleteMessage(int taskSize, Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"jonasongg"},"content":" outputMessage(String.format(","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"jonasongg"},"content":" \" Noted. I\u0027ve removed this task:\\n %s\\n Now you have %d task%s in the list.\\n\",","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"jonasongg"},"content":" task, taskSize, taskSize \u003d\u003d 1 ? \"\" : \"s\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"jonasongg"},"content":" public void showNoMatchingTasksMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"jonasongg"},"content":" outputMessage(\" There are no matching tasks in your list!\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"jonasongg"},"content":" public void showMatchingTasksMessage(TaskList matchingTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"jonasongg"},"content":" StringBuilder tasksString \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"jonasongg"},"content":" for (int i \u003d 0; i \u003c matchingTasks.getSize(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"jonasongg"},"content":" tasksString.append(String.format(\" %d. %s\\n\", i + 1, matchingTasks.getTask(i).toString()));","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"jonasongg"},"content":" outputMessage(String.format(\" Here are the matching tasks in your list:\\n%s\", tasksString));","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":138}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" * Represents a command that adds a task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" private final Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * Creates an AddCommand object.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" * Executes the command: adds the task to the list of tasks and displays an \"Added\" message.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" ui.showAddMessage(tasks.getSize(), task);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" * Returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":45}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" * Represents a command that can be executed by Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" * @throws DukeException If an error occurs during execution.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" * Returns true iff the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" * @return True iff the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":28}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeTaskNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * Represents a command that deletes a task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * Creates a DeleteCommand object.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" * @param taskIndex The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" * Executes the command: deletes the task from the list of tasks and displays a \"Deleted\" message.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" * @throws DukeTaskNotFoundException If the task to be deleted does not exist.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeTaskNotFoundException {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" Task task \u003d tasks.getTask(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" tasks.removeTask(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" ui.showDeleteMessage(tasks.getSize(), task);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" throw new DukeTaskNotFoundException();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" * Returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":52}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeStorageException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" * Represents a command that exits Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" * Executes the command: displays a \"Goodbye\" message and exits Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" ui.closeAndGoodbyeMessage();","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" storage.saveData(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" } catch (DukeStorageException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" ui.showErrorMessage(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" * Returns true.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" * @return True.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":38}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Represents a command to find tasks in the task list based on a keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" private final String keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" * Constructs a find command with the specified keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" * Executes the find command.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" * @param tasks The task list to search for tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface to show messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage to save the task list to.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" TaskList matchingTasks \u003d tasks.findTasks(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" if (matchingTasks.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" ui.showNoMatchingTasksMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" ui.showMatchingTasksMessage(matchingTasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" * Returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jonasongg":46}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Represents a command that lists all tasks in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" * Executes the command: displays all tasks in the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" ui.listTasks(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" * Returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":32}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeTaskNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" * Represents a command that marks a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * Creates a MarkCommand object.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * @param taskIndex The index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" public MarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" * Executes the command: marks the task as done and displays a \"Done\" message.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" * @throws DukeTaskNotFoundException If the task to be marked as done does not exist.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeTaskNotFoundException {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" ui.showDoneMessage(tasks.getTask(taskIndex).markAsDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" throw new DukeTaskNotFoundException();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" * Returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":49}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeTaskNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" * Represents a command that marks a task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * Creates a UnmarkCommand object.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * @param taskIndex The index of the task to be marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" public UnmarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" * Executes the command: marks the task as undone and displays a \"Undone\" message.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" * @throws DukeTaskNotFoundException If the task to be marked as undone does not exist.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeTaskNotFoundException {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" ui.showUndoneMessage(tasks.getTask(taskIndex).markAsUndone());","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" throw new DukeTaskNotFoundException();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" * Returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":49}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":" * Represents an exception that occurs during the execution of Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Constructs a DukeException with the specified detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * @param message The detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" super(\"☹ OOPS!!! \" + message);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":15}},{"path":"src/main/java/duke/exception/DukeIllegalArgumentsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":" * Represents an exception that occurs when the arguments of a command are invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"public class DukeIllegalArgumentsException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Constructs a DukeIllegalArgumentsException with the specified detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * @param message The detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" public DukeIllegalArgumentsException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":15}},{"path":"src/main/java/duke/exception/DukeStorageException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":" * Represents an exception that occurs when an error occurs during any storage activities of Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"public class DukeStorageException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Constructs a DukeStorageException with the specified detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * @param message The detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" public DukeStorageException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":15}},{"path":"src/main/java/duke/exception/DukeTaskNotFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":" * Represents an exception that occurs when a task cannot be found.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"public class DukeTaskNotFoundException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Constructs a DukeTaskNotFoundException.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" public DukeTaskNotFoundException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" super(\"I can\u0027t find that task!\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":13}},{"path":"src/main/java/duke/exception/DukeUnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":" * Represents an exception that occurs when an unknown command is given.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"public class DukeUnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Constructs a DukeUnknownCommandException.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" public DukeUnknownCommandException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" super(\"I\u0027m sorry, but I don\u0027t know what that means :-(\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":13}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":" * Represents a deadline to be used by the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" * Creates a Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" super(description, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" * Creates a Deadline object with done status as specified.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * @param isDone Whether the deadline is done.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" public Deadline(String description, boolean isDone, LocalDateTime by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" * @return The string representation of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), this.by.format(DATE_TIME_FORMAT));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" * Returns the deadline encoded for storage for the Duke chat-bot","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" * @return The deadline encoded for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" public String encodeTask() {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" return String.format(\"D;%s;%s;%s\", this.isDone ? \"X\" : \" \", this.description, this.by);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jonasongg":53}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":" * Represents an event to be used by the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" * Creates an Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" super(description, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * Creates an Event object with done status as specified.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" * @param isDone Whether the event is done.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" public Event(String description, boolean isDone, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" * Returns the string representation of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" * @return The string representation of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" return String.format(\"[E]%s (from: %s | to: %s)\", super.toString(),","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" this.from.format(DATE_TIME_FORMAT), this.to.format(DATE_TIME_FORMAT));","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" * Returns the event encoded for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":" * @return The event encoded for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":" public String encodeTask() {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"jonasongg"},"content":" return String.format(\"E;%s;%s;%s;%s\", this.isDone ? \"X\" : \" \", this.description, this.from, this.to);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jonasongg":59}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":" * Represents a task to be used by the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"abstract public class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" protected static final DateTimeFormatter DATE_TIME_FORMAT \u003d DateTimeFormatter.ofPattern(\"d MMM yyyy, HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" * Creates a Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * @param isDone Whether the task is done.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" protected Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" * Checks if the task description matches the specified keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" * @return True if the task description matches the specified keyword, false otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" public boolean matchDescription(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" return this.description.contains(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" * @return The task.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" public Task markAsDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" return this;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" * @return The task.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" public Task markAsUndone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" return this;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":" * Returns the task encoded for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jonasongg"},"content":" * @return The task encoded for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jonasongg"},"content":" public abstract String encodeTask();","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jonasongg"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jonasongg"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jonasongg"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"jonasongg"},"content":" return String.format(\"[%s] %s\", this.isDone ? \"X\" : \" \", this.description);","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"jonasongg":70}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":" * Represents a to-do task to be used by the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Creates a To-do object.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" super(description, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * Creates a To-do object with done status as specified.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" * @param isDone Whether the to-do task is done.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * Returns the string representation of the to-do task.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" * @return The string representation of the to-do task.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" * Returns the to-do task encoded for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" * @return The to-do task encoded for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" public String encodeTask() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" return String.format(\"T;%s;%s\", this.isDone ? \"X\" : \" \", this.description);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jonasongg":45}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeIllegalArgumentsException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" public void testEventWithoutAnything() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" Exception exception \u003d assertThrows(DukeIllegalArgumentsException.class,","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" () -\u003e Parser.parse(\"event\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" assertEquals(\"☹ OOPS!!! The description of an event cannot be empty\\n\", exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" public void testEventWithoutDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" Exception exception \u003d assertThrows(DukeIllegalArgumentsException.class,","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" () -\u003e Parser.parse(\"event /from\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" assertEquals(\"☹ OOPS!!! The description of an event cannot be empty\\n\", exception.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" public void testEventWithoutFrom() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" Exception exception \u003d assertThrows(DukeIllegalArgumentsException.class,","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" () -\u003e Parser.parse(\"event description\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" assertEquals(\"☹ OOPS!!! The start time of the event must be specified! (after /from)\\n\",","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" public void testEventWithoutToTime() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" Exception exception \u003d assertThrows(DukeIllegalArgumentsException.class,","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" () -\u003e Parser.parse(\"event description /from 29/2/2012\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" assertEquals(\"☹ OOPS!!! The end time of the event must be specified! (after /to)\\n\",","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" exception.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" public void testDeadlineWithInvalidFromTime() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" Exception exception \u003d assertThrows(DukeIllegalArgumentsException.class,","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" () -\u003e Parser.parse(\"deadline description /by 9/29/2012 1234\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" \"☹ OOPS!!! The deadline date provided must be in the format: dd/mm/yyyy HHmm (in 24h format)\\n\",","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" exception.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":48}},{"path":"src/test/java/duke/command/CommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeTaskNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"public class CommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" public void testSeriesOfAddCommands() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" new AddCommand(new Todo(\"a\")).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" new AddCommand(new Todo(\"b\")).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" new AddCommand(new Todo(\"c\")).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" assertEquals(tasks.stringifyTasks(), \"T; ;a\\nT; ;b\\nT; ;c\");","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" public void testDeleteCommandWhenEmpty() {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" Command command \u003d new DeleteCommand(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" // storage is not used in deleteCommand, so the filePath is not important","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" Exception exception \u003d assertThrows(DukeTaskNotFoundException.class,","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" () -\u003e command.execute(new TaskList(), new Ui(), new Storage(\"data/duke.txt\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" assertEquals(\"☹ OOPS!!! I can\u0027t find that task!\\n\", exception.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" public void testMarkUnmarkCommands() {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" new AddCommand(new Todo(\"a\")).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" new AddCommand(new Todo(\"b\")).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" new MarkCommand(0).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" new MarkCommand(1).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":" new UnmarkCommand(0).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" new UnmarkCommand(1).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" } catch (DukeTaskNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" // should not reach here","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":" assertEquals(tasks.stringifyTasks(), \"T; ;a\\nT; ;b\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jonasongg"},"content":" public void testOutOfBoundsMarkCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jonasongg"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jonasongg"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jonasongg"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jonasongg"},"content":" new AddCommand(new Todo(\"a\")).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jonasongg"},"content":" new AddCommand(new Todo(\"b\")).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jonasongg"},"content":" Command command \u003d new MarkCommand(2);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jonasongg"},"content":" Exception exception \u003d assertThrows(DukeTaskNotFoundException.class,","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jonasongg"},"content":" () -\u003e command.execute(tasks, ui, storage));","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jonasongg"},"content":" assertEquals(\"☹ OOPS!!! I can\u0027t find that task!\\n\", exception.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":73}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"todo a","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"todo b","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jonasongg":7}}] +[{"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":"jonasongg"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"jonasongg":6}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeStorageException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * Represents a Duke chat-bot which can store and manage tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" * Creates a Duke chat-bot object.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" * @param filePath The path to the file to store the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" this.tasks \u003d new TaskList(storage.loadData());","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" } catch (DukeStorageException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" ui.showErrorMessage(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" new Duke(Paths.get(\"data\", \"duke.txt\").toAbsolutePath().toString()).run();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" * Runs the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" boolean isRunning \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" if (tasks.getSize() !\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" ui.showLoadedTasksMessage();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" while (isRunning) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" Command command \u003d Parser.parse(ui.readInput());","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" command.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" isRunning \u003d !command.isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":" ui.showErrorMessage(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":3,"jonasongg":55}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeIllegalArgumentsException;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeUnknownCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" * Represents a parser for the Duke chat-bot that parses the user input and returns the corresponding command.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" private static final DateTimeFormatter dateTimeFormat \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" * Parses the user input and returns the corresponding command.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" * @param fullCommand The user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" * @return The corresponding command.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" * @throws DukeException If the user input is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" String[] splitInput \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" String commandWord \u003d splitInput[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" switch (commandWord) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" return new MarkCommand(Integer.parseInt(splitInput[1]) - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" return new UnmarkCommand(Integer.parseInt(splitInput[1]) - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(\"The description of a todo cannot be empty\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" return new AddCommand(new Todo(splitInput[1].trim()));","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(\"The description of an deadline cannot be empty\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jonasongg"},"content":" String[] splitInputBy \u003d fullCommand.split(\"/by\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jonasongg"},"content":" String[] splitDeadlineDescription \u003d splitInputBy[0].split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jonasongg"},"content":" if (splitDeadlineDescription.length \u003d\u003d 1 || splitDeadlineDescription[1].equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(\"The description of an deadline cannot be empty\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jonasongg"},"content":" if (splitInputBy.length \u003d\u003d 1 || splitInputBy[1].equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jonasongg"},"content":" \"The deadline date must be specified! (after /by)\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jonasongg"},"content":" return new AddCommand(new Deadline(splitDeadlineDescription[1].trim(),","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jonasongg"},"content":" LocalDateTime.parse(splitInputBy[1].trim(), dateTimeFormat)));","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jonasongg"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jonasongg"},"content":" \"The deadline date provided must be in the format: dd/mm/yyyy HHmm (in 24h format)\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jonasongg"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jonasongg"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(\"The description of an event cannot be empty\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"jonasongg"},"content":" String[] splitInputFrom \u003d fullCommand.split(\"/from\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jonasongg"},"content":" String[] splitEventDescription \u003d splitInputFrom[0].split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jonasongg"},"content":" if (splitEventDescription.length \u003d\u003d 1 || splitEventDescription[1].equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(\"The description of an event cannot be empty\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jonasongg"},"content":" if (splitInputFrom.length \u003d\u003d 1 || splitInputFrom[1].equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"jonasongg"},"content":" \"The start time of the event must be specified! (after /from)\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"jonasongg"},"content":" String[] splitInputTo \u003d splitInputFrom[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"jonasongg"},"content":" if (splitInputTo.length \u003d\u003d 1 || splitInputTo[1].equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"jonasongg"},"content":" \"The end time of the event must be specified! (after /to)\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"jonasongg"},"content":" return new AddCommand(","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"jonasongg"},"content":" new Event(splitInputFrom[0].trim(),","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"jonasongg"},"content":" LocalDateTime.parse(splitInputTo[0].trim(), dateTimeFormat),","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"jonasongg"},"content":" LocalDateTime.parse(splitInputTo[1].trim(), dateTimeFormat)));","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"jonasongg"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"jonasongg"},"content":" \"The event dates provided must be in the format: dd/mm/yyyy HHmm (in 24h format)\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"jonasongg"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"jonasongg"},"content":" return new DeleteCommand(Integer.parseInt(splitInput[1]) - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"jonasongg"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"jonasongg"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"jonasongg"},"content":" throw new DukeIllegalArgumentsException(\"The keyword to search for cannot be empty!\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"jonasongg"},"content":" return new FindCommand(splitInput[1].trim());","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"jonasongg"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"jonasongg"},"content":" throw new DukeUnknownCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":116}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeStorageException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" * Represents a storage for the Duke chat-bot that stores the tasks in a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" * This serves to allow the tasks to be saved and loaded on the hard drive when Duke starts and exits.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" private final String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * Creates a Storage object.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" * @param filePath The path to the file to store the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" * Creates the file that stores the tasks if it does not exist.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" * @param file The file to be created.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" * @throws DukeStorageException If the file cannot be created, or some other IOException is thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" private void createFile(File file) throws DukeStorageException {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" boolean isCreated \u003d file.getParentFile().mkdirs() \u0026\u0026 file.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" if (!isCreated \u0026\u0026 !file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" throw new DukeStorageException(\"Something went wrong with creating the store of tasks.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" throw new DukeStorageException(\"Something went wrong with creating the store of tasks.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":" * Loads the tasks from the file provided by the filepath when Duke first starts.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":" * @throws DukeStorageException If the file cannot be created, or some other IOException is thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jonasongg"},"content":" public List\u003cTask\u003e loadData() throws DukeStorageException {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jonasongg"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jonasongg"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jonasongg"},"content":" Scanner loader \u003d new Scanner(file);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jonasongg"},"content":" while (loader.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jonasongg"},"content":" String[] fields \u003d loader.nextLine().split(\";\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jonasongg"},"content":" String description \u003d fields[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jonasongg"},"content":" boolean isDone \u003d fields[1].equals(\"X\");","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jonasongg"},"content":" switch (fields[0]) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jonasongg"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jonasongg"},"content":" tasks.add(new Todo(description, isDone));","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jonasongg"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jonasongg"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jonasongg"},"content":" tasks.add(new Deadline(description, isDone, LocalDateTime.parse(fields[3])));","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jonasongg"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jonasongg"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"jonasongg"},"content":" tasks.add(new Event(description, isDone, LocalDateTime.parse(fields[3]),","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"jonasongg"},"content":" LocalDateTime.parse(fields[4])));","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"jonasongg"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"jonasongg"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"jonasongg"},"content":" // Do nothing if the task is not recognised","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"jonasongg"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"jonasongg"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"jonasongg"},"content":" createFile(file);","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"jonasongg"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"jonasongg"},"content":" * Saves the tasks to the file provided by the filepath after Duke exits.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"jonasongg"},"content":" * @throws DukeStorageException If the file cannot be created, or some other IOException is thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"jonasongg"},"content":" public void saveData(TaskList tasks) throws DukeStorageException {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"jonasongg"},"content":" try (FileWriter fw \u003d new FileWriter(filePath)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"jonasongg"},"content":" fw.write(tasks.stringifyTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"jonasongg"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"jonasongg"},"content":" throw new DukeStorageException(\"Something went wrong with saving the tasks\");","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":103}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * Represents a list of tasks to be used by the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * Creates a TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" * Creates a TaskList object with the given list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" * Gets the task at the given index.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" * @return The task at the given index.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" * Adds a task to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" * Removes the task at the given index.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":" public void removeTask(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jonasongg"},"content":" * Stringifies the list of tasks for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jonasongg"},"content":" * @return The stringified list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jonasongg"},"content":" public String stringifyTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jonasongg"},"content":" return tasks.stream().map(Task::encodeTask).collect(Collectors.joining(\"\\n\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jonasongg"},"content":" * Gets the size of the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jonasongg"},"content":" * @return The size of the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jonasongg"},"content":" public int getSize() {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jonasongg"},"content":" return tasks.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jonasongg"},"content":" * Finds tasks that match the specified keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jonasongg"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jonasongg"},"content":" * @return A task list containing tasks that match the specified keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jonasongg"},"content":" public TaskList findTasks(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jonasongg"},"content":" return new TaskList(tasks.stream()","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"jonasongg"},"content":" .filter(task -\u003e task.hasMatchingDescription(keyword))","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"jonasongg"},"content":" .collect(Collectors.toList()));","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":89}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" * Represents the user interface of the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * Handles the input and output of the chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" private static final String HORIZONTAL_LINE \u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * Creates a Ui object.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" public Ui() {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" * Reads the input from the user using the default System.in Scanner.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * @return The input from the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" public String readInput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" private void outputMessage(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" System.out.println(HORIZONTAL_LINE + message + HORIZONTAL_LINE);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" * Shows the welcome message when the Duke chat-bot starts.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" public void showWelcomeMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" outputMessage(\" Hello! I\u0027m Pixel\\n What can I do for you?\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" * Shows the message when the Duke chat-bot loads the tasks from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" public void showLoadedTasksMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" outputMessage(\" Loaded tasks from database!\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" * Shows the goodbye message when the Duke chat-bot exits.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" * Also closes the default System.in Scanner.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":" public void closeAndGoodbyeMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":" outputMessage(\" Bye. Hope to see you again soon!\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":" scanner.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jonasongg"},"content":" * Shows the error message when the Duke chat-bot encounters an error, specifically a DukeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jonasongg"},"content":" * @param e The DukeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jonasongg"},"content":" public void showErrorMessage(DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jonasongg"},"content":" outputMessage(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jonasongg"},"content":" * Shows the list of tasks when the Duke chat-bot lists the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks to be shown.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jonasongg"},"content":" public void listTasks(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jonasongg"},"content":" if (tasks.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jonasongg"},"content":" outputMessage(\" There are no tasks in your list!\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"jonasongg"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"jonasongg"},"content":" StringBuilder tasksString \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"jonasongg"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"jonasongg"},"content":" tasksString.append(String.format(\" %d. %s\\n\", i + 1, tasks.getTask(i).toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"jonasongg"},"content":" outputMessage(String.format(\" Here are the tasks in your list:\\n%s\", tasksString));","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"jonasongg"},"content":" * Shows the message when the Duke chat-bot marks a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"jonasongg"},"content":" * @param task The task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"jonasongg"},"content":" public void showDoneMessage(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"jonasongg"},"content":" outputMessage(String.format(\" Nice! I\u0027ve marked this task as done:\\n %s\\n\", task));","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"jonasongg"},"content":" * Shows the message when the Duke chat-bot marks a task as not done yet.","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"jonasongg"},"content":" * @param task The task to be marked as not done yet.","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"jonasongg"},"content":" public void showUndoneMessage(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"jonasongg"},"content":" outputMessage(String.format(\" OK, I\u0027ve marked this task as not done yet:\\n %s\\n\", task));","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"jonasongg"},"content":" * Shows the message when the Duke chat-bot adds a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"jonasongg"},"content":" * @param taskSize The size of the list of tasks after adding.","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"jonasongg"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"jonasongg"},"content":" public void showAddMessage(int taskSize, Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"jonasongg"},"content":" outputMessage(String.format(","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"jonasongg"},"content":" \" Got it. I\u0027ve added this task:\\n %s\\n Now you have %d task%s in the list.\\n\",","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"jonasongg"},"content":" task, taskSize, taskSize \u003d\u003d 1 ? \"\" : \"s\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"jonasongg"},"content":" * Shows the message when the Duke chat-bot deletes a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"jonasongg"},"content":" * @param taskSize The size of the list of tasks after deletion.","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"jonasongg"},"content":" * @param task The task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"jonasongg"},"content":" public void showDeleteMessage(int taskSize, Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"jonasongg"},"content":" outputMessage(String.format(","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"jonasongg"},"content":" \" Noted. I\u0027ve removed this task:\\n %s\\n Now you have %d task%s in the list.\\n\",","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"jonasongg"},"content":" task, taskSize, taskSize \u003d\u003d 1 ? \"\" : \"s\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"jonasongg"},"content":" * Shows the message when the Duke chat-bot finds matching tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"jonasongg"},"content":" public void showNoMatchingTasksMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"jonasongg"},"content":" outputMessage(\" There are no matching tasks in your list!\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"jonasongg"},"content":" * Shows the message when the Duke chat-bot finds matching tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"jonasongg"},"content":" * @param matchingTasks The list of matching tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"jonasongg"},"content":" public void showMatchingTasksMessage(TaskList matchingTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"jonasongg"},"content":" StringBuilder tasksString \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"jonasongg"},"content":" for (int i \u003d 0; i \u003c matchingTasks.getSize(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"jonasongg"},"content":" tasksString.append(String.format(\" %d. %s\\n\", i + 1, matchingTasks.getTask(i).toString()));","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"jonasongg"},"content":" outputMessage(String.format(\" Here are the matching tasks in your list:\\n%s\", tasksString));","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":146}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" * Represents a command that adds a task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" private final Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * Creates an AddCommand object.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" * Executes the command: adds the task to the list of tasks and displays an \"Added\" message.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" ui.showAddMessage(tasks.getSize(), task);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" * Returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":45}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" * Represents a command that can be executed by Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" * @throws DukeException If an error occurs during execution.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" * Returns true iff the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" * @return True iff the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":28}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeTaskNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * Represents a command that deletes a task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * Creates a DeleteCommand object.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" * @param taskIndex The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" * Executes the command: deletes the task from the list of tasks and displays a \"Deleted\" message.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" * @throws DukeTaskNotFoundException If the task to be deleted does not exist.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeTaskNotFoundException {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" Task task \u003d tasks.getTask(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" tasks.removeTask(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" ui.showDeleteMessage(tasks.getSize(), task);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" throw new DukeTaskNotFoundException();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" * Returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":52}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeStorageException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" * Represents a command that exits Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" * Executes the command: displays a \"Goodbye\" message and exits Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" ui.closeAndGoodbyeMessage();","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" storage.saveData(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" } catch (DukeStorageException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" ui.showErrorMessage(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" * Returns true.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" * @return True.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":38}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Represents a command to find tasks in the task list based on a keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" private final String keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" * Constructs a find command with the specified keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" * Executes the find command.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" * @param tasks The task list to search for tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface to show messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage to save the task list to.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" TaskList matchingTasks \u003d tasks.findTasks(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" if (matchingTasks.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" ui.showNoMatchingTasksMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" ui.showMatchingTasksMessage(matchingTasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" * Returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jonasongg":46}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Represents a command that lists all tasks in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" * Executes the command: displays all tasks in the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" ui.listTasks(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" * Returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":32}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeTaskNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" * Represents a command that marks a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * Creates a MarkCommand object.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * @param taskIndex The index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" public MarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" * Executes the command: marks the task as done and displays a \"Done\" message.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" * @throws DukeTaskNotFoundException If the task to be marked as done does not exist.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeTaskNotFoundException {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" ui.showDoneMessage(tasks.getTask(taskIndex).markAsDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" throw new DukeTaskNotFoundException();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" * Returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":49}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeTaskNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" * Represents a command that marks a task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * Creates a UnmarkCommand object.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * @param taskIndex The index of the task to be marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" public UnmarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" * Executes the command: marks the task as undone and displays a \"Undone\" message.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" * @param storage The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" * @throws DukeTaskNotFoundException If the task to be marked as undone does not exist.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeTaskNotFoundException {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" ui.showUndoneMessage(tasks.getTask(taskIndex).markAsUndone());","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" throw new DukeTaskNotFoundException();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" * Returns false.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" * @return False.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":49}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":" * Represents an exception that occurs during the execution of Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Constructs a DukeException with the specified detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * @param message The detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" super(\"☹ OOPS!!! \" + message);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":15}},{"path":"src/main/java/duke/exception/DukeIllegalArgumentsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":" * Represents an exception that occurs when the arguments of a command are invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"public class DukeIllegalArgumentsException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Constructs a DukeIllegalArgumentsException with the specified detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * @param message The detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" public DukeIllegalArgumentsException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":15}},{"path":"src/main/java/duke/exception/DukeStorageException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":" * Represents an exception that occurs when an error occurs during any storage activities of Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"public class DukeStorageException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Constructs a DukeStorageException with the specified detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * @param message The detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" public DukeStorageException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":15}},{"path":"src/main/java/duke/exception/DukeTaskNotFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":" * Represents an exception that occurs when a task cannot be found.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"public class DukeTaskNotFoundException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Constructs a DukeTaskNotFoundException.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" public DukeTaskNotFoundException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" super(\"I can\u0027t find that task!\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":13}},{"path":"src/main/java/duke/exception/DukeUnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":" * Represents an exception that occurs when an unknown command is given.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"public class DukeUnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Constructs a DukeUnknownCommandException.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" public DukeUnknownCommandException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" super(\"I\u0027m sorry, but I don\u0027t know what that means :-(\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":13}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":" * Represents a deadline to be used by the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" * Creates a Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" super(description, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" * Creates a Deadline object with done status as specified.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * @param isDone Whether the deadline is done.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" public Deadline(String description, boolean isDone, LocalDateTime by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" * @return The string representation of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), this.by.format(DATE_TIME_FORMAT));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" * Returns the deadline encoded for storage for the Duke chat-bot","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" * @return The deadline encoded for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" public String encodeTask() {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" return String.format(\"D;%s;%s;%s\", this.isDone ? \"X\" : \" \", this.description, this.by);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jonasongg":53}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":" * Represents an event to be used by the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" * Creates an Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" super(description, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" * Creates an Event object with done status as specified.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" * @param isDone Whether the event is done.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" public Event(String description, boolean isDone, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" * Returns the string representation of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" * @return The string representation of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" return String.format(\"[E]%s (from: %s | to: %s)\", super.toString(),","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" this.from.format(DATE_TIME_FORMAT), this.to.format(DATE_TIME_FORMAT));","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" * Returns the event encoded for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":" * @return The event encoded for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":" public String encodeTask() {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"jonasongg"},"content":" return String.format(\"E;%s;%s;%s;%s\", this.isDone ? \"X\" : \" \", this.description, this.from, this.to);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jonasongg":59}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":" * Represents a task to be used by the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" protected static final DateTimeFormatter DATE_TIME_FORMAT \u003d DateTimeFormatter.ofPattern(\"d MMM yyyy, HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" * Creates a Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * @param isDone Whether the task is done.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" protected Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" * Checks if the task description matches the specified keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" * @return True if the task description matches the specified keyword, false otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" public boolean hasMatchingDescription(String keyword) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" return this.description.contains(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" * @return The task.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" public Task markAsDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" return this;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" * @return The task.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" public Task markAsUndone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" return this;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":" * Returns the task encoded for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jonasongg"},"content":" * @return The task encoded for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jonasongg"},"content":" public abstract String encodeTask();","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jonasongg"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jonasongg"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jonasongg"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"jonasongg"},"content":" return String.format(\"[%s] %s\", this.isDone ? \"X\" : \" \", this.description);","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"jonasongg":70}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":" * Represents a to-do task to be used by the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":" * Creates a To-do object.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" super(description, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" * Creates a To-do object with done status as specified.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" * @param isDone Whether the to-do task is done.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" * Returns the string representation of the to-do task.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" * @return The string representation of the to-do task.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" * Returns the to-do task encoded for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" * @return The to-do task encoded for storage for the Duke chat-bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" public String encodeTask() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" return String.format(\"T;%s;%s\", this.isDone ? \"X\" : \" \", this.description);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jonasongg":45}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeIllegalArgumentsException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":" public void testEventWithoutAnything() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":" Exception exception \u003d assertThrows(DukeIllegalArgumentsException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":" Parser.parse(\"event\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" assertEquals(\"☹ OOPS!!! The description of an event cannot be empty\\n\", exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" public void testEventWithoutDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" Exception exception \u003d assertThrows(DukeIllegalArgumentsException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" Parser.parse(\"event /from\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" assertEquals(\"☹ OOPS!!! The description of an event cannot be empty\\n\", exception.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":" public void testEventWithoutFrom() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" Exception exception \u003d assertThrows(DukeIllegalArgumentsException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" Parser.parse(\"event description\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" assertEquals(\"☹ OOPS!!! The start time of the event must be specified! (after /from)\\n\",","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":" exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":" public void testEventWithoutToTime() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" Exception exception \u003d assertThrows(DukeIllegalArgumentsException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" Parser.parse(\"event description /from 29/2/2012\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":" assertEquals(\"☹ OOPS!!! The end time of the event must be specified! (after /to)\\n\",","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" exception.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" public void testDeadlineWithInvalidFromTime() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" Exception exception \u003d assertThrows(DukeIllegalArgumentsException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" Parser.parse(\"deadline description /by 9/29/2012 1234\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":" assertEquals(","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" \"☹ OOPS!!! The deadline date provided must be in the format: dd/mm/yyyy HHmm (in 24h format)\\n\",","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" exception.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":49}},{"path":"src/test/java/duke/command/CommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jonasongg"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jonasongg"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jonasongg"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jonasongg"},"content":"import duke.exception.DukeTaskNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jonasongg"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jonasongg"},"content":"public class CommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jonasongg"},"content":" public void testSeriesOfAddCommands() {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jonasongg"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jonasongg"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jonasongg"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jonasongg"},"content":" new AddCommand(new Todo(\"a\")).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jonasongg"},"content":" new AddCommand(new Todo(\"b\")).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jonasongg"},"content":" new AddCommand(new Todo(\"c\")).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jonasongg"},"content":" assertEquals(tasks.stringifyTasks(), \"T; ;a\\nT; ;b\\nT; ;c\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jonasongg"},"content":" public void testDeleteCommandWhenEmpty() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jonasongg"},"content":" Command command \u003d new DeleteCommand(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jonasongg"},"content":" // storage is not used in deleteCommand, so the filePath is not important","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jonasongg"},"content":" Exception exception \u003d assertThrows(DukeTaskNotFoundException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"jonasongg"},"content":" command.execute(new TaskList(), new Ui(), new Storage(\"data/duke.txt\")));","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jonasongg"},"content":" assertEquals(\"☹ OOPS!!! I can\u0027t find that task!\\n\", exception.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jonasongg"},"content":" public void testMarkUnmarkCommands() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jonasongg"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jonasongg"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jonasongg"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jonasongg"},"content":" new AddCommand(new Todo(\"a\")).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jonasongg"},"content":" new AddCommand(new Todo(\"b\")).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jonasongg"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jonasongg"},"content":" new MarkCommand(0).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jonasongg"},"content":" new MarkCommand(1).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jonasongg"},"content":" new UnmarkCommand(0).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jonasongg"},"content":" new UnmarkCommand(1).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jonasongg"},"content":" } catch (DukeTaskNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jonasongg"},"content":" // should not reach here","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jonasongg"},"content":" assertEquals(tasks.stringifyTasks(), \"T; ;a\\nT; ;b\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jonasongg"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jonasongg"},"content":" public void testOutOfBoundsMarkCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jonasongg"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jonasongg"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jonasongg"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jonasongg"},"content":" new AddCommand(new Todo(\"a\")).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jonasongg"},"content":" new AddCommand(new Todo(\"b\")).execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jonasongg"},"content":" Command command \u003d new MarkCommand(2);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jonasongg"},"content":" Exception exception \u003d assertThrows(DukeTaskNotFoundException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"jonasongg"},"content":" command.execute(tasks, ui, storage));","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"jonasongg"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jonasongg"},"content":" assertEquals(\"☹ OOPS!!! I can\u0027t find that task!\\n\", exception.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jonasongg"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jonasongg"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jonasongg":74}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jonasongg"},"content":"todo a","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"jonasongg"},"content":"todo b","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"jonasongg"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"jonasongg"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"jonasongg"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jonasongg"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jonasongg"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jonasongg":7}}] diff --git a/jonasongg_ip_master/commits.json b/jonasongg_ip_master/commits.json index d17da313..0d87efd0 100644 --- a/jonasongg_ip_master/commits.json +++ b/jonasongg_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"jonasongg":[{"date":"2023-08-21","commitResults":[{"hash":"701f562291c9369769678720e3c1b0b5c0724810","isMergeCommit":false,"messageTitle":"change greeting message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"b3cd12de7d1667992b04662829a860d2bbdf60d2","isMergeCommit":false,"messageTitle":"add scanner for entering commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"fd258dcc96e2b462f6dbd6f13b46fe68eda0daba","isMergeCommit":false,"messageTitle":"create constant for horizontal line","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":8}}},{"hash":"e8ccacd566d9c847f0b7e35874c792934a518a01","isMergeCommit":false,"messageTitle":"add ability to store text and list them when requested","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"b23236221cbde144601e4af95a65d81cb2c6691a","isMergeCommit":false,"messageTitle":"add Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":4}}},{"hash":"82510b2adeb4bff5592e6957e045762c262d0f4f","isMergeCommit":false,"messageTitle":"add ability to mark and unmark tasks as done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"aab5c4f9b4265ccca8181cbd5e3edefa35442617","isMergeCommit":false,"messageTitle":"change to use switch case instead of if else","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":20}}},{"hash":"233fd49ae76c0b47963154e7cfb8d830872c4cab","isMergeCommit":false,"messageTitle":"refactor outputting message into its own function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":17}}},{"hash":"bb457b361f4388a7338f9deb97a77e494164e43a","isMergeCommit":false,"messageTitle":"add Todo class and change output messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":13}}},{"hash":"ff056ee520be8e422bc4ba1bd5ddde54e182e810","isMergeCommit":false,"messageTitle":"add Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"ab420cb499daaa7944a30f47255923642f606ecf","isMergeCommit":false,"messageTitle":"add Event class","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"a1eeaa4ae41124ebceb37baa0c93780d825a17b7","isMergeCommit":false,"messageTitle":"add automated testing and fix inconsistencies","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":8,"deletions":6}}},{"hash":"be00872dc2470eaa6b86512f83ee81c4ee2f8e1e","isMergeCommit":false,"messageTitle":"add basic error support","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}},{"hash":"c75a101089bae83d25e9eaaa407d79c45d0a9745","isMergeCommit":false,"messageTitle":"add delete command","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"83fbc2beaa91dda7f9a8ce948356cb8a9c1f708e","isMergeCommit":false,"messageTitle":"close scanner when bye","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"efb5adf4da70f4ca468757678dda67740d0233a4","isMergeCommit":false,"messageTitle":"implement saving data to file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":3}}},{"hash":"2ee3d008357f39b5bd9e1924af5b550110385ff6","isMergeCommit":false,"messageTitle":"implement loading data to file","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":18}}}]},{"date":"2023-08-29","commitResults":[{"hash":"04158e3c1ecda7a50822040d48f3424055a45f68","isMergeCommit":false,"messageTitle":"implement datetime parsing and displaying","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":86}}},{"hash":"84296d1efc0b097c0823413278e3d2e33f3e8fb8","isMergeCommit":false,"messageTitle":"refactor loading from file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":3}}},{"hash":"735fd93561b5e31dd64886255efc7eb7de6c126b","isMergeCommit":false,"messageTitle":"refactor storage into its own class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":151,"deletions":117}}},{"hash":"90590b05791fd82a2ea53fa0df858f585f17dc17","isMergeCommit":false,"messageTitle":"refactor TaskList into its own class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":23}}},{"hash":"0936528ec9998a12fdfeea52d5ffc352b163d216","isMergeCommit":false,"messageTitle":"refactor ui into its own class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":55}}},{"hash":"8f1ee3096efa84a366b21b17e3b30c79d50fee9a","isMergeCommit":false,"messageTitle":"add Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":1}}},{"hash":"38a70d2f536f5b44b71d5dd7291b24645af9abdf","isMergeCommit":false,"messageTitle":"add parser and integrate with commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":62}}},{"hash":"1b778e08190324931aac8ea296db82e5087e20ac","isMergeCommit":false,"messageTitle":"fix index bug for delete and un/mark","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"77e8c595574aa4fc63a4704c3994745b1a243e60","isMergeCommit":false,"messageTitle":"add exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":28}}},{"hash":"666bd9aa2e0b7fee6142cb439dbaff4eaaf5d4a7","isMergeCommit":false,"messageTitle":"add IllegalArgumentsExceptions for all tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"62a876cb3d83c4271cc46f20b66dfac68bb63c99","isMergeCommit":false,"messageTitle":"add exception for out-of-bounds task index","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":11}}},{"hash":"777e7212e151cf9778df4214e1aec1468dbc6a0a","isMergeCommit":false,"messageTitle":"refactor all files to packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":2}}},{"hash":"4e69d42bcf2dd93b0b1a33cd25fc2d3168f40725","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"2a05b48dd2619fbff3036203e694810b3f3f2fb5","isMergeCommit":false,"messageTitle":"change build gradle package name","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"802e615b169fe2527616df585e67734d4bdfb8d2","isMergeCommit":false,"messageTitle":"improve parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":7}}},{"hash":"68cdc367181e9f9f78e30b9a42c8509f5360a953","isMergeCommit":false,"messageTitle":"add test for command and parser","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":2}}}]},{"date":"2023-08-30","commitResults":[{"hash":"456b40bbaba25986d72c9a1b8da1e3472edc759e","isMergeCommit":false,"messageTitle":"fix parser bugs and add more parser tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":20}}},{"hash":"72887037c13c40e9ea36937d8babf3efbf5490b0","isMergeCommit":false,"messageTitle":"Add JavaDoc to all files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":411,"deletions":0}}},{"hash":"9d1209ed9437a2d29782624c1fa73b67c943520f","isMergeCommit":false,"messageTitle":"Tweak code to follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":102}}},{"hash":"e44305cf699ae0a947930131c7d9e885174cfaa3","isMergeCommit":false,"messageTitle":"Implement find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":149,"deletions":64}}},{"hash":"b54801f701265653d5cddeb236b754b8846bffd8","isMergeCommit":true,"messageTitle":"Merge branch-A-JavaDoc into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7630ab93c7394e18bbd9bcd4897a756e900e11d7","isMergeCommit":true,"messageTitle":"Merge branch-A-CodingStandards into master","messageBody":"","tags":["v0.1","Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"jonasongg":{"java":1256,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":7}},"authorContributionVariance":{"jonasongg":157667.58},"authorDisplayNameMap":{"jonasongg":"CS2103T-W15-3 JONA.. WEI"}} +{"authorDailyContributionsMap":{"jonasongg":[{"date":"2023-08-21","commitResults":[{"hash":"701f562291c9369769678720e3c1b0b5c0724810","isMergeCommit":false,"messageTitle":"change greeting message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"b3cd12de7d1667992b04662829a860d2bbdf60d2","isMergeCommit":false,"messageTitle":"add scanner for entering commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"fd258dcc96e2b462f6dbd6f13b46fe68eda0daba","isMergeCommit":false,"messageTitle":"create constant for horizontal line","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":8}}},{"hash":"e8ccacd566d9c847f0b7e35874c792934a518a01","isMergeCommit":false,"messageTitle":"add ability to store text and list them when requested","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"b23236221cbde144601e4af95a65d81cb2c6691a","isMergeCommit":false,"messageTitle":"add Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":4}}},{"hash":"82510b2adeb4bff5592e6957e045762c262d0f4f","isMergeCommit":false,"messageTitle":"add ability to mark and unmark tasks as done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"aab5c4f9b4265ccca8181cbd5e3edefa35442617","isMergeCommit":false,"messageTitle":"change to use switch case instead of if else","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":20}}},{"hash":"233fd49ae76c0b47963154e7cfb8d830872c4cab","isMergeCommit":false,"messageTitle":"refactor outputting message into its own function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":17}}},{"hash":"bb457b361f4388a7338f9deb97a77e494164e43a","isMergeCommit":false,"messageTitle":"add Todo class and change output messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":13}}},{"hash":"ff056ee520be8e422bc4ba1bd5ddde54e182e810","isMergeCommit":false,"messageTitle":"add Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"ab420cb499daaa7944a30f47255923642f606ecf","isMergeCommit":false,"messageTitle":"add Event class","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"a1eeaa4ae41124ebceb37baa0c93780d825a17b7","isMergeCommit":false,"messageTitle":"add automated testing and fix inconsistencies","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":8,"deletions":6}}},{"hash":"be00872dc2470eaa6b86512f83ee81c4ee2f8e1e","isMergeCommit":false,"messageTitle":"add basic error support","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}},{"hash":"c75a101089bae83d25e9eaaa407d79c45d0a9745","isMergeCommit":false,"messageTitle":"add delete command","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"83fbc2beaa91dda7f9a8ce948356cb8a9c1f708e","isMergeCommit":false,"messageTitle":"close scanner when bye","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"efb5adf4da70f4ca468757678dda67740d0233a4","isMergeCommit":false,"messageTitle":"implement saving data to file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":3}}},{"hash":"2ee3d008357f39b5bd9e1924af5b550110385ff6","isMergeCommit":false,"messageTitle":"implement loading data to file","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":18}}}]},{"date":"2023-08-29","commitResults":[{"hash":"04158e3c1ecda7a50822040d48f3424055a45f68","isMergeCommit":false,"messageTitle":"implement datetime parsing and displaying","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":86}}},{"hash":"84296d1efc0b097c0823413278e3d2e33f3e8fb8","isMergeCommit":false,"messageTitle":"refactor loading from file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":3}}},{"hash":"735fd93561b5e31dd64886255efc7eb7de6c126b","isMergeCommit":false,"messageTitle":"refactor storage into its own class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":151,"deletions":117}}},{"hash":"90590b05791fd82a2ea53fa0df858f585f17dc17","isMergeCommit":false,"messageTitle":"refactor TaskList into its own class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":23}}},{"hash":"0936528ec9998a12fdfeea52d5ffc352b163d216","isMergeCommit":false,"messageTitle":"refactor ui into its own class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":55}}},{"hash":"8f1ee3096efa84a366b21b17e3b30c79d50fee9a","isMergeCommit":false,"messageTitle":"add Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":1}}},{"hash":"38a70d2f536f5b44b71d5dd7291b24645af9abdf","isMergeCommit":false,"messageTitle":"add parser and integrate with commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":62}}},{"hash":"1b778e08190324931aac8ea296db82e5087e20ac","isMergeCommit":false,"messageTitle":"fix index bug for delete and un/mark","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"77e8c595574aa4fc63a4704c3994745b1a243e60","isMergeCommit":false,"messageTitle":"add exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":28}}},{"hash":"666bd9aa2e0b7fee6142cb439dbaff4eaaf5d4a7","isMergeCommit":false,"messageTitle":"add IllegalArgumentsExceptions for all tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"62a876cb3d83c4271cc46f20b66dfac68bb63c99","isMergeCommit":false,"messageTitle":"add exception for out-of-bounds task index","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":11}}},{"hash":"777e7212e151cf9778df4214e1aec1468dbc6a0a","isMergeCommit":false,"messageTitle":"refactor all files to packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":2}}},{"hash":"4e69d42bcf2dd93b0b1a33cd25fc2d3168f40725","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"2a05b48dd2619fbff3036203e694810b3f3f2fb5","isMergeCommit":false,"messageTitle":"change build gradle package name","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"802e615b169fe2527616df585e67734d4bdfb8d2","isMergeCommit":false,"messageTitle":"improve parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":7}}},{"hash":"68cdc367181e9f9f78e30b9a42c8509f5360a953","isMergeCommit":false,"messageTitle":"add test for command and parser","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":2}}}]},{"date":"2023-08-30","commitResults":[{"hash":"456b40bbaba25986d72c9a1b8da1e3472edc759e","isMergeCommit":false,"messageTitle":"fix parser bugs and add more parser tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":20}}},{"hash":"72887037c13c40e9ea36937d8babf3efbf5490b0","isMergeCommit":false,"messageTitle":"Add JavaDoc to all files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":411,"deletions":0}}},{"hash":"9d1209ed9437a2d29782624c1fa73b67c943520f","isMergeCommit":false,"messageTitle":"Tweak code to follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":102}}},{"hash":"e44305cf699ae0a947930131c7d9e885174cfaa3","isMergeCommit":false,"messageTitle":"Implement find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":149,"deletions":64}}},{"hash":"b54801f701265653d5cddeb236b754b8846bffd8","isMergeCommit":true,"messageTitle":"Merge branch-A-JavaDoc into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7630ab93c7394e18bbd9bcd4897a756e900e11d7","isMergeCommit":true,"messageTitle":"Merge branch-A-CodingStandards into master","messageBody":"","tags":["v0.1","Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"425cc6364b37c1a37081d6f9ce92a0cca4174f84","isMergeCommit":false,"messageTitle":"Add CheckStyle and fix style issues","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":43,"deletions":30}}}]}]},"authorFileTypeContributionMap":{"jonasongg":{"java":1269,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":6,"txt":7}},"authorContributionVariance":{"jonasongg":115881.6},"authorDisplayNameMap":{"jonasongg":"CS2103T-W15-3 JONA.. WEI"}} diff --git a/ktzy0305_ip_master/authorship.json b/ktzy0305_ip_master/authorship.json index ed6d7fab..addc36fe 100644 --- a/ktzy0305_ip_master/authorship.json +++ b/ktzy0305_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"# skye.Skye 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":"ktzy0305"},"content":"3. After that, locate the `src/main/java/skye.Skye.java` file, right-click it, and choose `Run skye.Skye.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":{"-":22,"ktzy0305":2}},{"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":"ktzy0305"},"content":" mainClass.set(\"skye.Skye\")","lastModifiedDate":"2023-09-03"},{"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":"ktzy0305"},"content":" archiveBaseName \u003d \"skye\"","lastModifiedDate":"2023-09-03"},{"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":{"-":40,"ktzy0305":2}},{"path":"src/main/java/skye/Skye.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" * Represents the main program instance of the Skye chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" * The program instance depends on the Parser, Storage, TaskList and UI classes to function.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"public class Skye {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" private Parser parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" private UI ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" * Initializes an instance of Duke by providing the file path to the save file.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" * @param filePath File path to the directory containing the save file.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" public Skye(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" ui \u003d new UI();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" taskList \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException | IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" new Skye(\"data/tasks.txt\").run();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" * A method to start running the chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" private void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" do {","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" System.out.println();","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" Command command \u003d parser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" command.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" isExit \u003d command.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" ui.printMessage(exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" ui.printMessage(\"IO Exception: \" + exception.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" } catch (NumberFormatException exception) {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" ui.printMessage(\"Error: Task number must be an integer.\\n(example: mark 1)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" ui.printMessage(\"Invalid Datetime Format: it should be dd-mm-yyyy hh:mm!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" } while (!isExit);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":70,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":1,"ktzy0305":69}},{"path":"src/main/java/skye/commands/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":" * Represents a command for adding deadlines.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"public class AddDeadlineCommand extends AddTaskCommand {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"deadline\";","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" public AddDeadlineCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":15}},{"path":"src/main/java/skye/commands/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":" * Represents a command for adding events.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"public class AddEventCommand extends AddTaskCommand {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"event\";","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" public AddEventCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":15}},{"path":"src/main/java/skye/commands/AddTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" * Represents a generic command to handle adding of Task objects and its subclasses.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"public class AddTaskCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" private final Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" public AddTaskCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" * Executes the AddTaskCommand and its subclasses AddDeadlineCommand, AddEventCommand and AddToDoCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Describes the I/O error encountered in the OS file system","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" storage.write(taskList.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" ui.showAddedTask(task, taskList.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":35}},{"path":"src/main/java/skye/commands/AddToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":" * Represents a command for adding todos.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"public class AddToDoCommand extends AddTaskCommand{","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"todo\";","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" public AddToDoCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":15}},{"path":"src/main/java/skye/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" * Represents the command to exit from the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"public class ByeCommand extends Command{","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" * Executes the ByeCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" ui.showGoodBye();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" * When called, the program will exit.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" * @return true","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":35}},{"path":"src/main/java/skye/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" * Represents the abstraction of a command to the chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" * It contains an unimplemented execute method for its subclasses to implement how the command","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" * would interact with the TaskList, UI and Storage instances.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" * An unimplemented method for executing commands for the subclasses to implement how would","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" * each unique command interact with the TaskList, Ui and Storage instances.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException Describes the error encountered when executing the command","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Describes the I/O error encountered in the OS file system","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" public abstract void execute(TaskList taskList, UI ui, Storage storage) throws DukeException, IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" * Returns whether if the command when executed can exit the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" * @return Whether the program can exit the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":38}},{"path":"src/main/java/skye/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" * Represents the command for deleting tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" * Executes the delete task command","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException Describes the error encountered when executing the command","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Describes the I/O error encountered in the OS file system","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException, IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" Task removedTask \u003d taskList.deleteTask(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" storage.write(taskList.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" ui.showRemovedTask(removedTask, taskList.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":39}},{"path":"src/main/java/skye/commands/DueCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" * Represents the command to check tasks due on a certain date.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"public class DueCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"due\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" private final LocalDate date;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" public DueCommand(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" * Executes the command to check due tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" ui.showTasksDueOn(date, taskList.showTasksDueOn(date));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":32}},{"path":"src/main/java/skye/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" * Represents the command to find tasks containing the keyword specified by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"public class FindCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" private final String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" * Execute the find tasks command and returns a list of tasks containing the keyword in","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" * the description.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" List\u003cTask\u003e tasks \u003d taskList.findTasksContaining(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" ui.showFoundTasks(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ktzy0305":35}},{"path":"src/main/java/skye/commands/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" * Represents a command to show the program usage to help the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"help\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" ui.showHelpMessage(storage.loadHelpGuide());","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":20}},{"path":"src/main/java/skye/commands/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" * Represents an invalid command that the user has entered.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" * Executes the invalid command in which this case a help message","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" * is shown by the UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" ui.showInvalidCommandMsg();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":24}},{"path":"src/main/java/skye/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" * Represents the command to list all tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" * Executes the list command by retrieving a list of tasks from the","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" * TaskList and displaying it on the UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" ui.showTasks(taskList.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":26}},{"path":"src/main/java/skye/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" * Represents the command to mark a task as complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"mark\";","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" public MarkCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" * Executes the mark task command by marking the task on the TaskList as complete and","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" * updating the save file on the specified save directory and showing the task that","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" * was marked as completed on the UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException Describes the error encountered when executing the command","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Describes the I/O error encountered in the OS file system","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException, IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" Task markedTask \u003d taskList.markTask(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" storage.write(taskList.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" ui.showMarkedTask(markedTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":41}},{"path":"src/main/java/skye/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" * Represents the command to mark a completed task as incomplete","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"unmark\";","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" public UnmarkCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" * Executes the unmark task command by marking an already completed task on the TaskList as","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" * incomplete and updating the save file on the specified save directory and showing the","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" * task that was marked as incomplete on the UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException Describes the error encountered when executing the command","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Describes the I/O error encountered in the OS file system","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException, IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" Task unmarkedTask \u003d taskList.unmarkTask(this.taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" storage.write(taskList.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" ui.showUnmarkedTask(unmarkedTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":41}},{"path":"src/main/java/skye/data/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeExceptionType;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" * Represents a container storing a list of tasks that allows","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" * task related operations such as insertion, deletion and updating","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" * of task completion status to be performed.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" /** A list to store task objects */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" private final List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" * Returns a list of tasks that is currently stored in the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" * @return a list of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" * Adds a new task to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" * @param task A task which can be either a Deadline, Event or ToDo.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" * Checks if a task number is within the valid range.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" * @param taskNumber The numerical order of the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" * @return true if 1 \u003c taskNumber \u003c number of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" * false otherwise","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" private boolean isInvalidTaskNumber(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" return (taskNumber \u003c\u003d 0) || (taskNumber \u003e tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" * Mark a task as completed by specifying the task number.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" * @param taskNumber The numerical order of the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" * @return The task that was marked as completed","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException if taskNumber \u003c 1 or taskNumber \u003e number of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" public Task markTask(int taskNumber) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" if (isInvalidTaskNumber(taskNumber)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_RANGE);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" } else if (tasks.get(taskNumber - 1).isDone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.TASK_ALREADY_MARKED);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" tasks.get(taskNumber - 1).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":" return tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ktzy0305"},"content":" * Unmark a completed task by specifying the task number.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ktzy0305"},"content":" * @param taskNumber The numerical order of the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ktzy0305"},"content":" * @return The task that was unmarked","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException if taskNumber \u003c 1 or taskNumber \u003e number of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ktzy0305"},"content":" public Task unmarkTask(int taskNumber) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ktzy0305"},"content":" if (isInvalidTaskNumber(taskNumber)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_RANGE);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ktzy0305"},"content":" } else if (!tasks.get(taskNumber - 1).isDone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.TASK_ALREADY_UNMARKED);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ktzy0305"},"content":" tasks.get(taskNumber - 1).markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ktzy0305"},"content":" return tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ktzy0305"},"content":" * Delete a task","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ktzy0305"},"content":" * @param taskNumber The numerical order of the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ktzy0305"},"content":" * @return The task that was deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException if taskNumber \u003c 1 or taskNumber \u003e number of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ktzy0305"},"content":" public Task deleteTask(int taskNumber) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ktzy0305"},"content":" if (isInvalidTaskNumber(taskNumber)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_RANGE);","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ktzy0305"},"content":" return tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ktzy0305"},"content":" * Shows a list of tasks that are due on a specified deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"ktzy0305"},"content":" * @param date The deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"ktzy0305"},"content":" * @return A list of tasks due on the specified deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ktzy0305"},"content":" public List\u003cTask\u003e showTasksDueOn(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"ktzy0305"},"content":" return tasks.stream()","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"ktzy0305"},"content":" .filter(task -\u003e task instanceof Deadline)","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"ktzy0305"},"content":" .map(task -\u003e (Deadline) task)","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"ktzy0305"},"content":" .filter(deadline -\u003e deadline.getBy().toLocalDate().equals(date))","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"ktzy0305"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ktzy0305"},"content":" * Finds a list of tasks containing a specified keyword in the task description.","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ktzy0305"},"content":" * @param keyword Keyword specified by the user","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"ktzy0305"},"content":" * @return A list of matching tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"ktzy0305"},"content":" public List\u003cTask\u003e findTasksContaining(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ktzy0305"},"content":" return tasks.stream()","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ktzy0305"},"content":" .filter(task -\u003e task.getDescription().contains(keyword))","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ktzy0305"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":136}},{"path":"src/main/java/skye/data/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":" * Represents the exception class specifically for the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" * Initializes the exception class by providing an error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" * @param errorMessage Error message to be shown to the user","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * Initializes the exception class by providing the exception type.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" * @param exceptionType The type of exception which is represented as an enum","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" public DukeException(DukeExceptionType exceptionType) {","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" super(exceptionType.getMessage());","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ktzy0305":25}},{"path":"src/main/java/skye/data/exception/DukeExceptionType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":" * Represents the various types of exceptions that appear in the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":" * It contains the error message for each type.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"public enum DukeExceptionType {","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" DEADLINE_NO_DESCRIPTION(","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" \"The description of a deadline cannot be empty.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" + \"Correct usage: deadline \u003cdescription\u003e /by \u003cdate\u003e\"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" EVENT_NO_DESCRIPTION(","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" \"The description of an event cannot be empty.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" + \"Correct usage: event \u003cdescription\u003e /from \u003cstart\u003e /to \u003cend\u003e\"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" TODO_NO_DESCRIPTION(","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" \"The description of a todo cannot be empty.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" + \"Correct usage: todo \u003cdescription\u003e\"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" DUE_NO_DATE(","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" \"Missing due date\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" + \"Correct usage: due \u003cdd-mm-yyyy\u003e\"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" FIND_NO_KEYWORD(\"No keyword specified for finding tasks.\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" INVALID_DEADLINE_FORMAT(","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" \"Invalid deadline format!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" + \"Correct usage: deadline \u003cdescription\u003e /by \u003cdd-mm-yyyy hh:mm\u003e\"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" INVALID_DEADLINE_SAVE_FORMAT(","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" \"Invalid deadline save format!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" + \"Example: D | 0 | book report | 04-09-2023 23:59\"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" INVALID_EVENT_FORMAT(","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" \"Invalid event format!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" + \"Correct usage: event \u003cdescription\u003e /from \u003cdd-mm-yyyy hh:mm\u003e /to \u003cdd-mm-yyyy hh:mm\u003e\"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" INVALID_EVENT_SAVE_FORMAT(","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" \"Invalid event save format!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" + \"E | 1 | Meeting | 01-09-2023 08:00 | 01-09-2023 11:00\"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" INVALID_EVENT_ARGUMENT(\"Invalid Argument: /from date time cannot be after /to date time\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" INVALID_TODO_SAVE_FORMAT(","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" \"Invalid event save format!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" + \"T | 0 | read book\"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" INVALID_RANGE(\"The task number you\u0027ve entered is out of the valid range.\"),","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" NO_TASK_NUMBER(\"Please enter the task number.\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" TASK_ALREADY_MARKED(\"The task number you\u0027ve entered is already marked as complete.\"),","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" TASK_ALREADY_UNMARKED(\"The task number you\u0027ve entered is already unmarked.\"),","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" UNKNOWN_COMMAND(\"I\u0027m sorry, I don\u0027t know what that means :-(\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" + \"Try typing \u0027help\u0027 to see a list of available commands.\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" UNKNOWN_TASK_TYPE(\"Unknown task type\");","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" private final String message;","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" * Initializes a type of exception that can occur in the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" * @param message Error message","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" DukeExceptionType(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" this.message \u003d message;","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" * Gets the error message","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" * @return Error message","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" return message;","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ktzy0305":74}},{"path":"src/main/java/skye/data/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":" * Represents a deadline that the user wishes to keep track of.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" * A deadline is a type of task which has an end date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" * Initialises an deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" * @param description A short description of the deadline task","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * @param by the deadline date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" setBy(by);","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" * Retrieves the date and time of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" * @return Date and time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" public LocalDateTime getBy() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" return by;","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" * Sets the date and time of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" * @param by Date and time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" public void setBy(LocalDateTime by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" * Encodes the deadline object into a formatted string to be saved into a text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" * @return Encoded string of Deadline object","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" public String toSaveDataFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" return String.format(\"D | %d | %s | %s\", isDone() ? 1 : 0, getDescription(),","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" getBy().format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\")));","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" * Produces a string representation of a Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" * @return String representation of Deadline object","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" getBy().format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HH:mm\")));","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" * Checks if another deadline is equivalent to the current event.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" * @param other The other deadline object we are checking for equivalence","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" * @return if the other deadline object is equivalent to the current object","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ktzy0305"},"content":" } else if (other instanceof Deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ktzy0305"},"content":" Deadline otherDeadline \u003d (Deadline) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ktzy0305"},"content":" return (this.description.equals(otherDeadline.description))","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ktzy0305"},"content":" \u0026\u0026 (this.by.equals(otherDeadline.by));","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ktzy0305"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ktzy0305":83}},{"path":"src/main/java/skye/data/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":" * Represents an event that the user wishes to keep track of.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" * An event is a type of task which has a start date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" * and an end date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" * Initialises an event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * @param description A short description of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" * @param from Start date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" * @param to End date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" setFrom(from);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" setTo(to);","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" * Retrieves the start date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" * @return The start date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" return from;","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" * Sets the start date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" * @param from The start date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" public void setFrom(LocalDateTime from) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" * Retrieves the end date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" * @return The end date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" return to;","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" * Sets the end date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" * @param to The end date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" public void setTo(LocalDateTime to) {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" * Encodes the event object into a formatted string to be saved into a text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" * @return Encoded string of Event object","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" public String toSaveDataFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":" return String.format(\"E | %d | %s | %s | %s\", isDone() ? 1 : 0, getDescription(),","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" getFrom().format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\")),","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" getTo().format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\")));","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ktzy0305"},"content":" * Produces a string representation of an Event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ktzy0305"},"content":" * @return String representation of Event object","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":82,"author":{"gitId":"ktzy0305"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":83,"author":{"gitId":"ktzy0305"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"ktzy0305"},"content":" getFrom().format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HH:mm\")),","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"ktzy0305"},"content":" getTo().format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HH:mm\")));","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ktzy0305"},"content":" * Checks if another event is equivalent to the current event.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ktzy0305"},"content":" * @param other The other event object we are checking for equivalence","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ktzy0305"},"content":" * @return if the other event object is equivalent to the current object","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ktzy0305"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ktzy0305"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ktzy0305"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ktzy0305"},"content":" } else if (other instanceof Event) {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ktzy0305"},"content":" Event otherEvent \u003d (Event) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ktzy0305"},"content":" return (this.description.equals(otherEvent.description))","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ktzy0305"},"content":" \u0026\u0026 (this.from.equals(otherEvent.from))","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ktzy0305"},"content":" \u0026\u0026 (this.to.equals(otherEvent.to));","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ktzy0305"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ktzy0305":107}},{"path":"src/main/java/skye/data/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":" * Represents a task that the user wishes to keep track of.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":" * A task object has a description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" * Initializes a task object","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" * @param description The description of a given task","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" setDescription(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" setDone(false);","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" * Returns the description of a given task.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" * @return description","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" return description;","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" * Set a description for the task","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" public void setDescription(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" * Returns the completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" * @return isDone","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" return isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" * Set the completion status of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" * @param done Completion status","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" public void setDone(boolean done) {","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" isDone \u003d done;","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" * If the task is completed, an \"X\" is shown. Otherwise, the icon is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" * @return statusIcon","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" return (isDone() ? \"X\" : \" \");","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" * Mark the task as complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" setDone(true);","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":75,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ktzy0305"},"content":" * Mark the task as incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ktzy0305"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"ktzy0305"},"content":" setDone(false);","lastModifiedDate":"2023-08-21"},{"lineNumber":80,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":82,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ktzy0305"},"content":" * Generates an encoded string containing metadata of the task to be saved in a text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ktzy0305"},"content":" * @return Encoded string representation of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ktzy0305"},"content":" public abstract String toSaveDataFormat();","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ktzy0305"},"content":" * Produces a string representation of a Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ktzy0305"},"content":" * @return String representation of a Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":95,"author":{"gitId":"ktzy0305"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":96,"author":{"gitId":"ktzy0305"},"content":" return String.format(\"[%s] %s\", getStatusIcon(), getDescription());","lastModifiedDate":"2023-08-21"},{"lineNumber":97,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":98,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ktzy0305":98}},{"path":"src/main/java/skye/data/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":" * Represents a ToDo task that the user wishes to keep track of.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"public class ToDo extends Task{","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" * Initialises an ToDo object","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" * @param description A short description of the ToDo task","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * Encodes the ToDo object into a formatted string to be saved into a text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" * @return Encoded string of ToDo object","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" public String toSaveDataFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" return String.format(\"T | %d | %s\", isDone() ? 1 : 0, getDescription());","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" * Produces a string representation of a ToDo object.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" * @return String representation of ToDo object","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" * Checks if another ToDo task is equivalent to the current ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" * @param other The other ToDo object we are checking for equivalence","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" * @return if the other ToDo object is equivalent to the current object","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" } else if (other instanceof ToDo) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" ToDo otherToDo \u003d (ToDo) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" return (this.description.equals(otherToDo.description));","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ktzy0305":54}},{"path":"src/main/java/skye/guide/help.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"Usage:","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":" \u003ccommand\u003e [command arguments]","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"Description:","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":" A command-line tool to record tasks efficiently.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"Available Commands:","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" todo \u003cdescription\u003e Add a new todo.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" deadline \u003cdescription\u003e /by \u003cDD-MM-YYYY HH:MM\u003e Add a new deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" event \u003cdescription\u003e /from \u003cDD-MM-YYYY HH:MM\u003e /to \u003cDD-MM-YYYY HH:MM\u003e Add a new event.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" list List all tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" due \u003cDD-MM-YYYY\u003e List all deadlines due on a specified date.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" mark \u003ctask number\u003e Mark a task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" unmark \u003ctask number\u003e Unmark a completed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" delete \u003ctask number\u003e Delete a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" bye Exit the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" help View usage guide.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":"Usage Examples:","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" $ deadline Finish project /by 31-07-2023 23:59","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" $ event Swimming /from 04-08-2023 10:00 /to 04-08-2023 12:00","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":"Additional Information:","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" - Use quotes for descriptions with spaces.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" - Dates should be in the format DD-MM-YYYY","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" - Datetime should be in the format DD-MM-YYYY HH:MM","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ktzy0305":26}},{"path":"src/main/java/skye/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.AddDeadlineCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.AddEventCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.AddToDoCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.ByeCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.DueCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.FindCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.HelpCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.InvalidCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeExceptionType;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" * Represents a service which processes the input the user types into the appropriate commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" * It contains methods which uses regex to match arguments required for each command and initializing","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" * the different types of commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" public static final Pattern COMMAND_FORMAT \u003d Pattern.compile(\"(?\u003ccommandWord\u003e\\\\S+)(?\u003carguments\u003e.*)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" public static final Pattern TASK_NUMBER_ARGS_FORMAT \u003d Pattern.compile(\"(?\u003ctaskNumber\u003e.+)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" public static final Pattern DEADLINE_ARGS_FORMAT \u003d","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" Pattern.compile(\"(?\u003cdescription\u003e.*?)\\\\s+/by\\\\s+(?\u003cdeadline\u003e.*)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" public static final Pattern EVENT_ARGS_FORMAT \u003d","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" Pattern.compile(\"(?\u003cdescription\u003e.*?)\\\\s+/from\\\\s+(?\u003cfromDate\u003e.*?)\\\\s+/to\\\\s+(?\u003ctoDate\u003e.*)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" public static final DateTimeFormatter DATE_TIME_FORMAT \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" public static final DateTimeFormatter DATE_FORMAT \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" * Processes the input entered by the user by extracting the command word","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" * and passing the arguments to the relevant command helper functions.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" * @param userInput User\u0027s input from the command line user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" * @return Command","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException Errors relating to commands","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" public Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" Matcher matcher \u003d COMMAND_FORMAT.matcher(userInput.trim());","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.UNKNOWN_COMMAND);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" String commandWord \u003d matcher.group(\"commandWord\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" String arguments \u003d matcher.group(\"arguments\");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" switch (commandWord) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" case ByeCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" case MarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" return prepareMarkCommand(arguments);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ktzy0305"},"content":" case UnmarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ktzy0305"},"content":" return prepareUnmarkCommand(arguments);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ktzy0305"},"content":" case AddDeadlineCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ktzy0305"},"content":" return prepareAddDeadlineCommand(arguments);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ktzy0305"},"content":" case AddEventCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ktzy0305"},"content":" return prepareAddEventCommand(arguments);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ktzy0305"},"content":" case AddToDoCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ktzy0305"},"content":" return prepareAddToDoCommand(arguments);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ktzy0305"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ktzy0305"},"content":" return prepareDeleteCommand(arguments);","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ktzy0305"},"content":" case FindCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ktzy0305"},"content":" return prepareFindCommand(arguments);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ktzy0305"},"content":" case DueCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ktzy0305"},"content":" return prepareDueCommand(arguments);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ktzy0305"},"content":" case HelpCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ktzy0305"},"content":" return new HelpCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ktzy0305"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ktzy0305"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ktzy0305"},"content":" * Processes arguments for commands that require the task number which are","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ktzy0305"},"content":" * delete, mark and unmark.","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ktzy0305"},"content":" * @param args Command arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ktzy0305"},"content":" * @return taskNumber","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the task number is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ktzy0305"},"content":" private int parseArgsAsTaskNumber(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"ktzy0305"},"content":" Matcher matcher \u003d TASK_NUMBER_ARGS_FORMAT.matcher(args.trim());","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"ktzy0305"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.NO_TASK_NUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"ktzy0305"},"content":" return Integer.parseInt(matcher.group(\"taskNumber\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"ktzy0305"},"content":" * Processes arguments for tasks with deadline which are the description, and the","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ktzy0305"},"content":" * deadline itself.","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ktzy0305"},"content":" * @param args Deadline arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ktzy0305"},"content":" * @return Deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the deadline description is empty or the argument format is wrong.","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ktzy0305"},"content":" public Deadline parseArgsAsDeadline(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"ktzy0305"},"content":" Matcher matcher \u003d DEADLINE_ARGS_FORMAT.matcher(args.trim());","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"ktzy0305"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_DEADLINE_FORMAT);","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"ktzy0305"},"content":" String deadlineDescription \u003d matcher.group(\"description\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"ktzy0305"},"content":" String dateString \u003d matcher.group(\"deadline\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ktzy0305"},"content":" if (deadlineDescription.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.DEADLINE_NO_DESCRIPTION);","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime localDateTime \u003d LocalDateTime.parse(dateString, DATE_TIME_FORMAT);","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"ktzy0305"},"content":" return new Deadline(deadlineDescription, localDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"ktzy0305"},"content":" * Processes arguments for events which are the description, start date / time and end date / time.","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"ktzy0305"},"content":" * @param args Event arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"ktzy0305"},"content":" * @return Event","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the event description is empty, the argument format is wrong or","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"ktzy0305"},"content":" * from date is after the to date.","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"ktzy0305"},"content":" public Event parseArgsAsEvent(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"ktzy0305"},"content":" Matcher matcher \u003d EVENT_ARGS_FORMAT.matcher(args.trim());","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"ktzy0305"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_EVENT_FORMAT);","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"ktzy0305"},"content":" String eventDescription \u003d matcher.group(\"description\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"ktzy0305"},"content":" String fromDateString \u003d matcher.group(\"fromDate\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"ktzy0305"},"content":" String toDateString \u003d matcher.group(\"toDate\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"ktzy0305"},"content":" if (eventDescription.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.EVENT_NO_DESCRIPTION);","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime fromDate \u003d LocalDateTime.parse(fromDateString, DATE_TIME_FORMAT);","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime toDate \u003d LocalDateTime.parse(toDateString, DATE_TIME_FORMAT);","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"ktzy0305"},"content":" if (fromDate.isAfter(toDate)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_EVENT_ARGUMENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"ktzy0305"},"content":" return new Event(eventDescription, fromDate, toDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"ktzy0305"},"content":" private ToDo parseArgsAsToDo(String args) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"ktzy0305"},"content":" String description \u003d args.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"ktzy0305"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.TODO_NO_DESCRIPTION);","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"ktzy0305"},"content":" return new ToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"ktzy0305"},"content":" * Helper function to create an instance of a MarkCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"ktzy0305"},"content":" * @param args MarkCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"ktzy0305"},"content":" * @return MarkCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the task number is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"ktzy0305"},"content":" private Command prepareMarkCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"ktzy0305"},"content":" int taskIndex \u003d parseArgsAsTaskNumber(args);","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"ktzy0305"},"content":" return new MarkCommand(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"ktzy0305"},"content":" * Helper function to create an instance of an UnmarkCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"ktzy0305"},"content":" * @param args UnmarkCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"ktzy0305"},"content":" * @return UnmarkCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the task number is empty","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"ktzy0305"},"content":" private Command prepareUnmarkCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"ktzy0305"},"content":" int taskIndex \u003d parseArgsAsTaskNumber(args);","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"ktzy0305"},"content":" return new UnmarkCommand(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"ktzy0305"},"content":" * Helper function to create an instance of an AddDeadlineCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"ktzy0305"},"content":" * @param args AddDeadlineCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"ktzy0305"},"content":" * @return AddDeadlineCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the deadline description is empty or when the argument format is wrong.","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"ktzy0305"},"content":" private Command prepareAddDeadlineCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"ktzy0305"},"content":" Deadline deadline \u003d parseArgsAsDeadline(args);","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"ktzy0305"},"content":" return new AddDeadlineCommand(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"ktzy0305"},"content":" * Helper function to create an instance of an AddEventCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"ktzy0305"},"content":" * @param args AddEventCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"ktzy0305"},"content":" * @return AddEventCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the event description is empty or when the argument format is wrong.","lastModifiedDate":"2023-09-03"},{"lineNumber":230,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"ktzy0305"},"content":" private Command prepareAddEventCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"ktzy0305"},"content":" Event event \u003d parseArgsAsEvent(args);","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"ktzy0305"},"content":" return new AddEventCommand(event);","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"ktzy0305"},"content":" * Helper function to create an instance of an AddToDoCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"ktzy0305"},"content":" * @param args AddToDoCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"ktzy0305"},"content":" * @return AddToDoCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"ktzy0305"},"content":" private Command prepareAddToDoCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"ktzy0305"},"content":" ToDo todo \u003d parseArgsAsToDo(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"ktzy0305"},"content":" return new AddToDoCommand(todo);","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"ktzy0305"},"content":" * Helper function to create an instance of a DeleteCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"ktzy0305"},"content":" * @param args DeleteCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"ktzy0305"},"content":" * @return DeleteCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":252,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the task number is out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":253,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":254,"author":{"gitId":"ktzy0305"},"content":" private Command prepareDeleteCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"ktzy0305"},"content":" int taskIndex \u003d parseArgsAsTaskNumber(args);","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"ktzy0305"},"content":" return new DeleteCommand(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":260,"author":{"gitId":"ktzy0305"},"content":" * Helper function to create an instance of a DueCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":261,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":262,"author":{"gitId":"ktzy0305"},"content":" * @param args DueCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":263,"author":{"gitId":"ktzy0305"},"content":" * @return DueCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":264,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":265,"author":{"gitId":"ktzy0305"},"content":" private Command prepareDueCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":266,"author":{"gitId":"ktzy0305"},"content":" if (args.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":267,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.DUE_NO_DATE);","lastModifiedDate":"2023-08-31"},{"lineNumber":268,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":269,"author":{"gitId":"ktzy0305"},"content":" LocalDate dueDate \u003d LocalDate.parse(args.trim(), DATE_FORMAT);","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"ktzy0305"},"content":" return new DueCommand(dueDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":272,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":273,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":274,"author":{"gitId":"ktzy0305"},"content":" * Helper function for creating an instance of a FindCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":275,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":276,"author":{"gitId":"ktzy0305"},"content":" * @param args FindCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":277,"author":{"gitId":"ktzy0305"},"content":" * @return FindCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":278,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When there is no keyword specified.","lastModifiedDate":"2023-08-31"},{"lineNumber":279,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":280,"author":{"gitId":"ktzy0305"},"content":" private Command prepareFindCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":281,"author":{"gitId":"ktzy0305"},"content":" String keyword \u003d args.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":282,"author":{"gitId":"ktzy0305"},"content":" if (keyword.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":283,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.FIND_NO_KEYWORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":284,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":285,"author":{"gitId":"ktzy0305"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":286,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":287,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":287}},{"path":"src/main/java/skye/parser/TaskDecoder.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeExceptionType;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" * Represents a utility class that decodes a task from an encoded string","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"public class TaskDecoder {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * Decodes the encoded string representation of a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" * @param line The encoded string representing a task in its save format","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" * @return Task","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When an invalid save format is encountered","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" public Task decode(String line) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" String[] data \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" String taskType \u003d data[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" if (data.length \u003d\u003d 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime localDateTime \u003d","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(data[3].trim(), Parser.DATE_TIME_FORMAT);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" Task task \u003d new Deadline(data[2].trim(), localDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" if (Integer.parseInt(data[1].trim()) \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_DEADLINE_SAVE_FORMAT);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" if (data.length \u003d\u003d 5) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" Task task \u003d new Event(data[2].trim(),","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(data[3].trim(), Parser.DATE_TIME_FORMAT),","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(data[4].trim(), Parser.DATE_TIME_FORMAT));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" if (Integer.parseInt(data[1].trim()) \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_EVENT_SAVE_FORMAT);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" if (data.length \u003d\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" Task task \u003d new ToDo(data[2].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" if (Integer.parseInt(data[1].trim()) \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_TODO_SAVE_FORMAT);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.UNKNOWN_TASK_TYPE);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ktzy0305":66}},{"path":"src/main/java/skye/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.parser.TaskDecoder;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" * Represents a storage utility object which provides operations to load task information","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * from the user\u0027s file system and write task information to the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" private static final String HELP_GUIDE_DIRECTORY \u003d \"src/main/java/skye/guide/help.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" private final String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" private final TaskDecoder taskDecoder;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" * Initializes the storage object by providing a file path","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" * @param filePath Path to the save file","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" this.taskDecoder \u003d new TaskDecoder();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" * Load all task information into the save file by reading from a text file specified","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" * by the file path and decoding each line into a Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" * @return Tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Describes the I/O error encountered in the OS file system","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" * @throws DateTimeParseException Describes the error with the date format","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException Describes the error encountered when executing the command","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" public List\u003cTask\u003e load() throws IOException, DateTimeParseException, DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" Path path \u003d Paths.get(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" Files.createDirectories(path.getParent());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" Files.createFile(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" List\u003cString\u003e encodedTasks \u003d Files.readAllLines(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" for (String encodedTask : encodedTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" tasks.add(taskDecoder.decode(encodedTask));","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" * Loads the help guide.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" * @return Help Guide as a list of strings","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Signifies that loading the file has failed","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" public List\u003cString\u003e loadHelpGuide() throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" return Files.readAllLines(Paths.get(HELP_GUIDE_DIRECTORY));","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" * Writes a list of decoded Task objects to the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":" * @param tasks List of Task objects","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Signifies that writing to file has failed","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ktzy0305"},"content":" public void write(List\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ktzy0305"},"content":" FileWriter fw \u003d new FileWriter(Paths.get(filePath).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ktzy0305"},"content":" for (Task t: tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ktzy0305"},"content":" fw.write(t.toSaveDataFormat() + System.lineSeparator());","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ktzy0305"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":84}},{"path":"src/main/java/skye/ui/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" * Represents the command line user interface which consists of a scanner to read in","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" * user input and methods to display different messages to be shown to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"public class UI {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" private static final int LINE_LENGTH \u003d 100;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" public UI() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" * Prints a message to be shown to the user with horizontal lines","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" * before and after the message.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" * @param message Message shown to the user","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" public void printMessage(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" * Reads the command from the user\u0027s input.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" * @return A command from the user\u0027s input","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" * Renders a horizontal line on the terminal.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" public void renderLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" System.out.println(\"_\".repeat(LINE_LENGTH));","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" * Display the welcome message used at the start of the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" printMessage(\"Hello! I\u0027m Skye, your personal task assistant.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" + \"What can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" * Display the exit message shown when exiting the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" public void showGoodBye() {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" scanner.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" printMessage(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" * Display the error message when writing to the save file has failed.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" printMessage(\"Sorry! I was unable to load the save file :(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" * Display the current list of tasks that the user has recorded.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ktzy0305"},"content":" * @param tasks A list of tasks from the TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ktzy0305"},"content":" public void showTasks(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ktzy0305"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ktzy0305"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ktzy0305"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ktzy0305"},"content":" System.out.printf(\"%d.%s%n\", i + 1, tasks.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ktzy0305"},"content":" System.out.println(\"Nice!! You\u0027re all caught up and have no pending tasks to worry about.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ktzy0305"},"content":" * Display the task that the user has recently added.","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ktzy0305"},"content":" * @param task Task that was added to the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ktzy0305"},"content":" * @param tasks Task list","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ktzy0305"},"content":" public void showAddedTask(Task task, List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ktzy0305"},"content":" printMessage(","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ktzy0305"},"content":" String.format(","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ktzy0305"},"content":" \"Got it. I\u0027ve added this task:\\n %s\\nNow you have %d task(s) in the list.\",","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ktzy0305"},"content":" task.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ktzy0305"},"content":" tasks.size()","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ktzy0305"},"content":" )","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ktzy0305"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ktzy0305"},"content":" * Display the task that the user has recently deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ktzy0305"},"content":" * @param task Task that was deleted from the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ktzy0305"},"content":" * @param tasks Task list","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ktzy0305"},"content":" public void showRemovedTask(Task task, List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"ktzy0305"},"content":" printMessage(","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"ktzy0305"},"content":" String.format(","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"ktzy0305"},"content":" \"Noted. I\u0027ve removed this task:\\n %s\\nNow you have %d tasks in the list\",","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"ktzy0305"},"content":" task.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"ktzy0305"},"content":" tasks.size()","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"ktzy0305"},"content":" )","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"ktzy0305"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ktzy0305"},"content":" * Display the task that was recently marked as completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ktzy0305"},"content":" * @param task Task marked as completed","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ktzy0305"},"content":" public void showMarkedTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"ktzy0305"},"content":" printMessage(String.format(\"Nice! I\u0027ve marked this task as done:\\n %s\", task));","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ktzy0305"},"content":" * Displays the task that was recently unmarked as incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ktzy0305"},"content":" * @param task Task unmarked as incomplete","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ktzy0305"},"content":" public void showUnmarkedTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"ktzy0305"},"content":" printMessage(String.format(\"OK, I\u0027ve marked this task as not done yet:\\n %s\", task));","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"ktzy0305"},"content":" * Displays the list of tasks due on a specified date","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"ktzy0305"},"content":" * @param date Due date","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"ktzy0305"},"content":" * @param tasks Task list","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"ktzy0305"},"content":" public void showTasksDueOn(LocalDate date, List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"ktzy0305"},"content":" System.out.println(\"Here are the tasks due on: \" + date.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"ktzy0305"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"ktzy0305"},"content":" tasks.forEach(System.out::println);","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"ktzy0305"},"content":" System.out.println(\"Great!! You\u0027ve nothing due!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"ktzy0305"},"content":" * Displays a help guide for the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"ktzy0305"},"content":" * @param lines Lines from the help guide","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"ktzy0305"},"content":" public void showHelpMessage(List\u003cString\u003e lines) {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"ktzy0305"},"content":" for (String line : lines) {","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"ktzy0305"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"ktzy0305"},"content":" * Displays a message when an unrecognized command is typed and","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"ktzy0305"},"content":" * refers the user to the help command","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"ktzy0305"},"content":" public void showInvalidCommandMsg() {","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"ktzy0305"},"content":" printMessage(\"I\u0027m sorry, I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"ktzy0305"},"content":" * Display a list of matching tasks on the command line interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"ktzy0305"},"content":" * @param tasks A list of matching tasks found","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"ktzy0305"},"content":" public void showFoundTasks(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"ktzy0305"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"ktzy0305"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"ktzy0305"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"ktzy0305"},"content":" System.out.printf(\"%d.%s%n\", i + 1, tasks.get(i));","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"ktzy0305"},"content":" System.out.println(\"No matching tasks found :(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":195}},{"path":"src/test/java/skye/data/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeExceptionType;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" @BeforeEach","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" public void init() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" taskList.addTask(new ToDo(\"Write Report\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" taskList.addTask(new ToDo(\"Run 3km\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" public void markTask_numberOutOfRange_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e taskList.markTask(3));","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" assertEquals(DukeExceptionType.INVALID_RANGE.getMessage(), exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" public void markTask_numberWithinRange_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" Task task \u003d taskList.markTask(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" public void markTask_taskAlreadyMarked_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" taskList.markTask(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" taskList.markTask(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" assertEquals(DukeExceptionType.TASK_ALREADY_MARKED.getMessage(), exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" public void unmarkTask_numberOutOfRange_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e taskList.unmarkTask(0));","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" assertEquals(DukeExceptionType.INVALID_RANGE.getMessage(), exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" public void unmarkTask_numberWithinRange_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" taskList.markTask(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" Task task \u003d taskList.unmarkTask(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" public void unmarkTask_taskAlreadyUnmarked_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" taskList.markTask(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" taskList.unmarkTask(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" taskList.unmarkTask(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" assertEquals(DukeExceptionType.TASK_ALREADY_UNMARKED.getMessage(), exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":72}},{"path":"src/test/java/skye/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeExceptionType;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" private Parser parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" @BeforeEach","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" public void init() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" public void parseArgsAsDeadline_validFormat_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" String args \u003d \"Lab Report /by 05-09-2023 23:59\";","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" Deadline expected \u003d","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" new Deadline(\"Lab Report\",","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(\"05-09-2023 23:59\", Parser.DATE_TIME_FORMAT));","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" assertEquals(expected.toString(), parser.parseArgsAsDeadline(args).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" public void parseArgsAsDeadline_invalidDateTimeFormat_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" String args \u003d \"Lab Report /by 5-9-2023 23:59\";","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" assertThrows(DateTimeParseException.class, () -\u003e parser.parseArgsAsDeadline(args));","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" public void parseArgsAsEvent_validFormat_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" String args \u003d \"Presidential Elections 2023 /from 01-09-2023 08:00 /to 01-09-2023 20:00\";","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" Event expected \u003d","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" new Event(\"Presidential Elections 2023\",","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(\"01-09-2023 08:00\", Parser.DATE_TIME_FORMAT),","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(\"01-09-2023 20:00\", Parser.DATE_TIME_FORMAT));","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" assertEquals(expected, parser.parseArgsAsEvent(args));","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" public void parseArgsAsEvent_invalidEventFormat_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" String args \u003d \"Career Fair /to 31-08-2023 18:00 /from 29-08-2023: 10:00 \";","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e parser.parseArgsAsEvent(args));","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" assertEquals(DukeExceptionType.INVALID_EVENT_FORMAT.getMessage(), exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":63}},{"path":"src/test/java/skye/parser/TaskDecoderTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeExceptionType;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"public class TaskDecoderTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" private TaskDecoder taskDecoder;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" @BeforeEach","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" public void init() {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" taskDecoder \u003d new TaskDecoder();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" public void decode_toDo_success() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" String encodedLine \u003d \"T | 0 | Hang Laundry\";","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" Task expected \u003d new ToDo(\"Hang Laundry\");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" Task actual \u003d taskDecoder.decode(encodedLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" public void decode_deadline_success() {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" String encodedLine \u003d \"D | 0 | Budget Proposal | 05-09-2023 23:59\";","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" Task expected \u003d new Deadline(\"Budget Proposal\",","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(\"05-09-2023 23:59\", Parser.DATE_TIME_FORMAT));","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" Task actual \u003d taskDecoder.decode(encodedLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" public void decode_event_success() {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" String encodedLine \u003d \"E | 0 | Marathon | 12-09-2023 04:00 | 12-09-2023 12:00\";","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" Task expected \u003d new Event(\"Marathon\",","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(\"12-09-2023 04:00\", Parser.DATE_TIME_FORMAT),","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(\"12-09-2023 12:00\", Parser.DATE_TIME_FORMAT));","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" Task actual \u003d taskDecoder.decode(encodedLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" public void decode_unknownTaskType_throwsException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" String encodedLine \u003d \"deadline false Budget Proposal 05-09-2023 23:59\";","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e taskDecoder.decode(encodedLine));","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" assertEquals(DukeExceptionType.UNKNOWN_TASK_TYPE.getMessage(), exception.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ktzy0305":71}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"todo Read CS2103 Week 2 topics","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"deadline Week 2 Quiz /by Friday, 25 Aug","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"event Singapore GP /from Friday, 15 Sep /to Sunday, 17 Sep","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"unmark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"deadline Claims Submission","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"deadline Claims Submission /by 31 Aug","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"todo Watch ST2334 Pre-Lecture Videos","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"delete 3","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ktzy0305":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":"ktzy0305"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\skye\\*.java","lastModifiedDate":"2023-09-03"},{"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":"ktzy0305"},"content":"REM run the program, feed skye.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"java -classpath ..\\bin skye.Skye \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":{"-":18,"ktzy0305":3}},{"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":"ktzy0305"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/duke/*.java","lastModifiedDate":"2023-08-30"},{"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":"ktzy0305"},"content":"# run the program, feed duke.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"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":{"-":36,"ktzy0305":2}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"# Skye 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":"ktzy0305"},"content":"3. After that, locate the `src/main/java/skye.Skye.java` file, right-click it, and choose `Run skye.Skye.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":{"-":22,"ktzy0305":2}},{"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":"ktzy0305"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-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":"-"},"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":"ktzy0305"},"content":" mainClass.set(\"skye.Skye\")","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":"ktzy0305"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" archiveBaseName \u003d \"skye\"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":42,"ktzy0305":5}},{"path":"src/main/java/skye/Skye.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import skye.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" * Represents the main program instance of the Skye chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" * The program instance depends on the Parser, Storage, TaskList and UI classes to function.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"public class Skye {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" private Parser parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" private UI ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" * Initializes an instance of Duke by providing the file path to the save file.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" * @param filePath File path to the directory containing the save file.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" public Skye(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" ui \u003d new UI();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" taskList \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException | IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" new Skye(\"data/tasks.txt\").run();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" * A method to start running the chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" private void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" do {","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" System.out.println();","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" Command command \u003d parser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" command.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" isExit \u003d command.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" ui.printMessage(exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" ui.printMessage(\"IO Exception: \" + exception.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" } catch (NumberFormatException exception) {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" ui.printMessage(\"Error: Task number must be an integer.\\n(example: mark 1)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" ui.printMessage(\"Invalid Datetime Format: it should be dd-mm-yyyy hh:mm!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" } while (!isExit);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":70,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":1,"ktzy0305":69}},{"path":"src/main/java/skye/commands/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":" * Represents a command for adding deadlines.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"public class AddDeadlineCommand extends AddTaskCommand {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"deadline\";","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" public AddDeadlineCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":15}},{"path":"src/main/java/skye/commands/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":" * Represents a command for adding events.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"public class AddEventCommand extends AddTaskCommand {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"event\";","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" public AddEventCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":15}},{"path":"src/main/java/skye/commands/AddTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" * Represents a generic command to handle adding of Task objects and its subclasses.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"public class AddTaskCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" private final Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" public AddTaskCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" * Executes the AddTaskCommand and its subclasses AddDeadlineCommand, AddEventCommand and AddToDoCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Describes the I/O error encountered in the OS file system","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" storage.write(taskList.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" ui.showAddedTask(task, taskList.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":35}},{"path":"src/main/java/skye/commands/AddToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":" * Represents a command for adding todos.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"public class AddToDoCommand extends AddTaskCommand {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"todo\";","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" public AddToDoCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":15}},{"path":"src/main/java/skye/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" * Represents the command to exit from the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" * Executes the ByeCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" ui.showGoodBye();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" * When called, the program will exit.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" * @return true","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":35}},{"path":"src/main/java/skye/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" * Represents the abstraction of a command to the chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" * It contains an unimplemented execute method for its subclasses to implement how the command","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" * would interact with the TaskList, UI and Storage instances.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" * An unimplemented method for executing commands for the subclasses to implement how would","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" * each unique command interact with the TaskList, Ui and Storage instances.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException Describes the error encountered when executing the command","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Describes the I/O error encountered in the OS file system","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" public abstract void execute(TaskList taskList, UI ui, Storage storage) throws DukeException, IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" * Returns whether if the command when executed can exit the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" * @return Whether the program can exit the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":38}},{"path":"src/main/java/skye/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" * Represents the command for deleting tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" * Instantiates the delete command for deleting tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" * @param taskNumber Index number on the task list","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" * Executes the delete task command","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException Describes the error encountered when executing the command","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Describes the I/O error encountered in the OS file system","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException, IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" Task removedTask \u003d taskList.deleteTask(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" storage.write(taskList.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" ui.showRemovedTask(removedTask, taskList.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":44}},{"path":"src/main/java/skye/commands/DueCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" * Represents the command to check tasks due on a certain date.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"public class DueCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"due\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" private final LocalDate date;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" public DueCommand(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" * Executes the command to check due tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" ui.showTasksDueOn(date, taskList.showTasksDueOn(date));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":32}},{"path":"src/main/java/skye/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.util.List;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" * Represents the command to find tasks containing the keyword specified by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" private final String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" * Execute the find tasks command and returns a list of tasks containing the keyword in","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" * the description.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" List\u003cTask\u003e tasks \u003d taskList.findTasksContaining(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" ui.showFoundTasks(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ktzy0305":35}},{"path":"src/main/java/skye/commands/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" * Represents a command to show the program usage to help the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"help\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" ui.showHelpMessage(storage.loadHelpGuide());","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":20}},{"path":"src/main/java/skye/commands/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" * Represents an invalid command that the user has entered.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" * Executes the invalid command in which this case a help message","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" * is shown by the UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" ui.showInvalidCommandMsg();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":24}},{"path":"src/main/java/skye/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" * Represents the command to list all tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" * Executes the list command by retrieving a list of tasks from the","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" * TaskList and displaying it on the UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" ui.showTasks(taskList.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":26}},{"path":"src/main/java/skye/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" * Represents the command to mark a task as complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"mark\";","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" * Instantiates the mark command which is used to mark a task as complete","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" * @param taskNumber Index number on the task list","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" public MarkCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" * Executes the mark task command by marking the task on the TaskList as complete and","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" * updating the save file on the specified save directory and showing the task that","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" * was marked as completed on the UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException Describes the error encountered when executing the command","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Describes the I/O error encountered in the OS file system","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException, IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" Task markedTask \u003d taskList.markTask(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" storage.write(taskList.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" ui.showMarkedTask(markedTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":46}},{"path":"src/main/java/skye/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import skye.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import skye.ui.UI;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" * Represents the command to mark a completed task as incomplete","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" public static final String COMMAND_WORD \u003d \"unmark\";","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" * Instantiates the unmark command to mark a completed task as incomplete.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" * @param taskNumber Index number on the task list","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" public UnmarkCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" * Executes the unmark task command by marking an already completed task on the TaskList as","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" * incomplete and updating the save file on the specified save directory and showing the","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" * task that was marked as incomplete on the UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" * @param taskList TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" * @param ui UI","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" * @param storage Storage","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException Describes the error encountered when executing the command","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Describes the I/O error encountered in the OS file system","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException, IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" Task unmarkedTask \u003d taskList.unmarkTask(this.taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" storage.write(taskList.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" ui.showUnmarkedTask(unmarkedTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":46}},{"path":"src/main/java/skye/data/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeExceptionType;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" * Represents a container storing a list of tasks that allows","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" * task related operations such as insertion, deletion and updating","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" * of task completion status to be performed.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" /** A list to store task objects */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" private final List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" * Returns a list of tasks that is currently stored in the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" * @return a list of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" * Adds a new task to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" * @param task A task which can be either a Deadline, Event or ToDo.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" * Checks if a task number is within the valid range.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" * @param taskNumber The numerical order of the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" * @return true if 1 \u003c taskNumber \u003c number of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" * false otherwise","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" private boolean isInvalidTaskNumber(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" return (taskNumber \u003c\u003d 0) || (taskNumber \u003e tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" * Mark a task as completed by specifying the task number.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" * @param taskNumber The numerical order of the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" * @return The task that was marked as completed","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException if taskNumber \u003c 1 or taskNumber \u003e number of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" public Task markTask(int taskNumber) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" if (isInvalidTaskNumber(taskNumber)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_RANGE);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" } else if (tasks.get(taskNumber - 1).isDone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.TASK_ALREADY_MARKED);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" tasks.get(taskNumber - 1).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":" return tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ktzy0305"},"content":" * Unmark a completed task by specifying the task number.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ktzy0305"},"content":" * @param taskNumber The numerical order of the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ktzy0305"},"content":" * @return The task that was unmarked","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException if taskNumber \u003c 1 or taskNumber \u003e number of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ktzy0305"},"content":" public Task unmarkTask(int taskNumber) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ktzy0305"},"content":" if (isInvalidTaskNumber(taskNumber)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_RANGE);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ktzy0305"},"content":" } else if (!tasks.get(taskNumber - 1).isDone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.TASK_ALREADY_UNMARKED);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ktzy0305"},"content":" tasks.get(taskNumber - 1).markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ktzy0305"},"content":" return tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ktzy0305"},"content":" * Delete a task","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ktzy0305"},"content":" * @param taskNumber The numerical order of the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ktzy0305"},"content":" * @return The task that was deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException if taskNumber \u003c 1 or taskNumber \u003e number of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ktzy0305"},"content":" public Task deleteTask(int taskNumber) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ktzy0305"},"content":" if (isInvalidTaskNumber(taskNumber)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_RANGE);","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ktzy0305"},"content":" return tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ktzy0305"},"content":" * Shows a list of tasks that are due on a specified deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"ktzy0305"},"content":" * @param date The deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"ktzy0305"},"content":" * @return A list of tasks due on the specified deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ktzy0305"},"content":" public List\u003cTask\u003e showTasksDueOn(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"ktzy0305"},"content":" return tasks.stream()","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"ktzy0305"},"content":" .filter(task -\u003e task instanceof Deadline)","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"ktzy0305"},"content":" .map(task -\u003e (Deadline) task)","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"ktzy0305"},"content":" .filter(deadline -\u003e deadline.getBy().toLocalDate().equals(date))","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"ktzy0305"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ktzy0305"},"content":" * Finds a list of tasks containing a specified keyword in the task description.","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ktzy0305"},"content":" * @param keyword Keyword specified by the user","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"ktzy0305"},"content":" * @return A list of matching tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"ktzy0305"},"content":" public List\u003cTask\u003e findTasksContaining(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ktzy0305"},"content":" return tasks.stream()","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ktzy0305"},"content":" .filter(task -\u003e task.getDescription().contains(keyword))","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ktzy0305"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":136}},{"path":"src/main/java/skye/data/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":" * Represents the exception class specifically for the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" * Initializes the exception class by providing an error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" * @param errorMessage Error message to be shown to the user","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * Initializes the exception class by providing the exception type.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" * @param exceptionType The type of exception which is represented as an enum","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" public DukeException(DukeExceptionType exceptionType) {","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" super(exceptionType.getMessage());","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ktzy0305":25}},{"path":"src/main/java/skye/data/exception/DukeExceptionType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":" * Represents the various types of exceptions that appear in the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":" * It contains the error message for each type.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"public enum DukeExceptionType {","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" DEADLINE_NO_DESCRIPTION(","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" \"The description of a deadline cannot be empty.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" + \"Correct usage: deadline \u003cdescription\u003e /by \u003cdate\u003e\"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" EVENT_NO_DESCRIPTION(","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" \"The description of an event cannot be empty.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" + \"Correct usage: event \u003cdescription\u003e /from \u003cstart\u003e /to \u003cend\u003e\"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" TODO_NO_DESCRIPTION(","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" \"The description of a todo cannot be empty.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" + \"Correct usage: todo \u003cdescription\u003e\"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" DUE_NO_DATE(","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" \"Missing due date\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" + \"Correct usage: due \u003cdd-mm-yyyy\u003e\"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" FIND_NO_KEYWORD(\"No keyword specified for finding tasks.\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" INVALID_DEADLINE_FORMAT(","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" \"Invalid deadline format!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" + \"Correct usage: deadline \u003cdescription\u003e /by \u003cdd-mm-yyyy hh:mm\u003e\"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" INVALID_DEADLINE_SAVE_FORMAT(","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" \"Invalid deadline save format!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" + \"Example: D | 0 | book report | 04-09-2023 23:59\"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" INVALID_EVENT_FORMAT(","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" \"Invalid event format!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" + \"Correct usage: event \u003cdescription\u003e /from \u003cdd-mm-yyyy hh:mm\u003e /to \u003cdd-mm-yyyy hh:mm\u003e\"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" INVALID_EVENT_SAVE_FORMAT(","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" \"Invalid event save format!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" + \"E | 1 | Meeting | 01-09-2023 08:00 | 01-09-2023 11:00\"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" INVALID_EVENT_ARGUMENT(\"Invalid Argument: /from date time cannot be after /to date time\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" INVALID_TODO_SAVE_FORMAT(","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" \"Invalid event save format!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" + \"T | 0 | read book\"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" ),","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" INVALID_RANGE(\"The task number you\u0027ve entered is out of the valid range.\"),","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" NO_TASK_NUMBER(\"Please enter the task number.\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" TASK_ALREADY_MARKED(\"The task number you\u0027ve entered is already marked as complete.\"),","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" TASK_ALREADY_UNMARKED(\"The task number you\u0027ve entered is already unmarked.\"),","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" UNKNOWN_COMMAND(\"I\u0027m sorry, I don\u0027t know what that means :-(\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" + \"Try typing \u0027help\u0027 to see a list of available commands.\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" UNKNOWN_TASK_TYPE(\"Unknown task type\");","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" private final String message;","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" * Initializes a type of exception that can occur in the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" * @param message Error message","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" DukeExceptionType(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" this.message \u003d message;","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" * Gets the error message","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" * @return Error message","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" return message;","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ktzy0305":74}},{"path":"src/main/java/skye/data/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":" * Represents a deadline that the user wishes to keep track of.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" * A deadline is a type of task which has an end date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" * Initialises an deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" * @param description A short description of the deadline task","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * @param by the deadline date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" setBy(by);","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" * Retrieves the date and time of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" * @return Date and time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" public LocalDateTime getBy() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" return by;","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" * Sets the date and time of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" * @param by Date and time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" public void setBy(LocalDateTime by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" * Encodes the deadline object into a formatted string to be saved into a text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" * @return Encoded string of Deadline object","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" public String toSaveDataFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" return String.format(\"D | %d | %s | %s\", isDone() ? 1 : 0, getDescription(),","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" getBy().format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\")));","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" * Produces a string representation of a Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" * @return String representation of Deadline object","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" getBy().format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HH:mm\")));","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" * Checks if another deadline is equivalent to the current event.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" * @param other The other deadline object we are checking for equivalence","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" * @return if the other deadline object is equivalent to the current object","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ktzy0305"},"content":" } else if (other instanceof Deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ktzy0305"},"content":" Deadline otherDeadline \u003d (Deadline) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ktzy0305"},"content":" return (this.description.equals(otherDeadline.description))","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ktzy0305"},"content":" \u0026\u0026 (this.by.equals(otherDeadline.by));","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ktzy0305"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ktzy0305":83}},{"path":"src/main/java/skye/data/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":" * Represents an event that the user wishes to keep track of.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" * An event is a type of task which has a start date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" * and an end date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" * Initialises an event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * @param description A short description of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" * @param from Start date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" * @param to End date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" setFrom(from);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" setTo(to);","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" * Retrieves the start date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" * @return The start date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" return from;","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" * Sets the start date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" * @param from The start date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" public void setFrom(LocalDateTime from) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" * Retrieves the end date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" * @return The end date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" return to;","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" * Sets the end date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" * @param to The end date and time","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" public void setTo(LocalDateTime to) {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" * Encodes the event object into a formatted string to be saved into a text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" * @return Encoded string of Event object","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" public String toSaveDataFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":" return String.format(\"E | %d | %s | %s | %s\", isDone() ? 1 : 0, getDescription(),","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" getFrom().format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\")),","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" getTo().format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\")));","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ktzy0305"},"content":" * Produces a string representation of an Event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ktzy0305"},"content":" * @return String representation of Event object","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":82,"author":{"gitId":"ktzy0305"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":83,"author":{"gitId":"ktzy0305"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"ktzy0305"},"content":" getFrom().format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HH:mm\")),","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"ktzy0305"},"content":" getTo().format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HH:mm\")));","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ktzy0305"},"content":" * Checks if another event is equivalent to the current event.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ktzy0305"},"content":" * @param other The other event object we are checking for equivalence","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ktzy0305"},"content":" * @return if the other event object is equivalent to the current object","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ktzy0305"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ktzy0305"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ktzy0305"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ktzy0305"},"content":" } else if (other instanceof Event) {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ktzy0305"},"content":" Event otherEvent \u003d (Event) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ktzy0305"},"content":" return (this.description.equals(otherEvent.description))","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ktzy0305"},"content":" \u0026\u0026 (this.from.equals(otherEvent.from))","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ktzy0305"},"content":" \u0026\u0026 (this.to.equals(otherEvent.to));","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ktzy0305"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ktzy0305":107}},{"path":"src/main/java/skye/data/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":" * Represents a task that the user wishes to keep track of.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":" * A task object has a description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" * Initializes a task object","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" * @param description The description of a given task","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" setDescription(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" setDone(false);","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" * Returns the description of a given task.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" * @return description","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" return description;","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" * Set a description for the task","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" public void setDescription(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" * Returns the completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" * @return isDone","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" return isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" * Set the completion status of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" * @param done Completion status","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" public void setDone(boolean done) {","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" isDone \u003d done;","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" * If the task is completed, an \"X\" is shown. Otherwise, the icon is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" * @return statusIcon","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" return (isDone() ? \"X\" : \" \");","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" * Mark the task as complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" setDone(true);","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":75,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ktzy0305"},"content":" * Mark the task as incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ktzy0305"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"ktzy0305"},"content":" setDone(false);","lastModifiedDate":"2023-08-21"},{"lineNumber":80,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":82,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ktzy0305"},"content":" * Generates an encoded string containing metadata of the task to be saved in a text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ktzy0305"},"content":" * @return Encoded string representation of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ktzy0305"},"content":" public abstract String toSaveDataFormat();","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ktzy0305"},"content":" * Produces a string representation of a Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ktzy0305"},"content":" * @return String representation of a Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":95,"author":{"gitId":"ktzy0305"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":96,"author":{"gitId":"ktzy0305"},"content":" return String.format(\"[%s] %s\", getStatusIcon(), getDescription());","lastModifiedDate":"2023-08-21"},{"lineNumber":97,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":98,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ktzy0305":98}},{"path":"src/main/java/skye/data/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":" * Represents a ToDo task that the user wishes to keep track of.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" * Initialises an ToDo object","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" * @param description A short description of the ToDo task","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * Encodes the ToDo object into a formatted string to be saved into a text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" * @return Encoded string of ToDo object","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" public String toSaveDataFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" return String.format(\"T | %d | %s\", isDone() ? 1 : 0, getDescription());","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" * Produces a string representation of a ToDo object.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" * @return String representation of ToDo object","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" * Checks if another ToDo task is equivalent to the current ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" * @param other The other ToDo object we are checking for equivalence","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" * @return if the other ToDo object is equivalent to the current object","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" } else if (other instanceof ToDo) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" ToDo otherToDo \u003d (ToDo) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" return (this.description.equals(otherToDo.description));","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ktzy0305":54}},{"path":"src/main/java/skye/guide/help.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"Usage:","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":" \u003ccommand\u003e [command arguments]","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"Description:","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":" A command-line tool to record tasks efficiently.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"Available Commands:","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":" todo \u003cdescription\u003e Add a new todo.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":" deadline \u003cdescription\u003e /by \u003cDD-MM-YYYY HH:MM\u003e Add a new deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" event \u003cdescription\u003e /from \u003cDD-MM-YYYY HH:MM\u003e /to \u003cDD-MM-YYYY HH:MM\u003e Add a new event.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" list List all tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" due \u003cDD-MM-YYYY\u003e List all deadlines due on a specified date.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" mark \u003ctask number\u003e Mark a task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" unmark \u003ctask number\u003e Unmark a completed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" delete \u003ctask number\u003e Delete a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":" bye Exit the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" help View usage guide.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":"Usage Examples:","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" $ deadline Finish project /by 31-07-2023 23:59","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" $ event Swimming /from 04-08-2023 10:00 /to 04-08-2023 12:00","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":"Additional Information:","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" - Use quotes for descriptions with spaces.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" - Dates should be in the format DD-MM-YYYY","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" - Datetime should be in the format DD-MM-YYYY HH:MM","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ktzy0305":26}},{"path":"src/main/java/skye/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.AddDeadlineCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.AddEventCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.AddToDoCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.ByeCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.DueCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.FindCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.HelpCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.InvalidCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":"import skye.commands.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeExceptionType;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" * Represents a service which processes the input the user types into the appropriate commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" * It contains methods which uses regex to match arguments required for each command and initializing","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" * the different types of commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" public static final Pattern COMMAND_FORMAT \u003d Pattern.compile(\"(?\u003ccommandWord\u003e\\\\S+)(?\u003carguments\u003e.*)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" public static final Pattern TASK_NUMBER_ARGS_FORMAT \u003d Pattern.compile(\"(?\u003ctaskNumber\u003e.+)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" public static final Pattern DEADLINE_ARGS_FORMAT \u003d","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" Pattern.compile(\"(?\u003cdescription\u003e.*?)\\\\s+/by\\\\s+(?\u003cdeadline\u003e.*)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" public static final Pattern EVENT_ARGS_FORMAT \u003d","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" Pattern.compile(\"(?\u003cdescription\u003e.*?)\\\\s+/from\\\\s+(?\u003cfromDate\u003e.*?)\\\\s+/to\\\\s+(?\u003ctoDate\u003e.*)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" public static final DateTimeFormatter DATE_TIME_FORMAT \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" public static final DateTimeFormatter DATE_FORMAT \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" * Processes the input entered by the user by extracting the command word","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" * and passing the arguments to the relevant command helper functions.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" * @param userInput User\u0027s input from the command line user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" * @return Command","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException Errors relating to commands","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" public Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" Matcher matcher \u003d COMMAND_FORMAT.matcher(userInput.trim());","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.UNKNOWN_COMMAND);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" String commandWord \u003d matcher.group(\"commandWord\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" String arguments \u003d matcher.group(\"arguments\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" switch (commandWord) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" case ByeCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":" case MarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" return prepareMarkCommand(arguments);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":" case UnmarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ktzy0305"},"content":" return prepareUnmarkCommand(arguments);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ktzy0305"},"content":" case AddDeadlineCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ktzy0305"},"content":" return prepareAddDeadlineCommand(arguments);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ktzy0305"},"content":" case AddEventCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ktzy0305"},"content":" return prepareAddEventCommand(arguments);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ktzy0305"},"content":" case AddToDoCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ktzy0305"},"content":" return prepareAddToDoCommand(arguments);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ktzy0305"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ktzy0305"},"content":" return prepareDeleteCommand(arguments);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ktzy0305"},"content":" case FindCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ktzy0305"},"content":" return prepareFindCommand(arguments);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ktzy0305"},"content":" case DueCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ktzy0305"},"content":" return prepareDueCommand(arguments);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ktzy0305"},"content":" case HelpCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ktzy0305"},"content":" return new HelpCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ktzy0305"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ktzy0305"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ktzy0305"},"content":" * Processes arguments for commands that require the task number which are","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ktzy0305"},"content":" * delete, mark and unmark.","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ktzy0305"},"content":" * @param args Command arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ktzy0305"},"content":" * @return taskNumber","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the task number is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ktzy0305"},"content":" private int parseArgsAsTaskNumber(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"ktzy0305"},"content":" Matcher matcher \u003d TASK_NUMBER_ARGS_FORMAT.matcher(args.trim());","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"ktzy0305"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.NO_TASK_NUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"ktzy0305"},"content":" return Integer.parseInt(matcher.group(\"taskNumber\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"ktzy0305"},"content":" * Processes arguments for tasks with deadline which are the description, and the","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"ktzy0305"},"content":" * deadline itself.","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ktzy0305"},"content":" * @param args Deadline arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ktzy0305"},"content":" * @return Deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the deadline description is empty or the argument format is wrong.","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ktzy0305"},"content":" public Deadline parseArgsAsDeadline(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"ktzy0305"},"content":" Matcher matcher \u003d DEADLINE_ARGS_FORMAT.matcher(args.trim());","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"ktzy0305"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_DEADLINE_FORMAT);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"ktzy0305"},"content":" String deadlineDescription \u003d matcher.group(\"description\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"ktzy0305"},"content":" String dateString \u003d matcher.group(\"deadline\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ktzy0305"},"content":" if (deadlineDescription.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.DEADLINE_NO_DESCRIPTION);","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime localDateTime \u003d LocalDateTime.parse(dateString, DATE_TIME_FORMAT);","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"ktzy0305"},"content":" return new Deadline(deadlineDescription, localDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"ktzy0305"},"content":" * Processes arguments for events which are the description, start date / time and end date / time.","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"ktzy0305"},"content":" * @param args Event arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"ktzy0305"},"content":" * @return Event","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the event description is empty, the argument format is wrong or","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"ktzy0305"},"content":" * from date is after the to date.","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"ktzy0305"},"content":" public Event parseArgsAsEvent(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"ktzy0305"},"content":" Matcher matcher \u003d EVENT_ARGS_FORMAT.matcher(args.trim());","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"ktzy0305"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_EVENT_FORMAT);","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"ktzy0305"},"content":" String eventDescription \u003d matcher.group(\"description\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"ktzy0305"},"content":" String fromDateString \u003d matcher.group(\"fromDate\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"ktzy0305"},"content":" String toDateString \u003d matcher.group(\"toDate\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"ktzy0305"},"content":" if (eventDescription.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.EVENT_NO_DESCRIPTION);","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime fromDate \u003d LocalDateTime.parse(fromDateString, DATE_TIME_FORMAT);","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime toDate \u003d LocalDateTime.parse(toDateString, DATE_TIME_FORMAT);","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"ktzy0305"},"content":" if (fromDate.isAfter(toDate)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_EVENT_ARGUMENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"ktzy0305"},"content":" return new Event(eventDescription, fromDate, toDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"ktzy0305"},"content":" private ToDo parseArgsAsToDo(String args) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"ktzy0305"},"content":" String description \u003d args.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"ktzy0305"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.TODO_NO_DESCRIPTION);","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"ktzy0305"},"content":" return new ToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"ktzy0305"},"content":" * Helper function to create an instance of a MarkCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"ktzy0305"},"content":" * @param args MarkCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"ktzy0305"},"content":" * @return MarkCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the task number is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"ktzy0305"},"content":" private Command prepareMarkCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"ktzy0305"},"content":" int taskIndex \u003d parseArgsAsTaskNumber(args);","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"ktzy0305"},"content":" return new MarkCommand(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"ktzy0305"},"content":" * Helper function to create an instance of an UnmarkCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"ktzy0305"},"content":" * @param args UnmarkCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"ktzy0305"},"content":" * @return UnmarkCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the task number is empty","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"ktzy0305"},"content":" private Command prepareUnmarkCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"ktzy0305"},"content":" int taskIndex \u003d parseArgsAsTaskNumber(args);","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"ktzy0305"},"content":" return new UnmarkCommand(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"ktzy0305"},"content":" * Helper function to create an instance of an AddDeadlineCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"ktzy0305"},"content":" * @param args AddDeadlineCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"ktzy0305"},"content":" * @return AddDeadlineCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the deadline description is empty or when the argument format is wrong.","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"ktzy0305"},"content":" private Command prepareAddDeadlineCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"ktzy0305"},"content":" Deadline deadline \u003d parseArgsAsDeadline(args);","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"ktzy0305"},"content":" return new AddDeadlineCommand(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"ktzy0305"},"content":" * Helper function to create an instance of an AddEventCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"ktzy0305"},"content":" * @param args AddEventCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"ktzy0305"},"content":" * @return AddEventCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the event description is empty or when the argument format is wrong.","lastModifiedDate":"2023-09-03"},{"lineNumber":229,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"ktzy0305"},"content":" private Command prepareAddEventCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"ktzy0305"},"content":" Event event \u003d parseArgsAsEvent(args);","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"ktzy0305"},"content":" return new AddEventCommand(event);","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"ktzy0305"},"content":" * Helper function to create an instance of an AddToDoCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"ktzy0305"},"content":" * @param args AddToDoCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"ktzy0305"},"content":" * @return AddToDoCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"ktzy0305"},"content":" private Command prepareAddToDoCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"ktzy0305"},"content":" ToDo todo \u003d parseArgsAsToDo(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"ktzy0305"},"content":" return new AddToDoCommand(todo);","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"ktzy0305"},"content":" * Helper function to create an instance of a DeleteCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"ktzy0305"},"content":" * @param args DeleteCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"ktzy0305"},"content":" * @return DeleteCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When the task number is out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":252,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":253,"author":{"gitId":"ktzy0305"},"content":" private Command prepareDeleteCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"ktzy0305"},"content":" int taskIndex \u003d parseArgsAsTaskNumber(args);","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"ktzy0305"},"content":" return new DeleteCommand(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":259,"author":{"gitId":"ktzy0305"},"content":" * Helper function to create an instance of a DueCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":260,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":261,"author":{"gitId":"ktzy0305"},"content":" * @param args DueCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":262,"author":{"gitId":"ktzy0305"},"content":" * @return DueCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":263,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":264,"author":{"gitId":"ktzy0305"},"content":" private Command prepareDueCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":265,"author":{"gitId":"ktzy0305"},"content":" if (args.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":266,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.DUE_NO_DATE);","lastModifiedDate":"2023-08-31"},{"lineNumber":267,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":268,"author":{"gitId":"ktzy0305"},"content":" LocalDate dueDate \u003d LocalDate.parse(args.trim(), DATE_FORMAT);","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"ktzy0305"},"content":" return new DueCommand(dueDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":272,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":273,"author":{"gitId":"ktzy0305"},"content":" * Helper function for creating an instance of a FindCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":274,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":275,"author":{"gitId":"ktzy0305"},"content":" * @param args FindCommand arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":276,"author":{"gitId":"ktzy0305"},"content":" * @return FindCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":277,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When there is no keyword specified.","lastModifiedDate":"2023-08-31"},{"lineNumber":278,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":279,"author":{"gitId":"ktzy0305"},"content":" private Command prepareFindCommand(String args) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":280,"author":{"gitId":"ktzy0305"},"content":" String keyword \u003d args.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":281,"author":{"gitId":"ktzy0305"},"content":" if (keyword.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":282,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.FIND_NO_KEYWORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":283,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":284,"author":{"gitId":"ktzy0305"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":285,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":286,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":286}},{"path":"src/main/java/skye/parser/TaskDecoder.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeExceptionType;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":" * Represents a utility class that decodes a task from an encoded string","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"public class TaskDecoder {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * Decodes the encoded string representation of a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" * @param line The encoded string representing a task in its save format","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" * @return Task","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException When an invalid save format is encountered","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" public Task decode(String line) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" String[] data \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" String taskType \u003d data[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" if (data.length \u003d\u003d 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime localDateTime \u003d","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(data[3].trim(), Parser.DATE_TIME_FORMAT);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" Task task \u003d new Deadline(data[2].trim(), localDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" if (Integer.parseInt(data[1].trim()) \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_DEADLINE_SAVE_FORMAT);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" if (data.length \u003d\u003d 5) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" Task task \u003d new Event(data[2].trim(),","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(data[3].trim(), Parser.DATE_TIME_FORMAT),","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(data[4].trim(), Parser.DATE_TIME_FORMAT));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" if (Integer.parseInt(data[1].trim()) \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_EVENT_SAVE_FORMAT);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" if (data.length \u003d\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" Task task \u003d new ToDo(data[2].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" if (Integer.parseInt(data[1].trim()) \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.INVALID_TODO_SAVE_FORMAT);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" throw new DukeException(DukeExceptionType.UNKNOWN_TASK_TYPE);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ktzy0305":66}},{"path":"src/main/java/skye/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"import skye.parser.TaskDecoder;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" * Represents a storage utility object which provides operations to load task information","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" * from the user\u0027s file system and write task information to the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" private static final String HELP_GUIDE_DIRECTORY \u003d \"src/main/java/skye/guide/help.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" private final String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" private final TaskDecoder taskDecoder;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" * Initializes the storage object by providing a file path","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" * @param filePath Path to the save file","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" this.taskDecoder \u003d new TaskDecoder();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" * Load all task information into the save file by reading from a text file specified","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" * by the file path and decoding each line into a Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" * @return Tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Describes the I/O error encountered in the OS file system","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" * @throws DateTimeParseException Describes the error with the date format","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" * @throws DukeException Describes the error encountered when executing the command","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" public List\u003cTask\u003e load() throws IOException, DateTimeParseException, DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" Path path \u003d Paths.get(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" Files.createDirectories(path.getParent());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" Files.createFile(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" List\u003cString\u003e encodedTasks \u003d Files.readAllLines(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" for (String encodedTask : encodedTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" tasks.add(taskDecoder.decode(encodedTask));","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" * Loads the help guide.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" * @return Help Guide as a list of strings","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Signifies that loading the file has failed","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" public List\u003cString\u003e loadHelpGuide() throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" return Files.readAllLines(Paths.get(HELP_GUIDE_DIRECTORY));","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" * Writes a list of decoded Task objects to the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":" * @param tasks List of Task objects","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ktzy0305"},"content":" * @throws IOException Signifies that writing to file has failed","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ktzy0305"},"content":" public void write(List\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ktzy0305"},"content":" FileWriter fw \u003d new FileWriter(Paths.get(filePath).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ktzy0305"},"content":" for (Task t: tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ktzy0305"},"content":" fw.write(t.toSaveDataFormat() + System.lineSeparator());","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ktzy0305"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":84}},{"path":"src/main/java/skye/ui/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":" * Represents the command line user interface which consists of a scanner to read in","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":" * user input and methods to display different messages to be shown to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"public class UI {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":" private static final int LINE_LENGTH \u003d 100;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" public UI() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" * Prints a message to be shown to the user with horizontal lines","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" * before and after the message.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" * @param message Message shown to the user","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" public void printMessage(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" * Reads the command from the user\u0027s input.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" * @return A command from the user\u0027s input","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" * Renders a horizontal line on the terminal.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" public void renderLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" System.out.println(\"_\".repeat(LINE_LENGTH));","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" * Display the welcome message used at the start of the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" printMessage(\"Hello! I\u0027m Skye, your personal task assistant.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" + \"What can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" * Display the exit message shown when exiting the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" public void showGoodBye() {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" scanner.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" printMessage(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" * Display the error message when writing to the save file has failed.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" printMessage(\"Sorry! I was unable to load the save file :(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" * Display the current list of tasks that the user has recorded.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ktzy0305"},"content":" * @param tasks A list of tasks from the TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ktzy0305"},"content":" public void showTasks(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ktzy0305"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ktzy0305"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ktzy0305"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ktzy0305"},"content":" System.out.printf(\"%d.%s%n\", i + 1, tasks.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ktzy0305"},"content":" System.out.println(\"Nice!! You\u0027re all caught up and have no pending tasks to worry about.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ktzy0305"},"content":" * Display the task that the user has recently added.","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ktzy0305"},"content":" * @param task Task that was added to the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ktzy0305"},"content":" * @param tasks Task list","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ktzy0305"},"content":" public void showAddedTask(Task task, List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ktzy0305"},"content":" printMessage(","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ktzy0305"},"content":" String.format(","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ktzy0305"},"content":" \"Got it. I\u0027ve added this task:\\n %s\\nNow you have %d task(s) in the list.\",","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ktzy0305"},"content":" task.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ktzy0305"},"content":" tasks.size()","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ktzy0305"},"content":" )","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ktzy0305"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ktzy0305"},"content":" * Display the task that the user has recently deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ktzy0305"},"content":" * @param task Task that was deleted from the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ktzy0305"},"content":" * @param tasks Task list","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ktzy0305"},"content":" public void showRemovedTask(Task task, List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"ktzy0305"},"content":" printMessage(","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"ktzy0305"},"content":" String.format(","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"ktzy0305"},"content":" \"Noted. I\u0027ve removed this task:\\n %s\\nNow you have %d tasks in the list\",","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"ktzy0305"},"content":" task.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"ktzy0305"},"content":" tasks.size()","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"ktzy0305"},"content":" )","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"ktzy0305"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ktzy0305"},"content":" * Display the task that was recently marked as completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ktzy0305"},"content":" * @param task Task marked as completed","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ktzy0305"},"content":" public void showMarkedTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"ktzy0305"},"content":" printMessage(String.format(\"Nice! I\u0027ve marked this task as done:\\n %s\", task));","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ktzy0305"},"content":" * Displays the task that was recently unmarked as incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ktzy0305"},"content":" * @param task Task unmarked as incomplete","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ktzy0305"},"content":" public void showUnmarkedTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"ktzy0305"},"content":" printMessage(String.format(\"OK, I\u0027ve marked this task as not done yet:\\n %s\", task));","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"ktzy0305"},"content":" * Displays the list of tasks due on a specified date","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"ktzy0305"},"content":" * @param date Due date","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"ktzy0305"},"content":" * @param tasks Task list","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"ktzy0305"},"content":" public void showTasksDueOn(LocalDate date, List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"ktzy0305"},"content":" System.out.println(\"Here are the tasks due on: \" + date.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"ktzy0305"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"ktzy0305"},"content":" tasks.forEach(System.out::println);","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"ktzy0305"},"content":" System.out.println(\"Great!! You\u0027ve nothing due!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"ktzy0305"},"content":" * Displays a help guide for the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"ktzy0305"},"content":" * @param lines Lines from the help guide","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"ktzy0305"},"content":" public void showHelpMessage(List\u003cString\u003e lines) {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"ktzy0305"},"content":" for (String line : lines) {","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"ktzy0305"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"ktzy0305"},"content":" * Displays a message when an unrecognized command is typed and","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"ktzy0305"},"content":" * refers the user to the help command","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"ktzy0305"},"content":" public void showInvalidCommandMsg() {","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"ktzy0305"},"content":" printMessage(\"I\u0027m sorry, I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"ktzy0305"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"ktzy0305"},"content":" * Display a list of matching tasks on the command line interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"ktzy0305"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"ktzy0305"},"content":" * @param tasks A list of matching tasks found","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"ktzy0305"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"ktzy0305"},"content":" public void showFoundTasks(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"ktzy0305"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"ktzy0305"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"ktzy0305"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"ktzy0305"},"content":" System.out.printf(\"%d.%s%n\", i + 1, tasks.get(i));","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"ktzy0305"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"ktzy0305"},"content":" System.out.println(\"No matching tasks found :(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"ktzy0305"},"content":" renderLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":195}},{"path":"src/test/java/skye/data/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.data;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeExceptionType;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" @BeforeEach","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" public void init() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" taskList.addTask(new ToDo(\"Write Report\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" taskList.addTask(new ToDo(\"Run 3km\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" public void markTask_numberOutOfRange_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e taskList.markTask(3));","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" assertEquals(DukeExceptionType.INVALID_RANGE.getMessage(), exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" public void markTask_numberWithinRange_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" Task task \u003d taskList.markTask(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" public void markTask_taskAlreadyMarked_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" taskList.markTask(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" taskList.markTask(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" assertEquals(DukeExceptionType.TASK_ALREADY_MARKED.getMessage(), exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" public void unmarkTask_numberOutOfRange_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e taskList.unmarkTask(0));","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" assertEquals(DukeExceptionType.INVALID_RANGE.getMessage(), exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" public void unmarkTask_numberWithinRange_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" taskList.markTask(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" Task task \u003d taskList.unmarkTask(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" public void unmarkTask_taskAlreadyUnmarked_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" taskList.markTask(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":" taskList.unmarkTask(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ktzy0305"},"content":" taskList.unmarkTask(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ktzy0305"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ktzy0305"},"content":" assertEquals(DukeExceptionType.TASK_ALREADY_UNMARKED.getMessage(), exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":76}},{"path":"src/test/java/skye/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeExceptionType;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":" private Parser parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":" @BeforeEach","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" public void init() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" public void parseArgsAsDeadline_validFormat_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" String args \u003d \"Lab Report /by 05-09-2023 23:59\";","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" Deadline expected \u003d","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" new Deadline(\"Lab Report\",","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(\"05-09-2023 23:59\", Parser.DATE_TIME_FORMAT));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" assertEquals(expected.toString(), parser.parseArgsAsDeadline(args).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" public void parseArgsAsDeadline_invalidDateTimeFormat_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" String args \u003d \"Lab Report /by 5-9-2023 23:59\";","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" assertThrows(DateTimeParseException.class, () -\u003e parser.parseArgsAsDeadline(args));","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" public void parseArgsAsEvent_validFormat_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" String args \u003d \"Presidential Elections 2023 /from 01-09-2023 08:00 /to 01-09-2023 20:00\";","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" Event expected \u003d","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" new Event(\"Presidential Elections 2023\",","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(\"01-09-2023 08:00\", Parser.DATE_TIME_FORMAT),","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(\"01-09-2023 20:00\", Parser.DATE_TIME_FORMAT));","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" assertEquals(expected, parser.parseArgsAsEvent(args));","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" public void parseArgsAsEvent_invalidEventFormat_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" String args \u003d \"Career Fair /to 31-08-2023 18:00 /from 29-08-2023: 10:00 \";","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e parser.parseArgsAsEvent(args));","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" assertEquals(DukeExceptionType.INVALID_EVENT_FORMAT.getMessage(), exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ktzy0305":64}},{"path":"src/test/java/skye/parser/TaskDecoderTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"package skye.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"import skye.data.exception.DukeExceptionType;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"import skye.data.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"public class TaskDecoderTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ktzy0305"},"content":" private TaskDecoder taskDecoder;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ktzy0305"},"content":" @BeforeEach","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ktzy0305"},"content":" public void init() {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"ktzy0305"},"content":" taskDecoder \u003d new TaskDecoder();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ktzy0305"},"content":" public void decode_toDo_success() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"ktzy0305"},"content":" String encodedLine \u003d \"T | 0 | Hang Laundry\";","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"ktzy0305"},"content":" Task expected \u003d new ToDo(\"Hang Laundry\");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"ktzy0305"},"content":" Task actual \u003d taskDecoder.decode(encodedLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"ktzy0305"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ktzy0305"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"ktzy0305"},"content":" public void decode_deadline_success() {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ktzy0305"},"content":" String encodedLine \u003d \"D | 0 | Budget Proposal | 05-09-2023 23:59\";","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ktzy0305"},"content":" Task expected \u003d new Deadline(\"Budget Proposal\",","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(\"05-09-2023 23:59\", Parser.DATE_TIME_FORMAT));","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ktzy0305"},"content":" Task actual \u003d taskDecoder.decode(encodedLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ktzy0305"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"ktzy0305"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"ktzy0305"},"content":" public void decode_event_success() {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ktzy0305"},"content":" String encodedLine \u003d \"E | 0 | Marathon | 12-09-2023 04:00 | 12-09-2023 12:00\";","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"ktzy0305"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"ktzy0305"},"content":" Task expected \u003d new Event(\"Marathon\",","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(\"12-09-2023 04:00\", Parser.DATE_TIME_FORMAT),","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"ktzy0305"},"content":" LocalDateTime.parse(\"12-09-2023 12:00\", Parser.DATE_TIME_FORMAT));","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"ktzy0305"},"content":" Task actual \u003d taskDecoder.decode(encodedLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"ktzy0305"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ktzy0305"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"ktzy0305"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"ktzy0305"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"ktzy0305"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"ktzy0305"},"content":" public void decode_unknownTaskType_throwsException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"ktzy0305"},"content":" String encodedLine \u003d \"deadline false Budget Proposal 05-09-2023 23:59\";","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"ktzy0305"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e taskDecoder.decode(encodedLine));","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"ktzy0305"},"content":" assertEquals(DukeExceptionType.UNKNOWN_TASK_TYPE.getMessage(), exception.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"ktzy0305"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"ktzy0305"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ktzy0305":71}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ktzy0305"},"content":"todo Read CS2103 Week 2 topics","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"ktzy0305"},"content":"deadline Week 2 Quiz /by 25-08-2023 23:59","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ktzy0305"},"content":"event Singapore GP /from 15-09-2023 14:00 /to 17-09-2023 23:00","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ktzy0305"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"ktzy0305"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"ktzy0305"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ktzy0305"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ktzy0305"},"content":"unmark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ktzy0305"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ktzy0305"},"content":"deadline Claims Submission","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ktzy0305"},"content":"deadline Claims Submission /by 31-08-2023 23:59","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ktzy0305"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"ktzy0305"},"content":"todo Watch ST2334 Pre-Lecture Videos","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ktzy0305"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ktzy0305"},"content":"delete 3","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ktzy0305"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ktzy0305"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ktzy0305":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":"ktzy0305"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\skye\\*.java","lastModifiedDate":"2023-09-03"},{"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":"ktzy0305"},"content":"REM run the program, feed skye.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ktzy0305"},"content":"java -classpath ..\\bin skye.Skye \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":{"-":18,"ktzy0305":3}},{"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":"ktzy0305"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/duke/*.java","lastModifiedDate":"2023-08-30"},{"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":"ktzy0305"},"content":"# run the program, feed duke.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"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":{"-":36,"ktzy0305":2}}] diff --git a/ktzy0305_ip_master/commits.json b/ktzy0305_ip_master/commits.json index 7fdb9fb1..0ccd3c3c 100644 --- a/ktzy0305_ip_master/commits.json +++ b/ktzy0305_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ktzy0305":[{"date":"2023-08-20","commitResults":[{"hash":"2653b7cbcdcc61a9a4e4ec1130a6129051c9d608","isMergeCommit":false,"messageTitle":"rename, greet, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":7}}},{"hash":"1d0ba10b375026088c02f1d2208141e3b782928e","isMergeCommit":false,"messageTitle":"add echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":7}}}]},{"date":"2023-08-21","commitResults":[{"hash":"cc8b300e9c1d41128db4c524a650193febbb74b8","isMergeCommit":false,"messageTitle":"feat: add task and list tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":9}}},{"hash":"94e1fb634b7ab0b6838f721722c541564d1b77fc","isMergeCommit":false,"messageTitle":"add task.java","messageBody":"","tags":["A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":0}}},{"hash":"ccdcf30b1f618a86da6a271f9b2109c94515373b","isMergeCommit":false,"messageTitle":"feat: add mark as done and unmark","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":8}}},{"hash":"0b5f0e4307643a0c1063be349ef6d63230c32caf","isMergeCommit":false,"messageTitle":"add classes Deadline.java, Event.java and ToDo.java","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":0}}},{"hash":"9fa07a0ba9241ba3f7760d07c60bcddbcd73143a","isMergeCommit":false,"messageTitle":"feat: add todos, events and deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":18}}},{"hash":"2fb08c47f7e2143c488e6e8cdeccd3dc4771d821","isMergeCommit":false,"messageTitle":"add test inputs and expected outputs","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":4,"deletions":3}}},{"hash":"a8a4980cd366e864a59f97ed93c13e12e6d439b5","isMergeCommit":false,"messageTitle":"Add DukeException.java","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"60c284a3f3aee6ccc73a5081277b07f2c7e72ba7","isMergeCommit":false,"messageTitle":"Add error handling for incorrect inputs","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":159,"deletions":96}}},{"hash":"1bc59f4a45699a1ea3f2419a050b49d4bd9425d6","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list","messageBody":"","tags":["Level-6","A-Enums","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":92,"deletions":47}}}]},{"date":"2023-08-28","commitResults":[{"hash":"165465e9342317ec369663a71345fa1af5dbc2f6","isMergeCommit":false,"messageTitle":"add functionality to save tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":256,"deletions":140}}},{"hash":"d1f9460a89fb23fedcf22f41ce35a1b2fa492642","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"ff3eaab99e90fb360599fc4056a4a25940a1876f","isMergeCommit":false,"messageTitle":"add dates and times to Skye","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"java":{"insertions":104,"deletions":24}}},{"hash":"c968518199dba50bac3bdbb95b757b5d90c59464","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"6806c136c8d6237bdfd55adc7868fbd543efea08","isMergeCommit":false,"messageTitle":"remove data/tasks.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5}}}]},{"date":"2023-08-30","commitResults":[{"hash":"7aa1874ac85c641a11a8bfd183f24ed4ce5cfc2c","isMergeCommit":false,"messageTitle":"add more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":546,"deletions":289}}},{"hash":"70f4790e5c670637e33599e8150a8e7c47712eb9","isMergeCommit":false,"messageTitle":"add packaging of classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":93}}},{"hash":"93771fd2cf91f90234596c675c0e6af74df523f8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"62d5a79cc490fe0d8b3b7e279c5d56dca36494db","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-JUnit","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4386f05b81b22cf9e5e9f44761532f449393d1f1","isMergeCommit":false,"messageTitle":"adds gradle build scripts, JUnit tests and create jar file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":2},"java":{"insertions":318,"deletions":107},"bat":{"insertions":3,"deletions":3},"sh":{"insertions":2,"deletions":2},"md":{"insertions":2,"deletions":2}}},{"hash":"1e3f626e4a5c12e4e38a6233df73e1b2cdf8dc9b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit","A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"6fbfbac718a63e43bb243ff76cd6b7cb460c75bc","isMergeCommit":false,"messageTitle":"adhere to Java coding standards.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":53}}},{"hash":"e1553b7aea1287e5f90f420984a57c4ee2990c7a","isMergeCommit":false,"messageTitle":"Add JavaDoc documentation for classes and methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":585,"deletions":25}}},{"hash":"c35b8f8b12d704155271de0b873c714ce116fe6c","isMergeCommit":false,"messageTitle":"add find task command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":26,"deletions":0},"java":{"insertions":107,"deletions":7}}},{"hash":"e7468cdef573d4adb57d51eae25d654e59609327","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"58f31431e2a44830e05b80824e95047d3754de7a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/parser/Parser.java\n#\tsrc/main/java/duke/ui/UI.java\n","fileTypesAndContributionMap":{}},{"hash":"1ad25962e0583d5cf0d9b4430bb61c0e13608256","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/duke/commands/Command.java\n#\tsrc/main/java/duke/commands/DueCommand.java\n#\tsrc/main/java/duke/commands/HelpCommand.java\n#\tsrc/main/java/duke/commands/ListCommand.java\n#\tsrc/main/java/duke/data/TaskList.java\n#\tsrc/main/java/duke/data/exception/DukeException.java\n#\tsrc/main/java/duke/parser/Parser.java\n#\tsrc/main/java/duke/storage/Storage.java\n#\tsrc/main/java/duke/ui/UI.java\n","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"d4862747c60b7e98cb6c9a3c09a87d0c0d75e3d0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-JUnit","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9cb103b6faf4d7a8c0dbb97c107df03692288d63","isMergeCommit":false,"messageTitle":"add unit test cases for TaskDecoder.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":3}}},{"hash":"cbb16d531151fb252297ba1af334fb248a3a78d6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-JUnit\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f37785136cdff0b3a07de74dd15fe6895d29cc16","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Packages","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b862a45325da19a083ccd51da4619395199f6cc7","isMergeCommit":false,"messageTitle":"rename package name from duke to skye","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":0,"deletions":0},"java":{"insertions":136,"deletions":134},"bat":{"insertions":3,"deletions":3},"md":{"insertions":2,"deletions":2}}},{"hash":"2b2b19b3a665a5eccca4966c1f19afac277436d5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ktzy0305":{"java":1895,"md":2,"fxml":0,"sh":2,"bat":3,"gradle":2,"txt":43}},"authorContributionVariance":{"ktzy0305":179646.83},"authorDisplayNameMap":{"ktzy0305":"CS2103-F13-3 KEVI..YING"}} +{"authorDailyContributionsMap":{"ktzy0305":[{"date":"2023-08-20","commitResults":[{"hash":"2653b7cbcdcc61a9a4e4ec1130a6129051c9d608","isMergeCommit":false,"messageTitle":"rename, greet, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":7}}},{"hash":"1d0ba10b375026088c02f1d2208141e3b782928e","isMergeCommit":false,"messageTitle":"add echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":7}}}]},{"date":"2023-08-21","commitResults":[{"hash":"cc8b300e9c1d41128db4c524a650193febbb74b8","isMergeCommit":false,"messageTitle":"feat: add task and list tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":9}}},{"hash":"94e1fb634b7ab0b6838f721722c541564d1b77fc","isMergeCommit":false,"messageTitle":"add task.java","messageBody":"","tags":["A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":0}}},{"hash":"ccdcf30b1f618a86da6a271f9b2109c94515373b","isMergeCommit":false,"messageTitle":"feat: add mark as done and unmark","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":8}}},{"hash":"0b5f0e4307643a0c1063be349ef6d63230c32caf","isMergeCommit":false,"messageTitle":"add classes Deadline.java, Event.java and ToDo.java","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":0}}},{"hash":"9fa07a0ba9241ba3f7760d07c60bcddbcd73143a","isMergeCommit":false,"messageTitle":"feat: add todos, events and deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":18}}},{"hash":"2fb08c47f7e2143c488e6e8cdeccd3dc4771d821","isMergeCommit":false,"messageTitle":"add test inputs and expected outputs","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":4,"deletions":3}}},{"hash":"a8a4980cd366e864a59f97ed93c13e12e6d439b5","isMergeCommit":false,"messageTitle":"Add DukeException.java","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"60c284a3f3aee6ccc73a5081277b07f2c7e72ba7","isMergeCommit":false,"messageTitle":"Add error handling for incorrect inputs","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":159,"deletions":96}}},{"hash":"1bc59f4a45699a1ea3f2419a050b49d4bd9425d6","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list","messageBody":"","tags":["Level-6","A-Enums","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":92,"deletions":47}}}]},{"date":"2023-08-28","commitResults":[{"hash":"165465e9342317ec369663a71345fa1af5dbc2f6","isMergeCommit":false,"messageTitle":"add functionality to save tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":256,"deletions":140}}},{"hash":"d1f9460a89fb23fedcf22f41ce35a1b2fa492642","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"ff3eaab99e90fb360599fc4056a4a25940a1876f","isMergeCommit":false,"messageTitle":"add dates and times to Skye","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"java":{"insertions":104,"deletions":24}}},{"hash":"c968518199dba50bac3bdbb95b757b5d90c59464","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"6806c136c8d6237bdfd55adc7868fbd543efea08","isMergeCommit":false,"messageTitle":"remove data/tasks.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5}}}]},{"date":"2023-08-30","commitResults":[{"hash":"7aa1874ac85c641a11a8bfd183f24ed4ce5cfc2c","isMergeCommit":false,"messageTitle":"add more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":546,"deletions":289}}},{"hash":"70f4790e5c670637e33599e8150a8e7c47712eb9","isMergeCommit":false,"messageTitle":"add packaging of classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":93}}},{"hash":"93771fd2cf91f90234596c675c0e6af74df523f8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"62d5a79cc490fe0d8b3b7e279c5d56dca36494db","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-JUnit","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4386f05b81b22cf9e5e9f44761532f449393d1f1","isMergeCommit":false,"messageTitle":"adds gradle build scripts, JUnit tests and create jar file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":2},"java":{"insertions":318,"deletions":107},"bat":{"insertions":3,"deletions":3},"sh":{"insertions":2,"deletions":2},"md":{"insertions":2,"deletions":2}}},{"hash":"1e3f626e4a5c12e4e38a6233df73e1b2cdf8dc9b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit","A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"6fbfbac718a63e43bb243ff76cd6b7cb460c75bc","isMergeCommit":false,"messageTitle":"adhere to Java coding standards.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":53}}},{"hash":"e1553b7aea1287e5f90f420984a57c4ee2990c7a","isMergeCommit":false,"messageTitle":"Add JavaDoc documentation for classes and methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":585,"deletions":25}}},{"hash":"c35b8f8b12d704155271de0b873c714ce116fe6c","isMergeCommit":false,"messageTitle":"add find task command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":26,"deletions":0},"java":{"insertions":107,"deletions":7}}},{"hash":"e7468cdef573d4adb57d51eae25d654e59609327","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"58f31431e2a44830e05b80824e95047d3754de7a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/parser/Parser.java\n#\tsrc/main/java/duke/ui/UI.java\n","fileTypesAndContributionMap":{}},{"hash":"1ad25962e0583d5cf0d9b4430bb61c0e13608256","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/duke/commands/Command.java\n#\tsrc/main/java/duke/commands/DueCommand.java\n#\tsrc/main/java/duke/commands/HelpCommand.java\n#\tsrc/main/java/duke/commands/ListCommand.java\n#\tsrc/main/java/duke/data/TaskList.java\n#\tsrc/main/java/duke/data/exception/DukeException.java\n#\tsrc/main/java/duke/parser/Parser.java\n#\tsrc/main/java/duke/storage/Storage.java\n#\tsrc/main/java/duke/ui/UI.java\n","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"d4862747c60b7e98cb6c9a3c09a87d0c0d75e3d0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-JUnit","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9cb103b6faf4d7a8c0dbb97c107df03692288d63","isMergeCommit":false,"messageTitle":"add unit test cases for TaskDecoder.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":3}}},{"hash":"cbb16d531151fb252297ba1af334fb248a3a78d6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-JUnit\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f37785136cdff0b3a07de74dd15fe6895d29cc16","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Packages","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b862a45325da19a083ccd51da4619395199f6cc7","isMergeCommit":false,"messageTitle":"rename package name from duke to skye","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":0,"deletions":0},"java":{"insertions":136,"deletions":134},"bat":{"insertions":3,"deletions":3},"md":{"insertions":2,"deletions":2}}},{"hash":"2b2b19b3a665a5eccca4966c1f19afac277436d5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"690dd24c6082086f4fab12de0024b22123a1bc2a","isMergeCommit":false,"messageTitle":"update readme title","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"md":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"3de268a783a333f13c326d654c6b6ef352c93349","isMergeCommit":false,"messageTitle":"add checkstyle to the project and change import order","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":140,"deletions":121}}},{"hash":"607d00dbadd6a7b4e471c049431806d67b75755c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ktzy0305":{"java":1914,"md":2,"fxml":0,"sh":2,"bat":3,"gradle":5,"txt":43}},"authorContributionVariance":{"ktzy0305":163498.94},"authorDisplayNameMap":{"ktzy0305":"CS2103-F13-3 KEVI..YING"}} diff --git a/lynnlow175_ip_master/commits.json b/lynnlow175_ip_master/commits.json index 42321b8a..e705daa9 100644 --- a/lynnlow175_ip_master/commits.json +++ b/lynnlow175_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"lynnlow175":[{"date":"2023-08-24","commitResults":[{"hash":"3f16c21aff454742eedf0c5ef8dd11010ed6e30c","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":6}}},{"hash":"f368cd6db6f88dc65ef165f81de1fef16fc77897","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"fab27d5a89bee867003c95bd026381378e82d158","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"a1a89102a2046bf58745091b836275f577250ec9","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":5}}},{"hash":"ded615f58cf31f321813f2e4818cc6b36baf2074","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":13}}},{"hash":"9e2d2f550718dcd3e51ebeb7c76251fa5c945a73","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":2,"deletions":2},"sh":{"insertions":0,"deletions":0}}},{"hash":"1b1a1ea0e952642f2026a16e3dc987e8532eb9b3","isMergeCommit":false,"messageTitle":"Level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":53}}},{"hash":"7873698d767753a3b8994d2b15443ed5fe5c9db9","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"4e6c6a41a14d060f5b9647b39996f93cf3ba98b1","isMergeCommit":false,"messageTitle":"Level 7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":13}}},{"hash":"2323daf3e6a6702f54af6c93b53663e41ee19151","isMergeCommit":false,"messageTitle":"Rectified Level 7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":9,"deletions":5}}},{"hash":"e5643d7592ae03af53d9809eb274758e4cbc66e3","isMergeCommit":false,"messageTitle":"Level 8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":48,"deletions":18}}}]},{"date":"2023-09-01","commitResults":[{"hash":"c971fd2d2be6e1d0af918c216ea1cd109431eef1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"3189ccbeab1eb8249355bf5a7b696dfa3c0af088","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"5b4cc4b1c21c591842370fe77e07f1dd7e5ce595","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":318,"deletions":249}}},{"hash":"e8e369f7b102882ce21566ce2282c12603105dda","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":8},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"1481d79ab583cca2c67ea60b27f8c2c6b5e93fe4","isMergeCommit":false,"messageTitle":"Test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"572bbadb078c61d6a2cf8e629e4665c2e0b658c3","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"c781d1ff612c6b24ff64ad8d921f828ab1a14ac1","isMergeCommit":false,"messageTitle":"Bump gradle and lib version","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":4}}},{"hash":"139775338bf6b609f47e39257f8f8f86fa02c1e9","isMergeCommit":false,"messageTitle":"Rename package to duke","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":2,"deletions":1},"java":{"insertions":9,"deletions":9},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"e191a3f856f7f3c5be612bf625fe0d31c13ec4ba","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"29d95648eba436498ec14c7cf055c440a5a6fee8","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"70aadb08eb0d77b20a3cbe8219cfd16323503094","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":0,"deletions":2},"java":{"insertions":139,"deletions":50}}},{"hash":"4b8f3ba17277fdb7669d84dfca6378f86e8b6f61","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-JavaDoc","A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"2b2649b3794a3e75129104f8e22df18ebae239d6","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0},"java":{"insertions":287,"deletions":11}}}]},{"date":"2023-09-04","commitResults":[{"hash":"4169cfd73c12a4c2ccd4502199c1b197b4a02100","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b13a2f22c2bb2f26b7a227700340d2be7a43550e","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":8}}},{"hash":"03de902534c2ce570e2f047ed1b8ca20812e1f28","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"69efa5855f2966e7ad40b7b03f9813694b358459","isMergeCommit":false,"messageTitle":"Level 9","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":59,"deletions":0}}},{"hash":"65947ced0f6268699d45d18824d3714348cb636f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"lynnlow175":{"java":828,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":4,"txt":6}},"authorContributionVariance":{"lynnlow175":30030.889},"authorDisplayNameMap":{"lynnlow175":"CS2103T-F10-2 LOW ..LYNN"}} +{"authorDailyContributionsMap":{"lynnlow175":[{"date":"2023-08-24","commitResults":[{"hash":"3f16c21aff454742eedf0c5ef8dd11010ed6e30c","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":6}}},{"hash":"f368cd6db6f88dc65ef165f81de1fef16fc77897","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"fab27d5a89bee867003c95bd026381378e82d158","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"a1a89102a2046bf58745091b836275f577250ec9","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":5}}},{"hash":"ded615f58cf31f321813f2e4818cc6b36baf2074","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":13}}},{"hash":"9e2d2f550718dcd3e51ebeb7c76251fa5c945a73","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":2,"deletions":2},"sh":{"insertions":0,"deletions":0}}},{"hash":"1b1a1ea0e952642f2026a16e3dc987e8532eb9b3","isMergeCommit":false,"messageTitle":"Level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":53}}},{"hash":"7873698d767753a3b8994d2b15443ed5fe5c9db9","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"4e6c6a41a14d060f5b9647b39996f93cf3ba98b1","isMergeCommit":false,"messageTitle":"Level 7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":13}}},{"hash":"2323daf3e6a6702f54af6c93b53663e41ee19151","isMergeCommit":false,"messageTitle":"Rectified Level 7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":9,"deletions":5}}},{"hash":"e5643d7592ae03af53d9809eb274758e4cbc66e3","isMergeCommit":false,"messageTitle":"Level 8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":48,"deletions":18}}}]},{"date":"2023-09-01","commitResults":[{"hash":"c971fd2d2be6e1d0af918c216ea1cd109431eef1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"3189ccbeab1eb8249355bf5a7b696dfa3c0af088","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"5b4cc4b1c21c591842370fe77e07f1dd7e5ce595","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":318,"deletions":249}}},{"hash":"e8e369f7b102882ce21566ce2282c12603105dda","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":8},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"1481d79ab583cca2c67ea60b27f8c2c6b5e93fe4","isMergeCommit":false,"messageTitle":"Test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"572bbadb078c61d6a2cf8e629e4665c2e0b658c3","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"c781d1ff612c6b24ff64ad8d921f828ab1a14ac1","isMergeCommit":false,"messageTitle":"Bump gradle and lib version","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":4}}},{"hash":"139775338bf6b609f47e39257f8f8f86fa02c1e9","isMergeCommit":false,"messageTitle":"Rename package to duke","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":2,"deletions":1},"java":{"insertions":9,"deletions":9},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"e191a3f856f7f3c5be612bf625fe0d31c13ec4ba","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"29d95648eba436498ec14c7cf055c440a5a6fee8","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"70aadb08eb0d77b20a3cbe8219cfd16323503094","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":0,"deletions":2},"java":{"insertions":139,"deletions":50}}},{"hash":"4b8f3ba17277fdb7669d84dfca6378f86e8b6f61","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"2b2649b3794a3e75129104f8e22df18ebae239d6","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0},"java":{"insertions":287,"deletions":11}}}]},{"date":"2023-09-04","commitResults":[{"hash":"4169cfd73c12a4c2ccd4502199c1b197b4a02100","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"b13a2f22c2bb2f26b7a227700340d2be7a43550e","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":8}}},{"hash":"03de902534c2ce570e2f047ed1b8ca20812e1f28","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"69efa5855f2966e7ad40b7b03f9813694b358459","isMergeCommit":false,"messageTitle":"Level 9","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":59,"deletions":0}}},{"hash":"65947ced0f6268699d45d18824d3714348cb636f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"lynnlow175":{"java":828,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":4,"txt":6}},"authorContributionVariance":{"lynnlow175":30030.889},"authorDisplayNameMap":{"lynnlow175":"CS2103T-F10-2 LOW ..LYNN"}} diff --git a/mamayuan_ip_master/authorship.json b/mamayuan_ip_master/authorship.json index 74a91991..bf054e99 100644 --- a/mamayuan_ip_master/authorship.json +++ b/mamayuan_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"import task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"import task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" String line \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Hello! I\u0027m DaDaYuan\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" while (true) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" System.out.println((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" String description \u003d input.length() \u003e 5 ? input.substring(5) : \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" throw new EmptyDescriptionException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" tasks.add(new Todo(description));","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" String[] parts \u003d input.split(\" /by \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" throw new EmptyDescriptionException(\"OOPS!!! The deadline of a task cannot be empty.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" String description \u003d parts[0].substring(9);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" tasks.add(new Deadline(description, parts[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"mamayuan"},"content":" String[] parts \u003d input.split(\" /from | /to \", 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"mamayuan"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"mamayuan"},"content":" throw new EmptyDescriptionException(\"OOPS!!! The event timing details are incomplete.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"mamayuan"},"content":" tasks.add(new Event(parts[0].substring(6), parts[1], parts[2]));","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"mamayuan"},"content":" throw new UnknownCommandException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"mamayuan"},"content":" } catch (EmptyDescriptionException | UnknownCommandException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"mamayuan"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"mamayuan"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"mamayuan"},"content":" scanner.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"mamayuan":78,"-":4}},{"path":"src/main/java/exceptions/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public EmptyDescriptionException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":8}},{"path":"src/main/java/exceptions/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class UnknownCommandException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public UnknownCommandException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":7}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private String by;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" super(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" return \"[D][\" + (isDone ? \"X\" : \" \") + \"] \" + description + \" (by: \" + by + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":16}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private String from;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" private String to;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" super(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" return \"[E][\" + (isDone ? \"X\" : \" \") + \"] \" + description + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":19}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" protected String description;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" public void unmark() {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":20}},{"path":"src/main/java/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" super(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" return \"[T][\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":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":"mamayuan"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\Duke.java","lastModifiedDate":"2023-09-03"},{"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":{"-":20,"mamayuan":1}}] +[{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":1}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import duke.io.Loader;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"import duke.io.Saver;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e branch-Level-7","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" private static final String LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" public Duke() {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" tasks \u003d Loader.loadFromFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Hello! I\u0027m DaDaYuan\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" while (true) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" Saver.saveToFile(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" System.out.println((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" String description \u003d input.length() \u003e 5 ? input.substring(5) : \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":" tasks.add(new Todo(description));","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"mamayuan"},"content":" String[] parts \u003d input.split(\" /by \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"mamayuan"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"mamayuan"},"content":" throw new DukeException(\"OOPS!!! The deadline of a task cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"mamayuan"},"content":" String description \u003d parts[0].substring(9);","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"mamayuan"},"content":" tasks.add(new Deadline(description, parts[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"mamayuan"},"content":" String[] parts \u003d input.split(\" /from | /to \", 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"mamayuan"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"mamayuan"},"content":" throw new DukeException(\"OOPS!!! The event timing details are incomplete.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"mamayuan"},"content":" tasks.add(new Event(parts[0].substring(6), parts[1], parts[2]));","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"mamayuan"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"mamayuan"},"content":" Saver.saveToFile(tasks); // saving to file after each operation","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"mamayuan"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"mamayuan"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"mamayuan"},"content":" scanner.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"mamayuan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"mamayuan"},"content":" new Duke().run();","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":106}},{"path":"src/main/java/duke/exceptions/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public EmptyDescriptionException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":8}},{"path":"src/main/java/duke/exceptions/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class UnknownCommandException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public UnknownCommandException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":7}},{"path":"src/main/java/duke/io/Loader.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.io;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":"public class Loader {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" private static final String FILE_PATH \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" public static List\u003cTask\u003e loadFromFile() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" String data \u003d sc.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" String[] parts \u003d data.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" switch (parts[0].trim()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" case \"T\":","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" task \u003d new Todo(parts[2].trim());","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" if (parts[1].trim().equals(\"1\")) task.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" case \"D\":","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" task \u003d new Deadline(parts[2].trim(), parts[3].trim());","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" if (parts[1].trim().equals(\"1\")) task.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":" case \"E\":","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" String[] timings \u003d parts[3].trim().split(\" \", 3);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" task \u003d new Event(parts[2].trim(), timings[0] + \" \" + timings[1], timings[2]);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" if (parts[1].trim().equals(\"1\")) task.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" sc.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Error reading file: \" + e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" return tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":54}},{"path":"src/main/java/duke/io/Saver.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.io;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"public class Saver {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" private static final String FILE_PATH \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" public static void saveToFile(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" FileWriter fw \u003d new FileWriter(FILE_PATH);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" fw.write(task.toFileFormat() + \"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" fw.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Error writing to file: \" + e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":24}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" private String by;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" super(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" private static final String DONE_FLAG \u003d \"[X] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" private static final String UNDONE_FLAG \u003d \"[ ] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" private static final String PRINT_FORMAT \u003d \"[D]%s %s (%s)\";","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" private String by;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" public Deadline(String info, String by) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" super(info, TaskType.DEADLINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e branch-Level-7","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" return \"[D][\" + (isDone ? \"X\" : \" \") + \"] \" + description + \" (by: \" + by + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" String status \u003d this.isDone() ? DONE_FLAG : UNDONE_FLAG;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" return String.format(PRINT_FORMAT, status, this.getDescription(), by);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e branch-Level-7","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":34}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" private static final String DONE_FLAG \u003d \"[X] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" private static final String UNDONE_FLAG \u003d \"[ ] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" private static final String PRINT_FORMAT \u003d \"[E]%s %s (from: %s to: %s)\";","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e branch-Level-7","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" private String from;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" private String to;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" super(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" super(description, TaskType.EVENT);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e branch-Level-7","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" return \"[E][\" + (isDone ? \"X\" : \" \") + \"] \" + description + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" String status \u003d this.isDone() ? DONE_FLAG : UNDONE_FLAG;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" return String.format(PRINT_FORMAT, status, this.getDescription(), from, to);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e branch-Level-7","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":37}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" protected String description;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" public void unmark() {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" private static final String DONE_FLAG \u003d \"[X] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" private static final String UNDONE_FLAG \u003d \"[ ] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" private final String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" private final TaskType type;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" public Task(String description, TaskType type) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" return description;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" return isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" public void unmark() {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" return (isDone() ? DONE_FLAG : UNDONE_FLAG) + getDescription();","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e branch-Level-7","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":57}},{"path":"src/main/java/duke/tasks/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" * An enum class that specify the type of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"public enum TaskType {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" TODO, EVENT, DEADLINE","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":8}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" super(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" private static final String DONE_FLAG \u003d \"[X] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" private static final String UNDONE_FLAG \u003d \"[ ] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" private static final String PRINT_FORMAT \u003d \"[T]%s %s\";","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" super(description, TaskType.TODO);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e branch-Level-7","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" return \"[T][\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" String status \u003d this.isDone() ? DONE_FLAG : UNDONE_FLAG;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" return String.format(PRINT_FORMAT, status, this.getDescription());","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e branch-Level-7","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":29}},{"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":"mamayuan"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\Duke.java","lastModifiedDate":"2023-09-03"},{"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":{"-":20,"mamayuan":1}}] diff --git a/mamayuan_ip_master/commits.json b/mamayuan_ip_master/commits.json index 90d99540..10dc2c0d 100644 --- a/mamayuan_ip_master/commits.json +++ b/mamayuan_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"mamayuan":[{"date":"2023-09-03","commitResults":[{"hash":"5c08f4a7a7fb73816eb8cbefcd55526ae40190d3","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"a3d3ef334050fab3111d7755cb11a908cd1ef15c","isMergeCommit":false,"messageTitle":"Rename of file","messageBody":"","tags":["Level-0-new"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"c920eb5108cb9d57b7049fae43ba748c64ff0fb0","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e749d9b586f20808ffc6a4866af0986dd5756d4b","isMergeCommit":false,"messageTitle":"Correct missing colon","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"5313878f6616fa7485883eac96dff15dd494ef55","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":4}}},{"hash":"8fbe6a71be4295037d5cf78736f8e53b732ea6ce","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"190c265a2024e744ce5dbd874f899bebbb61e34c","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":4}}},{"hash":"c5b73f0b32121e8136b88e9114c9229343d9067f","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":21}}},{"hash":"54a8f4649dbaccdf2662ca120205b0b499845530","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":118},"bat":{"insertions":1,"deletions":1}}},{"hash":"0e1f88214fa05bd8bf70838c8cec12daf3526345","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"ffc3beae2ed9054728e98069122215260e6ab450","isMergeCommit":false,"messageTitle":"Packages inner classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":85}}}]}]},"authorFileTypeContributionMap":{"mamayuan":{"java":161,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":0}},"authorContributionVariance":{"mamayuan":12689.582},"authorDisplayNameMap":{"mamayuan":"CS2103-W14-3 MA Y..YUAN"}} +{"authorDailyContributionsMap":{"mamayuan":[{"date":"2023-09-03","commitResults":[{"hash":"5c08f4a7a7fb73816eb8cbefcd55526ae40190d3","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"a3d3ef334050fab3111d7755cb11a908cd1ef15c","isMergeCommit":false,"messageTitle":"Rename of file","messageBody":"","tags":["Level-0-new"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"c920eb5108cb9d57b7049fae43ba748c64ff0fb0","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e749d9b586f20808ffc6a4866af0986dd5756d4b","isMergeCommit":false,"messageTitle":"Correct missing colon","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"5313878f6616fa7485883eac96dff15dd494ef55","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":4}}},{"hash":"8fbe6a71be4295037d5cf78736f8e53b732ea6ce","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"190c265a2024e744ce5dbd874f899bebbb61e34c","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":4}}},{"hash":"c5b73f0b32121e8136b88e9114c9229343d9067f","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":21}}},{"hash":"54a8f4649dbaccdf2662ca120205b0b499845530","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":118},"bat":{"insertions":1,"deletions":1}}},{"hash":"0e1f88214fa05bd8bf70838c8cec12daf3526345","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"ffc3beae2ed9054728e98069122215260e6ab450","isMergeCommit":false,"messageTitle":"Packages inner classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":85}}},{"hash":"4254a9df1fad39d979d79379282921991964ef1c","isMergeCommit":false,"messageTitle":"Reorganise packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":26}}}]},{"date":"2023-09-05","commitResults":[{"hash":"293be328ce29520b8f1cae8a4e6f17d2f82e56a4","isMergeCommit":false,"messageTitle":"Reorganises packages again","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":12,"deletions":12}}},{"hash":"69d7ab7bd4f1e221bd15e9ad6781ffe96231b246","isMergeCommit":false,"messageTitle":"Fix bugs up to level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":14}}},{"hash":"e6dac5a50befda9d6de9219427da7ac43ff883ea","isMergeCommit":true,"messageTitle":"Merges branches","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"mamayuan":{"java":364,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":1}},"authorContributionVariance":{"mamayuan":15301.602},"authorDisplayNameMap":{"mamayuan":"CS2103-W14-3 MA Y..YUAN"}} diff --git a/marcellaantania_ip_master/authorship.json b/marcellaantania_ip_master/authorship.json index a91b05dd..d79aa490 100644 --- a/marcellaantania_ip_master/authorship.json +++ b/marcellaantania_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/thea.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"T | 1 | buy gift for mom","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"T | 0 | do project","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"T | 1 | career fair","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"marcellaantania":3}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":" String time;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":" public Deadline(String taskName, String time) {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" this.time \u003d time;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"T | %s | %s | %s\", (super.isDone ? \"1\" : \"0\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" super.taskName, this.time);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[D][%s] %s (by: %s)\", (super.isDone ? \"X\" : \" \"), super.taskName, this.time);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":16}},{"path":"src/main/java/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"public class EmptyDescriptionException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":" public EmptyDescriptionException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":5}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":" String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":" String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" public Event(String taskName, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"T | %s | %s | %s | %s\", (super.isDone ? \"1\" : \"0\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" super.taskName, this.from, this.to);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[E][%s] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" (super.isDone ? \"X\" : \" \"), super.taskName, this.from, this.to);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":21}},{"path":"src/main/java/FileCorruptedException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"public class FileCorruptedException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":" public FileCorruptedException(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"marcellaantania":5}},{"path":"src/main/java/IndexOutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"public class IndexOutOfBoundsException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":" public IndexOutOfBoundsException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":5}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":" boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":" final String taskName;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" public void unmarkAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" public String getTaskName() {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" return this.taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" return this.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[%s] %s\", (this.isDone ? \"X\" : \" \"), this.taskName);","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"marcellaantania":30}},{"path":"src/main/java/Thea.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"import java.util.Collections;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"public class Thea {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" public static void main(String[] args) throws Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" Scanner input \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cTask\u003e tasks \u003d retrieveTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" greet();","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" String userInput \u003d input.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" while (true) {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" String[] commandWords \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cString\u003e commandWordsArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" Collections.addAll(commandWordsArray, commandWords);","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" String command \u003d commandWords[0];","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" exit();","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" printList(tasks);","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" int index \u003d Integer.parseInt(commandWords[1]) - 1;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e tasks.size() - 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" tasks.get(index).markAsDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" System.out.printf(\"Great job! ˊᗜˋ I\u0027ve marked this task as done:\\n %s\\n\", tasks.get(index));","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" int index \u003d Integer.parseInt(commandWords[1]) - 1;","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e tasks.size() - 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" tasks.get(index).unmarkAsDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" System.out.printf(\"Okay, I\u0027ve marked this task as not done yet:\\n %s\\n\", tasks.get(index));","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" } else if (command.equals(\"delete\")){","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" int index \u003d Integer.parseInt(commandWords[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e tasks.size() - 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"I have removed the following task to your list:\\n \"","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" + tasks.get(index).toString() + \"\\nNow you have \" + (tasks.size() - 1)","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" + ((tasks.size() - 1) \u003d\u003d 1 ? \" task\" : \" tasks\")","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" + \" in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" else {","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" if (commandWordsArray.size() !\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(commandWords[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" add(todo, tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of a todo cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" if (commandWordsArray.size() !\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" String relevantData \u003d commandWords[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" String[] nameAndTime \u003d relevantData.split(\" /by \");","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(nameAndTime[0], nameAndTime[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" add(deadline, tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of a deadline cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" if (commandWordsArray.size() !\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" String relevantData \u003d commandWords[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" String[] nameAndTime \u003d relevantData.split(\" /from | /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(nameAndTime[0], nameAndTime[1], nameAndTime[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" add(event, tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of an event cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" throw new WrongCommandException(\"Sorry, I don\u0027t understand what that means.. \u0027^\u0027\");","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":" saveTaskList(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":" userInput \u003d input.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":" public static void saveTaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"marcellaantania"},"content":" String currentDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"marcellaantania"},"content":" Path dataDirPath \u003dPaths.get(currentDir, \"data\");","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"marcellaantania"},"content":" Path path \u003d Paths.get(currentDir, \"data\", \"thea.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"marcellaantania"},"content":" if(!Files.exists(dataDirPath)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"marcellaantania"},"content":" Files.createDirectories(dataDirPath);","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"marcellaantania"},"content":" Files.createFile(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"marcellaantania"},"content":" try (BufferedWriter bufferWriter \u003d Files.newBufferedWriter(path)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"marcellaantania"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"marcellaantania"},"content":" bufferWriter.write(task.toMemoryFormat());","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"marcellaantania"},"content":" bufferWriter.newLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"marcellaantania"},"content":" public static ArrayList\u003cTask\u003e retrieveTasks() throws Exception{","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"marcellaantania"},"content":" String currentDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"marcellaantania"},"content":" Path dataDirPath \u003dPaths.get(currentDir, \"data\");","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"marcellaantania"},"content":" Path path \u003d Paths.get(currentDir, \"data\", \"thea.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"marcellaantania"},"content":" if(!Files.exists(dataDirPath)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"marcellaantania"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"marcellaantania"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"marcellaantania"},"content":" String line;","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cTask\u003e retrievedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"marcellaantania"},"content":" Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"marcellaantania"},"content":" try (BufferedReader bufferReader \u003d Files.newBufferedReader(path)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"marcellaantania"},"content":" line \u003d bufferReader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"marcellaantania"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"marcellaantania"},"content":" String[] splitLine \u003d line.split(\" [|] \");","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"marcellaantania"},"content":" if (splitLine[0].equals(\"T\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"marcellaantania"},"content":" task \u003d new ToDo(splitLine[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"marcellaantania"},"content":" } else if (splitLine[0].equals(\"D\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"marcellaantania"},"content":" task \u003d new Deadline(splitLine[2], splitLine[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"marcellaantania"},"content":" } else if (splitLine[0].equals(\"E\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"marcellaantania"},"content":" task \u003d new Event(splitLine[2],splitLine[3], splitLine[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"marcellaantania"},"content":" throw new FileCorruptedException(\"Unexpected File Format Found. File might be corrupted.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"marcellaantania"},"content":" if (splitLine[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"marcellaantania"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"marcellaantania"},"content":" retrievedTasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"marcellaantania"},"content":" line \u003d bufferReader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"marcellaantania"},"content":" return retrievedTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"marcellaantania"},"content":" public static void greet() {","lastModifiedDate":"2023-08-23"},{"lineNumber":160,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"Hello! I\u0027m Thea •ᴗ•\\nHow can I help you?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":162,"author":{"gitId":"marcellaantania"},"content":" public static void exit() {","lastModifiedDate":"2023-08-23"},{"lineNumber":163,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"I hope I made your day easier with my service. See you again! \u003eᴗ\u003c\");","lastModifiedDate":"2023-08-23"},{"lineNumber":164,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":165,"author":{"gitId":"marcellaantania"},"content":" public static void add(Task task, ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-23"},{"lineNumber":166,"author":{"gitId":"marcellaantania"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":167,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"I have added the following task to your list:\\n \"","lastModifiedDate":"2023-08-24"},{"lineNumber":168,"author":{"gitId":"marcellaantania"},"content":" + task.toString() + \"\\nNow you have \" + tasks.size()","lastModifiedDate":"2023-08-24"},{"lineNumber":169,"author":{"gitId":"marcellaantania"},"content":" + (tasks.size() \u003d\u003d 1 ? \" task\" : \" tasks\")","lastModifiedDate":"2023-08-24"},{"lineNumber":170,"author":{"gitId":"marcellaantania"},"content":" + \" in the list. You can do this!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":171,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":172,"author":{"gitId":"marcellaantania"},"content":" public static void printList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-23"},{"lineNumber":173,"author":{"gitId":"marcellaantania"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-23"},{"lineNumber":175,"author":{"gitId":"marcellaantania"},"content":" System.out.printf(\"%d. %s%n\", i + 1, tasks.get(i));","lastModifiedDate":"2023-08-23"},{"lineNumber":176,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":177,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"Yay! You have no tasks in your list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":181,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"marcellaantania":181}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":" public ToDo(String taskName) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"T | %s | %s\", (super.isDone ? \"1\" : \"0\"), super.taskName);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[T][%s] %s\", (super.isDone ? \"X\" : \" \"), super.taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":15}},{"path":"src/main/java/WrongCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"public class WrongCommandException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":" public WrongCommandException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":5}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"todo read a book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"todo sweep the floor","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"deadline CS2103 iP /by tonight","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"event workshop /from Monday 1pm /to 3pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"unmark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":11}},{"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":"marcellaantania"},"content":"if not exist C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin mkdir C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin","lastModifiedDate":"2023-08-24"},{"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":"marcellaantania"},"content":"javac -cp C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\src\\main\\java -Xlint:none -d C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\src\\main\\java\\*.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":"marcellaantania"},"content":"java -classpath C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin Thea \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"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"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":"pause","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":5,"-":18}}] +[{"path":"data/thea.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"T | 1 | buy gift for mom","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"D | 0 | cs2103 ip | 2023-09-03 23:59","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"E | 1 | career fair | 2023-08-29 13:00 | 2023-08-30 17:00","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"marcellaantania":3}},{"path":"src/main/java/thea/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":" String taskType;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" Task task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" public AddCommand(String taskType, Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" ui.taskAdd(task, tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":18}},{"path":"src/main/java/thea/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":" boolean isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" public Command(boolean isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":9}},{"path":"src/main/java/thea/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime dueDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" public Deadline(String taskName, String dueDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDay \u003d dueDate.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinute \u003d dueDate.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" this.dueDate \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDay[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[2]),","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"D | %s | %s | %s\", (super.isDone ? \"1\" : \"0\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" super.taskName, this.dueDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[D][%s] %s (by: %s)\", (super.isDone ? \"X\" : \" \"), super.taskName,","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" this.dueDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":29}},{"path":"src/main/java/thea/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" ui.taskDelete(tasks.get(this.index), tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" } catch (java.lang.IndexOutOfBoundsException e){","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" tasks.delete(this.index);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":24}},{"path":"src/main/java/thea/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class EmptyDescriptionException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" public EmptyDescriptionException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":7}},{"path":"src/main/java/thea/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime from;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime to;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" public Event(String taskName, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayFrom \u003d from.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteFrom \u003d from.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayTo \u003d to.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteTo \u003d to.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" this.from \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDayFrom[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[2]),","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" this.to \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDayTo[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[2]),","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"E | %s | %s | %s | %s\", (super.isDone ? \"1\" : \"0\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" super.taskName, this.from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")),","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" this.to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[E][%s] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" (super.isDone ? \"X\" : \" \"), super.taskName,","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")),","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":41}},{"path":"src/main/java/thea/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" super(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" ui.exit();","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":14}},{"path":"src/main/java/thea/FileCorruptedException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class FileCorruptedException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" public FileCorruptedException(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"marcellaantania":7}},{"path":"src/main/java/thea/IndexOutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class IndexOutOfBoundsException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" public IndexOutOfBoundsException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":7}},{"path":"src/main/java/thea/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" tasks.mark(this.index);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" ui.taskMark(tasks.get(this.index));","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":20}},{"path":"src/main/java/thea/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" public static Command parse(String fullCommand) throws EmptyDescriptionException, WrongCommandException, WrongDateTimeFormatException {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" String[] commandWords \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cString\u003e commandWordsArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" Collections.addAll(commandWordsArray, commandWords);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" String command \u003d commandWords[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" switch (command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" case \"bye\":","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" case \"list\":","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" return new PrintListCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" int index \u003d Integer.parseInt(commandWords[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" int index \u003d Integer.parseInt(commandWords[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" int index \u003d Integer.parseInt(commandWords[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" case \"todo\":","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" if (commandWordsArray.size() !\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(commandWords[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" return new AddCommand(\"T\", todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of a todo cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" if (commandWordsArray.size() !\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" String relevantData \u003d commandWords[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" String[] nameAndTime \u003d relevantData.split(\" /by \");","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDay \u003d nameAndTime[1].split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinute \u003d nameAndTime[1].split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime dueDate \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDay[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[1]),","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[2]),","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" throw new WrongDateTimeFormatException(\"I cannot understand your due date \u0027^\u0027 \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" \"Please write your due date in format yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(nameAndTime[0], nameAndTime[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" return new AddCommand(\"D\", deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of a deadline cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" case \"event\":","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" if (commandWordsArray.size() !\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" String relevantData \u003d commandWords[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" String[] nameAndTime \u003d relevantData.split(\" /from | /to \");","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayFrom \u003d nameAndTime[1].split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteFrom \u003d nameAndTime[1].split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayTo \u003d nameAndTime[2].split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteTo \u003d nameAndTime[2].split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime from \u003d LocalDateTime.of(","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[1]),","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[2]),","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime to \u003d LocalDateTime.of(","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[1]),","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[2]),","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" throw new WrongDateTimeFormatException(\"I cannot understand your date and time \u0027^\u0027 \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" \"Please write your event date and time in format yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(nameAndTime[0], nameAndTime[1], nameAndTime[2]);","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" return new AddCommand(\"E\", event);","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of an event cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" throw new WrongCommandException(\"Sorry, I don\u0027t understand what that means.. \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":93}},{"path":"src/main/java/thea/PrintListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class PrintListCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" public PrintListCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" ui.printList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":13}},{"path":"src/main/java/thea/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" String fileName;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" public Storage(String fileName) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" this.fileName \u003d fileName;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws FileCorruptedException{","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" String currentDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" Path dataDirPath \u003d Paths.get(currentDir, \"data\");","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" Path path \u003d Paths.get(currentDir, \"data\", this.fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(dataDirPath)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" String line;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cTask\u003e retrievedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" Task task;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" try (BufferedReader bufferReader \u003d Files.newBufferedReader(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" line \u003d bufferReader.readLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" String[] splitLine \u003d line.split(\" [|] \");","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" if (splitLine[0].equals(\"T\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" task \u003d new ToDo(splitLine[2]);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" } else if (splitLine[0].equals(\"D\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" task \u003d new Deadline(splitLine[2], splitLine[3]);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" } else if (splitLine[0].equals(\"E\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" task \u003d new Event(splitLine[2],splitLine[3], splitLine[4]);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" throw new FileCorruptedException(\"Unexpected File Format Found. File might be corrupted.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" if (splitLine[1].equals(\"1\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" retrievedTasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" line \u003d bufferReader.readLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" return retrievedTasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" public void saveTaskList(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" String currentDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" Path dataDirPath \u003dPaths.get(currentDir, \"data\");","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" Path path \u003d Paths.get(currentDir, \"data\", this.fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" if(!Files.exists(dataDirPath)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" Files.createDirectories(dataDirPath);","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" Files.createFile(path);","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" try (BufferedWriter bufferWriter \u003d Files.newBufferedWriter(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" bufferWriter.write(tasks.get(i).toMemoryFormat());","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" bufferWriter.newLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":84}},{"path":"src/main/java/thea/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" final String taskName;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public void unmarkAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" public String getTaskName() {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" return this.taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" return this.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[%s] %s\", (this.isDone ? \"X\" : \" \"), this.taskName);","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"marcellaantania":32}},{"path":"src/main/java/thea/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cTask\u003e taskArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" public TaskList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public TaskList(ArrayList\u003cTask\u003e taskArrayList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList \u003d taskArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" return this.taskArrayList.isEmpty();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" public Task get(int i) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" return this.taskArrayList.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" public int size() {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" return this.taskArrayList.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" public void delete(int index) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e (this.size() - 1)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" public void mark(int index) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e (this.size() - 1)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.get(index).markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" public void unmark(int index) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e (this.size() - 1)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.get(index).unmarkAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":55}},{"path":"src/main/java/thea/Thea.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"public class Thea {","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" public Thea(String fileName) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" this.storage \u003d new Storage(fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" this.tasks \u003d new TaskList(storage.retrieveTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" } catch (FileCorruptedException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" ui.greet();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" String fullCommand \u003d ui.readNextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" isExit \u003d c.isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" } catch (EmptyDescriptionException | WrongCommandException","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" | WrongDateTimeFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" new Thea(\"thea.txt\").run();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"marcellaantania":37}},{"path":"src/main/java/thea/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" public ToDo(String taskName) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"T | %s | %s\", (super.isDone ? \"1\" : \"0\"), super.taskName);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[T][%s] %s\", (super.isDone ? \"X\" : \" \"), super.taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":17}},{"path":"src/main/java/thea/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" private final Scanner input;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" public Ui() {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" this.input \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" public void greet() {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"Hello! I\u0027m Thea •ᴗ•\\nHow can I help you?\");","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" public void exit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"I hope I made your day easier with my service. See you again! \u003eᴗ\u003c\");","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" public void taskMark(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" System.out.printf(\"Great job! ˊᗜˋ I\u0027ve marked this task as done:\\n %s\\n\", task);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" public void taskUnmark(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" System.out.printf(\"Okay, I\u0027ve marked this task as not done yet:\\n %s\\n\", task);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" public void printList(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" System.out.printf(\"%d. %s%n\", i + 1, tasks.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"Yay! You have no tasks in your list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" public void taskAdd(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"I have added the following task to your list:\\n \"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" + task.toString() + \"\\nNow you have \" + tasks.size()","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" + (tasks.size() \u003d\u003d 1 ? \" task\" : \" tasks\")","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" + \" in the list. You can do this!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" System.out.println(errorMessage);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" public String readNextLine() {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" return input.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" public void taskDelete(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"I have removed the following task to your list:\\n \"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" + task.toString() + \"\\nNow you have \" + (tasks.size() - 1)","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" + ((tasks.size() - 1) \u003d\u003d 1 ? \" task\" : \" tasks\")","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" + \" in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":58}},{"path":"src/main/java/thea/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" tasks.unmark(this.index);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" ui.taskUnmark(tasks.get(this.index));","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":20}},{"path":"src/main/java/thea/WrongCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class WrongCommandException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" public WrongCommandException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":7}},{"path":"src/main/java/thea/WrongDateTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class WrongDateTimeFormatException extends Exception{","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" public WrongDateTimeFormatException(String errorMessage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":7}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"todo read a book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"todo sweep the floor","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"deadline CS2103 iP /by tonight","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"event workshop /from Monday 1pm /to 3pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"unmark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":11}},{"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":"marcellaantania"},"content":"if not exist C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin mkdir C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin","lastModifiedDate":"2023-08-24"},{"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":"marcellaantania"},"content":"javac -cp C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\src\\main\\java -Xlint:none -d C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\src\\main\\java\\*.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":"marcellaantania"},"content":"java -classpath C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin Thea \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"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"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":"pause","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":5,"-":18}}] diff --git a/marcellaantania_ip_master/commits.json b/marcellaantania_ip_master/commits.json index 5c8f9cef..1439be1c 100644 --- a/marcellaantania_ip_master/commits.json +++ b/marcellaantania_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"marcellaantania":[{"date":"2023-08-23","commitResults":[{"hash":"be790b0b5a8662742103ea027706491d22bdd0ae","isMergeCommit":false,"messageTitle":"Name change from Duke to Thea, changed greeting and exiting message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":10}}},{"hash":"dd21a96ab13978cc3a187a9de09ede3f4e024a72","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"620b910d4ea3368ecedc82168ff908694a434d46","isMergeCommit":false,"messageTitle":"echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"f14d6fe2740b5b39d0f1c53bb4ae341bff961774","isMergeCommit":false,"messageTitle":"add, list function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}},{"hash":"3063e4d93a1dcf3e3b2746f17be737647cfe7544","isMergeCommit":false,"messageTitle":"added Task class","messageBody":"","tags":["A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"235c93c60d1777bcb486c9ffd7c33575d14fe244","isMergeCommit":false,"messageTitle":"integrate Thea with Task class, add mark/unmark function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":8}}}]},{"date":"2023-08-24","commitResults":[{"hash":"5f22824c2452d21e98e4d2e0706f418e7edaa12c","isMergeCommit":false,"messageTitle":"Made three different subclasses of Task (ToDo, Deadline, Event)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"916a1b37f8b987ebf5d4fd20e4fe03414ae31ee4","isMergeCommit":false,"messageTitle":"Fix typo","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"e8c672585d45486a7de85221be114594eb7443d5","isMergeCommit":false,"messageTitle":"change access modifier","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8424b3e2667c0f6f74557e2f0aaac5546c23586c","isMergeCommit":false,"messageTitle":"update Thea to support 3 types of tasks: ToDo, Deadline and Event","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"7ae0c237a99a3a323e7bb2c651af85a696af34fa","isMergeCommit":false,"messageTitle":"remove extra nextline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"66786787dd2182a50c0e2a56349edf88295713f9","isMergeCommit":false,"messageTitle":"remove emoji that cannot be run","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"1b45aa47f2bfa252dcb7f4c8e538451cc4a93b62","isMergeCommit":false,"messageTitle":"Automated Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"bat":{"insertions":5,"deletions":3}}},{"hash":"af87e8f9f002220a648d30a51db13cb628e30d64","isMergeCommit":false,"messageTitle":"Thea-specific exceptions","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"8f639b10622b36fa74bed2f5ba3b12dcf81f2a7f","isMergeCommit":false,"messageTitle":"Update code to throw three types of thea-specific exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":16}}},{"hash":"99c4e21e2f81aeed66f57c5e004d5444f126662d","isMergeCommit":false,"messageTitle":"Add delete function","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3db93ac8e369ff5ec267ff426ef874dce707a5b3","isMergeCommit":false,"messageTitle":"Read file functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":24,"deletions":2}}},{"hash":"44f47829fb1f1c0e7a0eea3c69c6f934c5648d2d","isMergeCommit":false,"messageTitle":"Add an exception for unexpected file format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"dfa44623d9dca43361218c93e558563b7ed1f271","isMergeCommit":false,"messageTitle":"Update Thea to retrieve data as tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":20,"deletions":5}}},{"hash":"fa7d0c58dba6baca0a7b633e02ede75c72003427","isMergeCommit":false,"messageTitle":"Write tasks to hard disk, not fully functional yet","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":3}}},{"hash":"48aa2c9a928105f625a001a6e563c2b20a5bd697","isMergeCommit":false,"messageTitle":"Update Thea and subclasses of Task to support task saving","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":55,"deletions":30}}},{"hash":"3ad456a6cb5d422e9dd6de1e0ab399abd285a62d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"marcellaantania":{"java":283,"md":0,"fxml":0,"sh":0,"bat":5,"gradle":0,"txt":14}},"authorContributionVariance":{"marcellaantania":4617.168},"authorDisplayNameMap":{"marcellaantania":"CS2103-F13-2 MARC.. TAN"}} +{"authorDailyContributionsMap":{"marcellaantania":[{"date":"2023-08-23","commitResults":[{"hash":"be790b0b5a8662742103ea027706491d22bdd0ae","isMergeCommit":false,"messageTitle":"Name change from Duke to Thea, changed greeting and exiting message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":10}}},{"hash":"dd21a96ab13978cc3a187a9de09ede3f4e024a72","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"620b910d4ea3368ecedc82168ff908694a434d46","isMergeCommit":false,"messageTitle":"echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"f14d6fe2740b5b39d0f1c53bb4ae341bff961774","isMergeCommit":false,"messageTitle":"add, list function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}},{"hash":"3063e4d93a1dcf3e3b2746f17be737647cfe7544","isMergeCommit":false,"messageTitle":"added Task class","messageBody":"","tags":["A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"235c93c60d1777bcb486c9ffd7c33575d14fe244","isMergeCommit":false,"messageTitle":"integrate Thea with Task class, add mark/unmark function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":8}}}]},{"date":"2023-08-24","commitResults":[{"hash":"5f22824c2452d21e98e4d2e0706f418e7edaa12c","isMergeCommit":false,"messageTitle":"Made three different subclasses of Task (ToDo, Deadline, Event)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"916a1b37f8b987ebf5d4fd20e4fe03414ae31ee4","isMergeCommit":false,"messageTitle":"Fix typo","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"e8c672585d45486a7de85221be114594eb7443d5","isMergeCommit":false,"messageTitle":"change access modifier","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8424b3e2667c0f6f74557e2f0aaac5546c23586c","isMergeCommit":false,"messageTitle":"update Thea to support 3 types of tasks: ToDo, Deadline and Event","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"7ae0c237a99a3a323e7bb2c651af85a696af34fa","isMergeCommit":false,"messageTitle":"remove extra nextline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"66786787dd2182a50c0e2a56349edf88295713f9","isMergeCommit":false,"messageTitle":"remove emoji that cannot be run","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"1b45aa47f2bfa252dcb7f4c8e538451cc4a93b62","isMergeCommit":false,"messageTitle":"Automated Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"bat":{"insertions":5,"deletions":3}}},{"hash":"af87e8f9f002220a648d30a51db13cb628e30d64","isMergeCommit":false,"messageTitle":"Thea-specific exceptions","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"8f639b10622b36fa74bed2f5ba3b12dcf81f2a7f","isMergeCommit":false,"messageTitle":"Update code to throw three types of thea-specific exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":16}}},{"hash":"99c4e21e2f81aeed66f57c5e004d5444f126662d","isMergeCommit":false,"messageTitle":"Add delete function","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3db93ac8e369ff5ec267ff426ef874dce707a5b3","isMergeCommit":false,"messageTitle":"Read file functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":24,"deletions":2}}},{"hash":"44f47829fb1f1c0e7a0eea3c69c6f934c5648d2d","isMergeCommit":false,"messageTitle":"Add an exception for unexpected file format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"dfa44623d9dca43361218c93e558563b7ed1f271","isMergeCommit":false,"messageTitle":"Update Thea to retrieve data as tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":20,"deletions":5}}},{"hash":"fa7d0c58dba6baca0a7b633e02ede75c72003427","isMergeCommit":false,"messageTitle":"Write tasks to hard disk, not fully functional yet","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":3}}},{"hash":"48aa2c9a928105f625a001a6e563c2b20a5bd697","isMergeCommit":false,"messageTitle":"Update Thea and subclasses of Task to support task saving","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":55,"deletions":30}}},{"hash":"3ad456a6cb5d422e9dd6de1e0ab399abd285a62d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"4a106d08fa46722fd26cfcb57da8165a69e9298b","isMergeCommit":false,"messageTitle":"Save deadline duedates and event timings as LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":48,"deletions":13}}},{"hash":"804274a848b68ce5f21568f4b12bf5513caf818c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"d0680275d3c9e53e73d38e37afc7ac1c5332fe9c","isMergeCommit":false,"messageTitle":"Add a new exception to handle wrong date and time format from the user input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"fca294fc934f44b33ccf602ea1e1df0e3c753c69","isMergeCommit":false,"messageTitle":"Extract classes from the main Thea class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":192,"deletions":0}}},{"hash":"698ef877c307836fa951fa29a089cd0dfcff2be9","isMergeCommit":false,"messageTitle":"Add parser and command class to understand user input and return them as commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":197,"deletions":0}}},{"hash":"aca6cabdcc9061b0443c0af1da0c6852f6c08fe1","isMergeCommit":false,"messageTitle":"Modify Thea class to use the extracted classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":175}}},{"hash":"c8c592023ebc640d743c7b73349ac4b6b031e835","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"09e640b30b0607e8511ec46025c596062cf8dc31","isMergeCommit":false,"messageTitle":"Package everything to the package \"thea\"","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":562,"deletions":524}}},{"hash":"0775ce5a30c17f4d8ce9b7ece9f941dcfadef4ba","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"marcellaantania":{"java":599,"md":0,"fxml":0,"sh":0,"bat":5,"gradle":0,"txt":14}},"authorContributionVariance":{"marcellaantania":139168.62},"authorDisplayNameMap":{"marcellaantania":"CS2103-F13-2 MARC.. TAN"}} diff --git a/mingyuanc_ip_master/authorship.json b/mingyuanc_ip_master/authorship.json index 56924658..712ac351 100644 --- a/mingyuanc_ip_master/authorship.json +++ b/mingyuanc_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"instructions on how to use it.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" first)","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":14,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":15,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" like the below as the output:","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"mingyuanc":10,"-":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":"mingyuanc"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-30"},{"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":"-"},"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":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":"dependencies {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":"test {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"mingyuanc":14,"-":42}},{"path":"data/testData.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"TODO#test#0","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"TODO#test1#1","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"DEADLINE#test2#0#2023-10-01T23:59","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"DEADLINE#test3#0#2024-01-01T12:00","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"DEADLINE#test4#0#2024-05-05T12:00","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"EVENT#test5#1#2023-05-07T03:03#2023-05-07T03:05","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mingyuanc":6}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" * A task manager that initialise a quack instance","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"public class Duke {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * Instance handling all the user interface","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * Instance handling the tasks state","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" * Path to the storage, default is ./data/data.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * Construct a new Duke object which uses filePath as the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" * @param filePath - path to the storage file","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" this.ui.welcomeMessage();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" // try to establish a connection to the file","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" // set this.storage to null if not possible","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" this.ui.errorMessage(","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" \"has some internal problem and is unable to help you today, please contact quacks mum\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" this.ui.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" this.storage \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" } catch (DukeBadInputException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" this.ui.errorMessage(filePath + \" is not a text file, please provide a file!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" this.storage \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" // read from storage, throws an error when unable to rewrite to the storage file","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" if (this.storage !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" // check for corrupted files","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" if (this.taskList.loadTasks(this.storage.readFile())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" this.ui.unexpectedError(\"Some task are corrupted, attempting to recover uncorrupted tasks\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" if (!this.storage.rewriteAll(this.taskList.getAllTask())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" this.ui.unexpectedError(","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" \"not all tasks were successfully written, please contact my mother :( \");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" this.ui.unexpectedError(\"error when rewriting to storage: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" * Entry point of the program","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" * @param args System arguments, should be empty","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-21"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" new Duke(\"data/data.txt\").run();","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" * Start the running the quack program, will not run if storage is null","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" private void run() {","lastModifiedDate":"2023-08-22"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" if (this.storage \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" this.ui.goodbyeMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" // Prints out the current items in the list","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" new ListCommand().execute(this.taskList, this.ui, this.storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" } catch (DukeBadInputException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" this.ui.unexpectedError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" // start to collect commands","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" this.ui.lineBreak();","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" this.ui.println(\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" this.collectCommand();","lastModifiedDate":"2023-08-21"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" this.storage.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" // Goodbye Message","lastModifiedDate":"2023-08-21"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":" this.ui.goodbyeMessage();","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":" * Handles the collection and execution of the command until the exit command is given","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":" private void collectCommand() {","lastModifiedDate":"2023-08-22"},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" while (true) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":" String input \u003d this.ui.readCommand().trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":" if (input.isBlank()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":" continue;","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":" if (command.isExit()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":" this.ui.lineBreak();","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":" command.execute(this.taskList, this.ui, this.storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"mingyuanc"},"content":" } catch (DukeBadInputException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":" this.ui.errorMessage(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" this.ui.errorMessage(e.getMessage()","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":" + \", quack only understand numbers, please input a numeric value!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"mingyuanc"},"content":" this.ui.errorMessage(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"mingyuanc"},"content":" this.ui.println(","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"mingyuanc"},"content":" \"Quack only understands date in this format: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"mingyuanc"},"content":" + \"YYYY-MM-DD HH:MM, do give the hours in 24hours format\");","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":131,"author":{"gitId":"mingyuanc"},"content":" this.ui.lineBreak();","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"mingyuanc"},"content":" this.ui.println(\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":134,"author":{"gitId":"mingyuanc"},"content":" this.ui.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":136,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":137,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"mingyuanc":137}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"import duke.command.HelpCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"import duke.command.TodoCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"import duke.command.UnrecognisedCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeLoadingException;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":"import duke.task.DeadlineTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":"import duke.task.EventTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":"import duke.task.TodoTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" * Handles making sense of the user command and output it in a programme","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * readable way","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":"public class Parser {","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" * Formatter to parse date time","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" private static final DateTimeFormatter PARSE_FORMAT \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * Factory method to parse the input and output the respective command instance","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" * @param input - the input string that needs to be parsed","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" * @return a respective subclass of the command that can be executed","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be parsed properly","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" * @throws NumberFormatException - if the input cannot be converted to an int","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" public static Command parse(String input) throws DukeBadInputException, NumberFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" HashMap\u003cString, LocalDateTime\u003e flagMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" String desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" switch (splitInput[0].toUpperCase()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" case \"BYE\":","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" case \"HELP\":","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" return new HelpCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" case \"LIST\":","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" case \"MARK\":","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" return new MarkCommand(true, findIndex(splitInput));","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" case \"UNMARK\":","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" return new MarkCommand(false, findIndex(splitInput));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" case \"DELETE\":","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" return new DeleteCommand(findIndex(splitInput));","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" case \"FIND\":","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" \"Quack doesn\u0027t understand an empty find query, please provide one!!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" // join the string to find the query","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" return new FindCommand(String.join(\" \", Arrays.copyOfRange(splitInput, 1, splitInput.length)));","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" case \"TODO\":","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" \"Quack doesn\u0027t understand an empty todo description, please provide one!!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" // join the string to find the description","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" return new TodoCommand(String.join(\" \", Arrays.copyOfRange(splitInput, 1, splitInput.length)));","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" case \"DEADLINE\":","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" desc \u003d Parser.findFlags(flagMap, splitInput, \"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" return new DeadlineCommand(flagMap.get(\"/by\"), desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" case \"EVENT\":","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" desc \u003d Parser.findFlags(flagMap, splitInput, \"/from\", \"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" return new EventCommand(flagMap.get(\"/from\"), flagMap.get(\"/to\"), desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" default:","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" return new UnrecognisedCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" * Load task from storage","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" * @param storedStr - the string representing the task from storage","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" * @return the instance of the class","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeLoadingException if there is an issue loading the task","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" * @throws DateTimeParseException if there is an issue parsing the date","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" public static Task fromStorage(String storedStr) throws DukeLoadingException, DateTimeParseException {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" String[] content \u003d storedStr.split(Task.SEP);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":" if (content.length \u003c 3 || content.length \u003e 6) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" throw new DukeLoadingException(storedStr + \", this command cannot be read\");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":" boolean isCompleted \u003d content[2].equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":" switch (content[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":" case \"TODO\":","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" return new TodoTask(content[1], isCompleted);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":" case \"DEADLINE\":","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":" if (content.length !\u003d 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":" throw new DukeLoadingException(storedStr + \", this command cannot be read\");","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" return new DeadlineTask(LocalDateTime.parse(content[3]), content[1], isCompleted);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":" case \"EVENT\":","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":" if (content.length !\u003d 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":" throw new DukeLoadingException(storedStr + \", this command cannot be read\");","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":" return new EventTask(LocalDateTime.parse(content[3]),","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":" LocalDateTime.parse(content[4]), content[1], isCompleted);","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"mingyuanc"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":" throw new DukeLoadingException(storedStr + \", this command cannot be read\");","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"mingyuanc"},"content":" * Find the index from the split input string","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"mingyuanc"},"content":" * @param splitInput - the split input string","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"mingyuanc"},"content":" * @return the index","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException throws an error if it is a negative number","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"mingyuanc"},"content":" * @throws NumberFormatException throws an error if it is not a number","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"mingyuanc"},"content":" private static int findIndex(String[] splitInput) throws DukeBadInputException, NumberFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"mingyuanc"},"content":" if (splitInput.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":135,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"mingyuanc"},"content":" String.format(\"Quack requires exactly one number after the %s command\", splitInput[0]));","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":138,"author":{"gitId":"mingyuanc"},"content":" int ret \u003d Integer.parseInt(splitInput[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"mingyuanc"},"content":" if (ret \u003c 0) {","lastModifiedDate":"2023-08-22"},{"lineNumber":140,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"mingyuanc"},"content":" \"Quack requires a positive number to help you manage tasks!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":142,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":143,"author":{"gitId":"mingyuanc"},"content":" return ret;","lastModifiedDate":"2023-08-22"},{"lineNumber":144,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":145,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":146,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":147,"author":{"gitId":"mingyuanc"},"content":" * function to find the flags and update both the flags and param field","lastModifiedDate":"2023-08-22"},{"lineNumber":148,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":149,"author":{"gitId":"mingyuanc"},"content":" * @param flagMap - the place to store the flag","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"mingyuanc"},"content":" * @param splitInputs - input string that has been split into words","lastModifiedDate":"2023-08-22"},{"lineNumber":151,"author":{"gitId":"mingyuanc"},"content":" * @param flags - the flags that needs to be found","lastModifiedDate":"2023-08-22"},{"lineNumber":152,"author":{"gitId":"mingyuanc"},"content":" * @return the desc of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the flags cannot be found or without a","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"mingyuanc"},"content":" * description","lastModifiedDate":"2023-08-22"},{"lineNumber":155,"author":{"gitId":"mingyuanc"},"content":" * @throws DateTimeParseException - if the value cannot be parsed","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":157,"author":{"gitId":"mingyuanc"},"content":" private static String findFlags(HashMap\u003cString, LocalDateTime\u003e flagMap,","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"mingyuanc"},"content":" String[] splitInputs, String... flags)","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"mingyuanc"},"content":" throws DukeBadInputException, DateTimeParseException {","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":161,"author":{"gitId":"mingyuanc"},"content":" int[] flagIndex \u003d Parser.find(splitInputs, flags);","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"mingyuanc"},"content":" String desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":164,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 0; i \u003c flagIndex.length - 1; i++) {","lastModifiedDate":"2023-08-22"},{"lineNumber":165,"author":{"gitId":"mingyuanc"},"content":" // Check for the presence of the flag","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"mingyuanc"},"content":" if (flagIndex[i] \u003d\u003d -1) {","lastModifiedDate":"2023-08-22"},{"lineNumber":167,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"mingyuanc"},"content":" \"Quack cant find the required \" + flags[i] + \" flags, please provide quack with one please\");","lastModifiedDate":"2023-08-22"},{"lineNumber":169,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":170,"author":{"gitId":"mingyuanc"},"content":" if (flagIndex[i + 1] \u003d\u003d -1) {","lastModifiedDate":"2023-08-22"},{"lineNumber":171,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"mingyuanc"},"content":" \"Quack cant find the required \" + flags[i + 1]","lastModifiedDate":"2023-08-22"},{"lineNumber":173,"author":{"gitId":"mingyuanc"},"content":" + \" flags, please provide quack with one please\");","lastModifiedDate":"2023-08-22"},{"lineNumber":174,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":175,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":176,"author":{"gitId":"mingyuanc"},"content":" // Check for the description of flag","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"mingyuanc"},"content":" String value \u003d String.join(\" \", Arrays.copyOfRange(splitInputs, flagIndex[i] + 1, flagIndex[i + 1]));","lastModifiedDate":"2023-08-22"},{"lineNumber":178,"author":{"gitId":"mingyuanc"},"content":" if (value.isBlank()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":179,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"mingyuanc"},"content":" \"Please provide quack a description for the \" + flags[i] + \" flag\");","lastModifiedDate":"2023-08-22"},{"lineNumber":181,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":182,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"mingyuanc"},"content":" // check the format of the flag","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"mingyuanc"},"content":" LocalDateTime val \u003d LocalDateTime.parse(value, Parser.PARSE_FORMAT);","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"mingyuanc"},"content":" flagMap.put(splitInputs[flagIndex[i]], val);","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":187,"author":{"gitId":"mingyuanc"},"content":" // Check for a valid description","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"mingyuanc"},"content":" desc \u003d String.join(\" \", Arrays.copyOfRange(splitInputs, 1, flagIndex[0]));","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"mingyuanc"},"content":" if (desc.isBlank()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"mingyuanc"},"content":" \"Quack doesn\u0027t understand an empty description, please provide one!!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"mingyuanc"},"content":" return desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":195,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":196,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":197,"author":{"gitId":"mingyuanc"},"content":" * Finds the required flags in the array of strings","lastModifiedDate":"2023-08-22"},{"lineNumber":198,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":199,"author":{"gitId":"mingyuanc"},"content":" * @param arr - the array of strings that you want to find the flags from","lastModifiedDate":"2023-08-22"},{"lineNumber":200,"author":{"gitId":"mingyuanc"},"content":" * @param items - the array of flags you want to find from the array","lastModifiedDate":"2023-08-22"},{"lineNumber":201,"author":{"gitId":"mingyuanc"},"content":" * @return an array of the index of the flags","lastModifiedDate":"2023-08-22"},{"lineNumber":202,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the flags cannot be found or without a","lastModifiedDate":"2023-08-29"},{"lineNumber":203,"author":{"gitId":"mingyuanc"},"content":" * description","lastModifiedDate":"2023-08-22"},{"lineNumber":204,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":205,"author":{"gitId":"mingyuanc"},"content":" private static int[] find(String[] arr, String[] items) throws DukeBadInputException {","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"mingyuanc"},"content":" int[] ret \u003d new int[items.length + 1];","lastModifiedDate":"2023-08-22"},{"lineNumber":207,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":208,"author":{"gitId":"mingyuanc"},"content":" // initialise values, these values will contain the index","lastModifiedDate":"2023-08-29"},{"lineNumber":209,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 0; i \u003c items.length + 1; i++) {","lastModifiedDate":"2023-08-22"},{"lineNumber":210,"author":{"gitId":"mingyuanc"},"content":" // set last item as the length to demarcate the end","lastModifiedDate":"2023-08-29"},{"lineNumber":211,"author":{"gitId":"mingyuanc"},"content":" if (i \u003d\u003d items.length) {","lastModifiedDate":"2023-08-22"},{"lineNumber":212,"author":{"gitId":"mingyuanc"},"content":" ret[i] \u003d arr.length;","lastModifiedDate":"2023-08-22"},{"lineNumber":213,"author":{"gitId":"mingyuanc"},"content":" continue;","lastModifiedDate":"2023-08-22"},{"lineNumber":214,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":215,"author":{"gitId":"mingyuanc"},"content":" ret[i] \u003d -1;","lastModifiedDate":"2023-08-22"},{"lineNumber":216,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":217,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":218,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 0; i \u003c arr.length; i++) {","lastModifiedDate":"2023-08-22"},{"lineNumber":219,"author":{"gitId":"mingyuanc"},"content":" for (int j \u003d 0; j \u003c items.length; j++) {","lastModifiedDate":"2023-08-22"},{"lineNumber":220,"author":{"gitId":"mingyuanc"},"content":" if (arr[i].equals(items[j])) {","lastModifiedDate":"2023-08-22"},{"lineNumber":221,"author":{"gitId":"mingyuanc"},"content":" if (ret[j] !\u003d -1) {","lastModifiedDate":"2023-08-22"},{"lineNumber":222,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-29"},{"lineNumber":223,"author":{"gitId":"mingyuanc"},"content":" \"There are too many of the \" + items[j] + \" flag, please just provide one\");","lastModifiedDate":"2023-08-22"},{"lineNumber":224,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":225,"author":{"gitId":"mingyuanc"},"content":" ret[j] \u003d i;","lastModifiedDate":"2023-08-22"},{"lineNumber":226,"author":{"gitId":"mingyuanc"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":227,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":228,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":229,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":230,"author":{"gitId":"mingyuanc"},"content":" return ret;","lastModifiedDate":"2023-08-22"},{"lineNumber":231,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":232,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"mingyuanc":232}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import java.nio.file.StandardOpenOption;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * Handles the loading of tasks from the file and saving tasks in the file","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" * Path of the storage file","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" private Path path;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" * The input string that points to the file","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" * Writer instance","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" private BufferedWriter writer;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * Constructs a new instance of a duke.Storage object that reads and write to a specific file","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" * @param fileName - the file which your reading/writing to","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" * @throws IOException - thrown when there is an IOException","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - thrown when the input provided does not point to a file","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" public Storage(String fileName) throws IOException, DukeBadInputException {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" this.input \u003d fileName;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" String home \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" this.path \u003d Paths.get(home, fileName.split(\"/\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" this.checkFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" this.writer \u003d Files.newBufferedWriter(this.path, StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" * Ensures that default data storage is present","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" * @throws IOException if there is an IOException","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException if the path does not lead to a file","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" private void checkFile() throws IOException, DukeBadInputException {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" String[] dir \u003d this.input.split(\"/\");","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" String home \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" if (!this.input.endsWith(\".txt\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(this.path.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" if (!Files.exists(this.path)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" // Handles folder not existing","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 1; i \u003c dir.length; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" Path tmp \u003d Paths.get(home, Arrays.copyOfRange(dir, 0, i));","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" if (!Files.exists(tmp)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" Files.createDirectories(tmp);","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" // handles file not existing","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" Files.createFile(this.path);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" * Reads and parse the storage file","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" * @return a duke.Parser array storing the parsed input","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" * @throws IOException thrown if the file cannot be open or read","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" public List\u003cString\u003e readFile() throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" BufferedReader reader \u003d Files.newBufferedReader(this.path);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" List\u003cString\u003e ret \u003d reader.lines().collect(Collectors.toList());","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" reader.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" return ret;","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" * Writes the given line to storage","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" * @param input string that is you want to write","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" * @return true if successfully written","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" public boolean writeToFile(String input) {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" this.writer.append(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":" this.writer.newLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":" * Rewrites the storage to contain all the current tasks stored in memory","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":" * @param tasks - list of task to be written in","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":" * @return true if carried out successfully","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":" * @throws IOException if there is an IOException","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":" public boolean rewriteAll(Task[] tasks) throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":" this.writer.flush();","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"mingyuanc"},"content":" BufferedWriter tmpWriter \u003d Files.newBufferedWriter(this.path,","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":" StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING);","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":" boolean isSuccessful \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":" // rewrite for each","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"mingyuanc"},"content":" tmpWriter.write(t.getStored());","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"mingyuanc"},"content":" tmpWriter.newLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"mingyuanc"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"mingyuanc"},"content":" isSuccessful \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"mingyuanc"},"content":" tmpWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"mingyuanc"},"content":" return isSuccessful;","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"mingyuanc"},"content":" * Close the connection to the storage and deallocate all resources","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"mingyuanc"},"content":" public void close() {","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"mingyuanc"},"content":" this.writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"mingyuanc"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"mingyuanc":148}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeLoadingException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" * Manages the operation on the tasks","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * Stores all the task","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * construct a new empty task list","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" * Loads the list of task from the storage into the task list instance","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * @param storedInput - the list of task obtained from storage","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" * @return true if all task loaded successfully else false","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" public boolean loadTasks(List\u003cString\u003e storedInput) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" // parse and store data while looking out for data corruption","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" boolean isCorrupted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" for (String s : storedInput) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" Task newTask \u003d Parser.fromStorage(s);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" this.tasks.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" } catch (DukeLoadingException | DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" isCorrupted \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" return isCorrupted;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" * returns the current task list length","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" * @return task list length","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" public int length() {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" * Adds the given task into memory","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" * @param task - the task being added","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" * remove the given task from memory","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" * @param index - the index of the task being removed","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" * @return the task that was removed","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" public Task remove(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" return this.tasks.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" * returns the element at the index","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" * @param index - index of the element","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" * @return the element at the index","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" * returns all the tasks currently stored","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" * @return an array of Task","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" public Task[] getAllTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" return this.tasks.toArray(new Task[this.length()]);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"mingyuanc":92}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":" * Handles the interaction with user","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" * Default tab spacing","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" private static final String TAB \u003d \" \";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" * Default Help Message","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" private static final String HELP_MESSAGE \u003d \"Quack understands these commands: list, mark, \"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" + \"unmark, delete, todo, deadline, event\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" + TAB + \"For mark/unmark/delete please provide a number after, like such mark 2\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" + TAB + \"deadline requires the /by keyword and event requires the /from and /to keyword\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" + TAB + \"Please provide a valid date and time after the keyword with the following format:\"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" + \" YYYY-MM-DD HH:MM\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" * Default Welcome Message","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" private static final String WELCOME_MESSAGE \u003d TAB + \"Quack Quack! I am a duck named Quack\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" + TAB + \"Quack will remember the task you give quack!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" + TAB + Ui.HELP_MESSAGE;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" * Default Exit Message","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" private static final String GOODBYE_MESSAGE \u003d TAB + \"Quack Quack! Quack hopes to see you again soon!\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" * Line Break","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" private static final String LINE_BREAK \u003d \" ____________________________________________________________\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" * App LOGO","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" private static final String LOGO \u003d \"\\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██████████░░░░░░░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░████░░██████████░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░░░░░██░░░░░░░░░░██░░░░░░░░████░░██▒▒▒▒▒▒██░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░░░██░░██░░░░░░░░██░░░░░░░░░░░░░░██▒▒▒▒▒▒██░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░░░██░░░░██░░░░░░██░░░░░░░░░░░░░░████████░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░██░░░░░░░░██░░░░░░██░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░██░░░░░░░░████████████░░░░░░░░██░░░░░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░██░░░░░░░░██░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░░░░░██████░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░░░░░░░░░░░████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" + \"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\";","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" * scanner instance, default to scan from System.in","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" * Constructs a new UI instance","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" public Ui() {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" * Close all relevant resources","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" public void close() {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" this.scanner.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" * Reads a line of command to be parsed","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" * @return the line of command read","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" * Prints the string to standard out with some modification","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" * @param string - the string you wish to print","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" public void println(String string) {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" if (string.startsWith(Ui.LINE_BREAK)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" System.out.println(string);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" return;","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":" System.out.println(Ui.TAB + string);","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":" * Prints the default welcome message","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":" public void welcomeMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" this.println(Ui.LOGO);","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":" this.println(Ui.LINE_BREAK + Ui.WELCOME_MESSAGE);","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":" System.out.println();","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":" this.println(\"You can use the help command should be confused!!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":" this.println(Ui.LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":" * Prints the default help message","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":" public void helpMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":" this.println(Ui.HELP_MESSAGE);","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" * Prints the default goodbye message","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":" public void goodbyeMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"mingyuanc"},"content":" this.println(Ui.LINE_BREAK + Ui.GOODBYE_MESSAGE + Ui.LINE_BREAK);","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"mingyuanc"},"content":" * Prints the default line spacer","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"mingyuanc"},"content":" public void lineBreak() {","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"mingyuanc"},"content":" this.println(Ui.LINE_BREAK);","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"mingyuanc"},"content":" * Prints Error message in the quack convention","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"mingyuanc"},"content":" * @param e - the error message","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"mingyuanc"},"content":" public void errorMessage(String e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"mingyuanc"},"content":" this.println(\"QUACK QUACK!! \" + e);","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"mingyuanc"},"content":" * Prints Unexpected Error message in the quack convention","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"mingyuanc"},"content":" * @param e - the error message","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"mingyuanc"},"content":" public void unexpectedError(String e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"mingyuanc"},"content":" this.println(\"QUACK QUACK!! unexpected error: \" + e);","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"mingyuanc":154}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" * create a command class to handle the execution of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" * validate the index to ensure it is within range","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * @param index - the index of the task in question","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * @param len - the current length of the task list","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException if the index given is not within range","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" public static void validateIndex(int index, int len) throws DukeBadInputException {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" // validate input","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" if (len \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" \"Quack currently has no task remembered and cannot execute your command, add one now??\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" // validate input","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" if (index \u003e\u003d len) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(\"Quack does not remember having a task: \" + (index + 1)","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" + \" Quack only remember till task \" + (len));","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the storage","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" return other instanceof Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":60}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import duke.task.DeadlineTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" * Represents the Deadline command","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * Stores the description of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" private String desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" * Stores the deadline of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" * Constructor of the duke.task.DeadlineTask command","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * @param by - the due date of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" * @param desc - desc of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" public DeadlineCommand(LocalDateTime by, String desc) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" * storage","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" if (taskList.length() \u003e\u003d 100) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(\"quack cannot remember any more tasks!!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" // tries to add task to storage and task list, exception thrown otherwise","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" Task newTask \u003d new DeadlineTask(this.by, this.desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" taskList.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" if (!storage.writeToFile(newTask.getStored())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" ui.unexpectedError(\"unable to write to storage\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" // write to UI","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" ui.println(\"Quack! I have added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" ui.println(newTask.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" ui.println(\"Quack! Quack is currently remembering \" + taskList.length() + \" tasks.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" if (other instanceof DeadlineCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" DeadlineCommand command \u003d (DeadlineCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" return this.by.equals((command.by)) \u0026\u0026 this.desc.equals(command.desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":90}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" * Represents the delete command","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * the index of the task being deleted","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" * Constructor for the duke.command.MarkCommand class","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" * @param index - the index of the task being deleted","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the storage","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" Command.validateIndex(this.index, taskList.length());","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" // Check if able to remove","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" Task removed \u003d taskList.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" if (!storage.rewriteAll(taskList.getAllTask())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" ui.unexpectedError(\"not all tasks were successfully written, please contact my mother :( \");","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" ui.unexpectedError(\"error when writing to storage: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" // print to screen if able to remove","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" ui.println(\"Quack! I have removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" ui.println(removed.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" ui.println(\"Quack! Quack is currently remembering \" + taskList.length() + \" tasks.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" if (other instanceof DeleteCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" DeleteCommand command \u003d (DeleteCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" return this.index \u003d\u003d command.index;","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":82}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import duke.task.EventTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" * Represents the Event command","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * Stores the description of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" private String desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" * Stores the end date of the event","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" * Stores the start date of the event","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" * Constructor of the Event command","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" * @param from - the start date of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" * @param to - the end date of the event","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" * @param desc - desc of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" public EventCommand(LocalDateTime from, LocalDateTime to, String desc) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the storage","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" if (taskList.length() \u003e\u003d 100) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(\"quack cannot remember any more tasks!!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" // Tries to write to storage and task list, error thrown otherwise","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" Task newTask \u003d new EventTask(this.from, this.to, this.desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" taskList.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" if (!storage.writeToFile(newTask.getStored())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" ui.unexpectedError(\"unable to write to storage\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" // writes to the ui if successful","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" ui.println(\"Quack! I have added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" ui.println(newTask.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" ui.println(\"Quack! Quack is currently remembering \" + taskList.length() + \" tasks.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" if (other instanceof EventCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" EventCommand command \u003d (EventCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" return this.from.equals(command.from)","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" \u0026\u0026 this.to.equals(command.to)","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" \u0026\u0026 this.desc.equals(command.desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":97}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" * Represents the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the storage","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" return other instanceof ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":47}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" * Find a task by searching for a keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * Stores the search query","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" private String query;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" * Constructor of the todo command","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" * @param query - the desc of the command","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" public FindCommand(String query) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" this.query \u003d query;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" ArrayList\u003cTask\u003e matches \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" String find \u003d this.query.toUpperCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" // filter out relevant","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" for (Task t : taskList.getAllTask()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" if (t.getTask().toUpperCase().contains(find)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" matches.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" // Handles no matches","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" int size \u003d matches.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" if (size \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" ui.println(\"Quack has not found any task matching \" + this.query + \", did you spell it correctly?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" return;","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" ui.println(\"Quack has found\" + matches.size() + \"matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" ui.println((i + 1) + \".\" + matches.get(i).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" if (other instanceof FindCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" FindCommand command \u003d (FindCommand) other;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" return this.query.equals(command.query);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mingyuanc":86}},{"path":"src/main/java/duke/command/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" * Represents the help command","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the storage","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" ui.helpMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" return other instanceof HelpCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":46}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" * Represents the list command","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the storage","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" if (taskList.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" ui.println(\"Quack Quack, you have not entered any tasks yet!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" ui.println(\"Create new tasks with the todo, deadline or event command\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" ui.println(\"Quack Quack, here are the tasks in quack\u0027s memory:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 0; i \u003c taskList.length(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" ui.println((i + 1) + \".\" + taskList.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" return other instanceof ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":55}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" * Represents the mark/unmark command","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * true if mark command else unmark","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" private boolean isMark;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" * index of the task being marked/unmarked","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" * Constructor for the duke.command.MarkCommand class","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" * @param mark - true if mark command else unmark","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * @param index - index of the task in question","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" public MarkCommand(boolean mark, int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" this.isMark \u003d mark;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" * storage","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" Command.validateIndex(this.index, taskList.length());","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" Task task \u003d taskList.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" // only toggle if mark !\u003d completed as if they are the same then there is no","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" // effect","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" String resp;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" if (isMark !\u003d task.isComplete()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" task.toggleComplete();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" resp \u003d isMark ? \"Quack! Congrats for finishing the task!\"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" : \"Quack, I\u0027ve marked this task as not done yet :(\";","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" resp \u003d isMark ? \"Quack! This task is already done QUACK!\"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" : \"Quack! you cant unmark something that isn\u0027t done yet!!\";","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" // writes to UI","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" ui.println(resp);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" ui.println(task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" if (!storage.rewriteAll(taskList.getAllTask())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" ui.unexpectedError(\"not all tasks were successfully written, please contact my mother :( \");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" ui.unexpectedError(\"error when writing to storage: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" if (other instanceof MarkCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" MarkCommand command \u003d (MarkCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" return this.index \u003d\u003d command.index \u0026\u0026 this.isMark \u003d\u003d command.isMark;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":98}},{"path":"src/main/java/duke/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import duke.task.TodoTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" * Represents the Todo command","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * Stores the description of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" private String desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" * Constructor of the todo command","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" * @param desc - the desc of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" public TodoCommand(String desc) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the storage","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" if (taskList.length() \u003e\u003d 100) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(\"quack cannot remember any more tasks!!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" // add task to storage and task list, throws error if not successful","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" Task newTask \u003d new TodoTask(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" taskList.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" if (!storage.writeToFile(newTask.getStored())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" ui.unexpectedError(\"unable to write to storage\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" // writes to the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" ui.println(\"Quack! I have added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" ui.println(newTask.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" ui.println(\"Quack! Quack is currently remembering \" + taskList.length() + \" tasks.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" if (other instanceof TodoCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" TodoCommand command \u003d (TodoCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" return this.desc.equals(command.desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":81}},{"path":"src/main/java/duke/command/UnrecognisedCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" * Represents a command that is not recognised","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"public class UnrecognisedCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the storage","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" ui.println(\"Quack does not understand your command!!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" ui.println(\"Quack only understands these commands: list, mark, unmark, delete, todo, deadline, event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" return other instanceof UnrecognisedCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":46}},{"path":"src/main/java/duke/exception/DukeBadInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":" * Signals when a user input is unable to be parsed or out of bound","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"public class DukeBadInputException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":" * Constructs an BadInputException with the specified detail message.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" * @param e - description of the bad input","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" public DukeBadInputException(String e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" super(e);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"mingyuanc":15}},{"path":"src/main/java/duke/exception/DukeLoadingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":" * Signals when storage cannot be properly loaded","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"public class DukeLoadingException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":" * Constructs an duke.exception.DukeLoadingException with the specified detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" * @param e - description of the loading exception","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" public DukeLoadingException(String e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" super(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"mingyuanc":15}},{"path":"src/main/java/duke/task/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":" * Represents a deadline task in a task manager","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" * The deadline of the task","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * constructor for duke.task.DeadlineTask","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * @param by - the deadline of the task","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" * @param task - the description of the task created","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" public DeadlineTask(LocalDateTime by, String task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" * constructor for duke.task.DeadlineTask from storage","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * @param by - the deadline of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" * @param task - the description of the task created","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" * @param isComplete - if completed","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" public DeadlineTask(LocalDateTime by, String task, boolean isComplete) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" if (isComplete) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" this.toggleComplete();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" return \"[D]\" + super.toString() + \" (by: \" + Task.formatDate(this.by) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" * returns the stored form of this deadline","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" * Stored as DEADLINE{task description}{by}","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" * @return DEADLINE{task description}{by}","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" public String getStored() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" return String.join(Task.SEP, new String[] { \"DEADLINE\", this.getTask(),","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" this.isComplete() ? \"1\" : \"0\", this.by.toString() });","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"mingyuanc":58}},{"path":"src/main/java/duke/task/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":" * Class to encapsulate the logic of an event in a task manager","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" * The starting time of the event","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" * The ending time of the event","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * constructor for duke.task.EventTask","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" * Stored as EVENT{marked}{task description}{from}{to}","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" * @param from - the starting time of the event","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" * @param to - the ending time of the event","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" * @param task - the description of the task created","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" public EventTask(LocalDateTime from, LocalDateTime to, String task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" * constructor for duke.task.EventTask from storage","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" * Stored as EVENT{marked}{task description}{from}{to}","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" * @param from - the starting time of the event","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" * @param to - the ending time of the event","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * @param task - the description of the task created","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * @param isComplete - if completed","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" public EventTask(LocalDateTime from, LocalDateTime to, String task, boolean isComplete) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" if (isComplete) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" this.toggleComplete();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" return \"[E]\" + super.toString() + String.format(\" (from: %s to: %s)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" Task.formatDate(this.from), Task.formatDate(this.to));","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" * returns the stored form of this event","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" * Stored as EVENT,{task description},{from},{to}","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" * @return EVENT,{task description},{from},{to}","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" public String getStored() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" return String.join(Task.SEP, new String[] { \"EVENT\", this.getTask(),","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" this.isComplete() ? \"1\" : \"0\",","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" this.from.toString(), this.to.toString() });","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"mingyuanc":69}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":" * Implementation of the task logic","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" * Formatter to output date time","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" public static final DateTimeFormatter OUTPUT_FORMAT \u003d DateTimeFormatter.ofPattern(\"EEE hh:mma, MMM yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * Separator used","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" public static final String SEP \u003d \"#\";","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * The description of the task","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" private String task;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" * The state of the task","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" private boolean isComplete \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" * Constructor for the duke.task.Task class","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" * @param task - the description of the task created","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" public Task(String task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" * Format data according to current format","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * @param time - the local date time to format","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * @return formatted string according to the format","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" public static String formatDate(LocalDateTime time) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" return Task.OUTPUT_FORMAT.format(time);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" * Accessor for the completed field","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" * @return true if completed is true","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" public boolean isComplete() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" return this.isComplete;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" * Toggles the complete field","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" public void toggleComplete() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" this.isComplete \u003d !this.isComplete;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" * Getter for tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" * @return task string","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" public String getTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" * returns the stored form of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" * @return a string which duke.Parser could Parse","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" public String getStored() {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" return \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" return String.format(\"[%s] %s\", isComplete ? \"X\" : \" \", this.task);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same TASK","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" if (other instanceof Task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" Task task \u003d (Task) other;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" return this.getStored().equals(task.getStored());","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"mingyuanc":99}},{"path":"src/main/java/duke/task/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":" * Class to encapsulate the logic of an todo task","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"public class TodoTask extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" * Constructor for the duke.task.TodoTask class","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" * Stored as TODO{task description}{1 if marked else 0}","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" * @param task - the description of the task created","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" public TodoTask(String task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" * Constructor for the duke.task.TodoTask class from storage","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * Stored as TODO{task description}{1 if marked else 0}","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" * @param task - the description of the task created","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" * @param isComplete - if completed","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" public TodoTask(String task, boolean isComplete) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" if (isComplete) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" this.toggleComplete();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" * returns the stored form of this tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * Stored as TODO{task description}{1 if marked else 0}","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" * @return TODO{task description}{1 if marked else 0}","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" public String getStored() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" return String.join(Task.SEP, new String[] { \"TODO\", this.getTask(), this.isComplete() ? \"1\" : \"0\" });","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"mingyuanc":48}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":"import duke.command.HelpCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":"import duke.command.TodoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":"import duke.command.UnrecognisedCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeLoadingException;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":"import duke.task.DeadlineTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":"import duke.task.EventTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":"import duke.task.TodoTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" public void parseCommand_correctInputs() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" // bye command","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new ExitCommand(), Parser.parse(\"bye\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" // list command","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new ListCommand(), Parser.parse(\"list\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" // help command","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new HelpCommand(), Parser.parse(\"help\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" // unrecognised command","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new UnrecognisedCommand(), Parser.parse(\"What is this\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" // mark command","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new MarkCommand(true, 1), Parser.parse(\"mark 1\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" // unmark command","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new MarkCommand(false, 1), Parser.parse(\"unmark 1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" // delete command","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new DeleteCommand(1), Parser.parse(\"delete 1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" // Find command","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new FindCommand(\"testString\"), Parser.parse(\"Find testString\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" // deadline command","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" // todo command","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new TodoCommand(\"testing1\"), Parser.parse(\"todo testing1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" // deadline command","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new DeadlineCommand(LocalDateTime.parse(\"2023-05-07T03:03\"), \"testing\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" Parser.parse(\"deadline testing /by 2023-05-07 03:03\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" // Event command","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new EventCommand(LocalDateTime.parse(\"2023-05-07T03:03\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" LocalDateTime.parse(\"2023-05-07T03:05\"), \"testingEvent\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" Parser.parse(\"event testingEvent /from 2023-05-07 03:03 /to 2023-05-07 03:05\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" } catch (DukeBadInputException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" public void parseCommand_badIndex_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" // Bad index","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" Exception e \u003d assertThrows(NumberFormatException.class, () -\u003e Parser.parse(\"mark gan\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"For input string: \\\"gan\\\"\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" // Bad index","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" e \u003d assertThrows(NumberFormatException.class, () -\u003e Parser.parse(\"delete gan\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"For input string: \\\"gan\\\"\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" // no index","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" e \u003d assertThrows(DukeBadInputException.class, () -\u003e Parser.parse(\"mark\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Quack requires exactly one number after the mark command\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" // no index","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" e \u003d assertThrows(DukeBadInputException.class, () -\u003e Parser.parse(\"delete\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Quack requires exactly one number after the delete command\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" public void parseCommand_badFlag_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" // no flag","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" Exception e \u003d assertThrows(DukeBadInputException.class, () -\u003e Parser.parse(\"deadline test\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Quack cant find the required /by flags, please provide quack with one please\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" // missing flag","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" e \u003d assertThrows(DukeBadInputException.class, () -\u003e Parser.parse(\"event test /from 2020-12-12 12:12\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Quack cant find the required /to flags, please provide quack with one please\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" //bad flag input","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" e \u003d assertThrows(DateTimeParseException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" Parser.parse(\"event test /from 2020-12-12 /to 2020-12-12 23:59\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Text \u00272020-12-12\u0027 could not be parsed at index 10\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" public void parseCommand_noDesc_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" // no desc todo","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" Exception e \u003d assertThrows(DukeBadInputException.class, () -\u003e Parser.parse(\"todo\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Quack doesn\u0027t understand an empty todo description, please provide one!!\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" // no desc event","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" e \u003d assertThrows(DukeBadInputException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" Parser.parse(\"event /from 2020-12-12 12:12 /to 2020-12-12 23:59\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Quack doesn\u0027t understand an empty description, please provide one!!\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" //no desc deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":" e \u003d assertThrows(DukeBadInputException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" Parser.parse(\"deadline /by 2020-12-12 12:12\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Quack doesn\u0027t understand an empty description, please provide one!!\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":" public void parseStorage_correctInputs() {","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":" // tod0 command and marked","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new TodoTask(\"testing1\", true), Parser.fromStorage(\"TODO#testing1#1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" // deadline command","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new DeadlineTask(LocalDateTime.parse(\"2023-10-01T23:59\"), \"test1\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":" Parser.fromStorage(\"DEADLINE#test1#0#2023-10-01T23:59\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":" // Event command and mark","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new EventTask(LocalDateTime.parse(\"2023-05-07T03:03\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":" LocalDateTime.parse(\"2023-05-07T03:05\"), \"testingEvent\", true),","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":" Parser.fromStorage(\"EVENT#testingEvent#1#2023-05-07T03:03#2023-05-07T03:05\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"mingyuanc"},"content":" } catch (DukeLoadingException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":125}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" public void checkFile_correctInput() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" String[] expected \u003d new String[]{\"TODO#test#0\",","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" \"TODO#test1#1\",","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" \"DEADLINE#test2#0#2023-10-01T23:59\",","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" \"DEADLINE#test3#0#2024-01-01T12:00\",","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" \"DEADLINE#test4#0#2024-05-05T12:00\",","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" \"EVENT#test5#1#2023-05-07T03:03#2023-05-07T03:05\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" Storage storage \u003d new Storage(\"data/testData.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" List\u003cString\u003e ret \u003d storage.readFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" assertEquals(expected.length, ret.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 0; i \u003c expected.length; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" assertEquals(expected[i], ret.get(i));","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException | DukeBadInputException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" public void checkFile_notFile_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" new Storage(\"data/Data\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" new Storage(\"data/Data.json\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException | DukeBadInputException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mingyuanc":47}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" public void toString_correctInput() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"[T][ ] test\", new TodoTask(\"test\").toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"[T][X] test1\",","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" new TodoTask(\"test1\", true).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"[D][ ] test2 (by: Sun 11:59PM, Oct 2023)\",","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" new DeadlineTask(LocalDateTime.parse(\"2023-10-01T23:59\"), \"test2\").toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"[E][X] test3 (from: Sun 03:03AM, May 2023 to: Sun 03:05AM, May 2023)\",","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" new EventTask(LocalDateTime.parse(\"2023-05-07T03:03\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" LocalDateTime.parse(\"2023-05-07T03:05\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" \"test3\", true).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" public void getStored_correctInput() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"TODO#test#0\", new TodoTask(\"test\").getStored());","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"TODO#test1#1\",","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" new TodoTask(\"test1\", true).getStored());","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"DEADLINE#test2#0#2023-10-01T23:59\",","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" new DeadlineTask(LocalDateTime.parse(\"2023-10-01T23:59\"), \"test2\").getStored());","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"EVENT#test3#1#2023-05-07T03:03#2023-05-07T03:05\",","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" new EventTask(LocalDateTime.parse(\"2023-05-07T03:03\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" LocalDateTime.parse(\"2023-05-07T03:05\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" \"test3\", true).getStored());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mingyuanc":35}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"todo debugging","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"unmark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"deadline","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"deadline debug2 /by","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"deadline debug2 /by now","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"event debug3 /from noww /to noww","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"event debug3 /from noww /to","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"event debug3 /from /to noww","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"event debug3 /from noww /to noww /from noww","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"delete 2","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"mingyuanc":20}},{"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":"mingyuanc"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"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":{"mingyuanc":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"instructions on how to use it.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" first)","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":14,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":15,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" like the below as the output:","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"mingyuanc":10,"-":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":"mingyuanc"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.14\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"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":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"javafx {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" version \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" modules \u003d [ \u0027javafx.controls\u0027,\u0027javafx.base\u0027,\u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","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":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":"dependencies {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":"test {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"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"}],"authorContributionMap":{"mingyuanc":20,"-":42}},{"path":"data/testData.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"TODO#test#0","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"TODO#test1#1","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"DEADLINE#test2#0#2023-10-01T23:59","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"DEADLINE#test3#0#2024-01-01T12:00","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"DEADLINE#test4#0#2024-05-05T12:00","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"EVENT#test5#1#2023-05-07T03:03#2023-05-07T03:05","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mingyuanc":6}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" * A task manager that initialise a quack instance","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"public class Duke {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * Instance handling all the user interface","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * Instance handling the tasks state","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" * Path to the storage, default is ./data/data.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * Construct a new Duke object which uses storageFilePath as the storage","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" * @param storageFilePath - path to the storage file","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" public Duke(String... storageFilePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" // try to establish a connection to the file","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" // set this.storage to null if not possible","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" this.storage \u003d new Storage(storageFilePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" this.ui.getErrorMessage(","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" \"has some internal problem and is unable to help you today, please contact quacks mum\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" this.storage \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" } catch (DukeBadInputException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" this.ui.getErrorMessage(storageFilePath + \" is not a text file, please provide a file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" this.storage \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" // read from storage, throws an error when unable to rewrite to the storage file","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" if (this.storage !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" // check for corrupted files","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" if (this.taskList.loadTasks(this.storage.readFile())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" this.ui.getUnexpectedErrorMessage(\"Some task are corrupted,\"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" + \" attempting to recover uncorrupted tasks\");","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" if (!this.storage.rewriteAll(this.taskList.getAllTask())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" this.ui.getUnexpectedErrorMessage(","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" \"not all tasks were successfully written, please contact my mother :( \");","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" this.ui.getUnexpectedErrorMessage(\"error when rewriting to storage: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" * Entry point of the program","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" * @param args System arguments, should be empty","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" // new Duke(\"data/data.txt\").run();","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" return command.execute(this.taskList, this.ui, this.storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" } catch (DukeBadInputException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" return e.getMessage()","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" + \", quack only understand numbers, please input a numeric value!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" return e.getMessage()","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" + \"Quack only understands date in this format: \"","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" + \"YYYY-MM-DD HH:MM, do give the hours in 24hours format\";","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" * Ensure that the files are written","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" public void close() {","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" this.storage.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"mingyuanc":100}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.gui.MainWindow;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" private Duke duke \u003d new Duke(\"data/data.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mingyuanc":32}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"import duke.command.HelpCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"import duke.command.TodoCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"import duke.command.UnrecognisedCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeLoadingException;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":"import duke.task.DeadlineTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":"import duke.task.EventTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":"import duke.task.TodoTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" * Handles making sense of the user command and output it in a programme","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * readable way","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":"public class Parser {","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" * Formatter to parse date time","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" private static final DateTimeFormatter PARSE_FORMAT \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * Factory method to parse the input and output the respective command instance","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" * @param input - the input string that needs to be parsed","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" * @return a respective subclass of the command that can be executed","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be parsed properly","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" * @throws NumberFormatException - if the input cannot be converted to an int","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" public static Command parse(String input) throws DukeBadInputException, NumberFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" HashMap\u003cString, LocalDateTime\u003e flagMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" String desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" switch (splitInput[0].toUpperCase()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" case \"BYE\":","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" case \"HELP\":","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" return new HelpCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" case \"LIST\":","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" case \"MARK\":","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" return new MarkCommand(true, findIndex(splitInput));","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" case \"UNMARK\":","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" return new MarkCommand(false, findIndex(splitInput));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" case \"DELETE\":","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" return new DeleteCommand(findIndex(splitInput));","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" case \"FIND\":","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" \"Quack doesn\u0027t understand an empty find query, please provide one!!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" // join the string to find the query","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" return new FindCommand(String.join(\" \", Arrays.copyOfRange(splitInput, 1, splitInput.length)));","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" case \"TODO\":","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" \"Quack doesn\u0027t understand an empty todo description, please provide one!!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" // join the string to find the description","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" return new TodoCommand(String.join(\" \", Arrays.copyOfRange(splitInput, 1, splitInput.length)));","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" case \"DEADLINE\":","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" desc \u003d Parser.findFlags(flagMap, splitInput, \"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" return new DeadlineCommand(flagMap.get(\"/by\"), desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" case \"EVENT\":","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" desc \u003d Parser.findFlags(flagMap, splitInput, \"/from\", \"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" return new EventCommand(flagMap.get(\"/from\"), flagMap.get(\"/to\"), desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" default:","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" return new UnrecognisedCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" * Load task from storage","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" * @param storedStr - the string representing the task from storage","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" * @return the instance of the class","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeLoadingException if there is an issue loading the task","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" * @throws DateTimeParseException if there is an issue parsing the date","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" public static Task fromStorage(String storedStr) throws DukeLoadingException, DateTimeParseException {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" String[] content \u003d storedStr.split(Task.SEP);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":" if (content.length \u003c 3 || content.length \u003e 6) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" throw new DukeLoadingException(storedStr + \", this command cannot be read\");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":" boolean isCompleted \u003d content[2].equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":" switch (content[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":" case \"TODO\":","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" return new TodoTask(content[1], isCompleted);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":" case \"DEADLINE\":","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":" if (content.length !\u003d 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":" throw new DukeLoadingException(storedStr + \", this command cannot be read\");","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" return new DeadlineTask(LocalDateTime.parse(content[3]), content[1], isCompleted);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":" case \"EVENT\":","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":" if (content.length !\u003d 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":" throw new DukeLoadingException(storedStr + \", this command cannot be read\");","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":" return new EventTask(LocalDateTime.parse(content[3]),","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":" LocalDateTime.parse(content[4]), content[1], isCompleted);","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"mingyuanc"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":" throw new DukeLoadingException(storedStr + \", this command cannot be read\");","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"mingyuanc"},"content":" * Find the index from the split input string","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"mingyuanc"},"content":" * @param splitInput - the split input string","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"mingyuanc"},"content":" * @return the index","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException throws an error if it is a negative number","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"mingyuanc"},"content":" * @throws NumberFormatException throws an error if it is not a number","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"mingyuanc"},"content":" private static int findIndex(String[] splitInput) throws DukeBadInputException, NumberFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"mingyuanc"},"content":" if (splitInput.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":135,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"mingyuanc"},"content":" String.format(\"Quack requires exactly one number after the %s command\", splitInput[0]));","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":138,"author":{"gitId":"mingyuanc"},"content":" int ret \u003d Integer.parseInt(splitInput[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"mingyuanc"},"content":" if (ret \u003c\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"mingyuanc"},"content":" \"Quack requires a positive number to help you manage tasks!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":142,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":143,"author":{"gitId":"mingyuanc"},"content":" return ret;","lastModifiedDate":"2023-08-22"},{"lineNumber":144,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":145,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":146,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":147,"author":{"gitId":"mingyuanc"},"content":" * function to find the flags and update both the flags and param field","lastModifiedDate":"2023-08-22"},{"lineNumber":148,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":149,"author":{"gitId":"mingyuanc"},"content":" * @param flagMap - the place to store the flag","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"mingyuanc"},"content":" * @param splitInputs - input string that has been split into words","lastModifiedDate":"2023-08-22"},{"lineNumber":151,"author":{"gitId":"mingyuanc"},"content":" * @param flags - the flags that needs to be found","lastModifiedDate":"2023-08-22"},{"lineNumber":152,"author":{"gitId":"mingyuanc"},"content":" * @return the desc of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the flags cannot be found or without a","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"mingyuanc"},"content":" * description","lastModifiedDate":"2023-08-22"},{"lineNumber":155,"author":{"gitId":"mingyuanc"},"content":" * @throws DateTimeParseException - if the value cannot be parsed","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":157,"author":{"gitId":"mingyuanc"},"content":" private static String findFlags(HashMap\u003cString, LocalDateTime\u003e flagMap,","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"mingyuanc"},"content":" String[] splitInputs, String... flags)","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"mingyuanc"},"content":" throws DukeBadInputException, DateTimeParseException {","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":161,"author":{"gitId":"mingyuanc"},"content":" int[] flagIndex \u003d Parser.find(splitInputs, flags);","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"mingyuanc"},"content":" String desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":164,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 0; i \u003c flagIndex.length - 1; i++) {","lastModifiedDate":"2023-08-22"},{"lineNumber":165,"author":{"gitId":"mingyuanc"},"content":" // Check for the presence of the flag","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"mingyuanc"},"content":" if (flagIndex[i] \u003d\u003d -1) {","lastModifiedDate":"2023-08-22"},{"lineNumber":167,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"mingyuanc"},"content":" \"Quack cant find the required \" + flags[i] + \" flags, please provide quack with one please\");","lastModifiedDate":"2023-08-22"},{"lineNumber":169,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":170,"author":{"gitId":"mingyuanc"},"content":" if (flagIndex[i + 1] \u003d\u003d -1) {","lastModifiedDate":"2023-08-22"},{"lineNumber":171,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"mingyuanc"},"content":" \"Quack cant find the required \" + flags[i + 1]","lastModifiedDate":"2023-08-22"},{"lineNumber":173,"author":{"gitId":"mingyuanc"},"content":" + \" flags, please provide quack with one please\");","lastModifiedDate":"2023-08-22"},{"lineNumber":174,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":175,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":176,"author":{"gitId":"mingyuanc"},"content":" // Check for the description of flag","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"mingyuanc"},"content":" String value \u003d String.join(\" \", Arrays.copyOfRange(splitInputs, flagIndex[i] + 1, flagIndex[i + 1]));","lastModifiedDate":"2023-08-22"},{"lineNumber":178,"author":{"gitId":"mingyuanc"},"content":" if (value.isBlank()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":179,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"mingyuanc"},"content":" \"Please provide quack a description for the \" + flags[i] + \" flag\");","lastModifiedDate":"2023-08-22"},{"lineNumber":181,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":182,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"mingyuanc"},"content":" // check the format of the flag","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"mingyuanc"},"content":" LocalDateTime val \u003d LocalDateTime.parse(value, Parser.PARSE_FORMAT);","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"mingyuanc"},"content":" flagMap.put(splitInputs[flagIndex[i]], val);","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":187,"author":{"gitId":"mingyuanc"},"content":" // Check for a valid description","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"mingyuanc"},"content":" desc \u003d String.join(\" \", Arrays.copyOfRange(splitInputs, 1, flagIndex[0]));","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"mingyuanc"},"content":" if (desc.isBlank()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"mingyuanc"},"content":" \"Quack doesn\u0027t understand an empty description, please provide one!!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"mingyuanc"},"content":" return desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":195,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":196,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":197,"author":{"gitId":"mingyuanc"},"content":" * Finds the required flags in the array of strings","lastModifiedDate":"2023-08-22"},{"lineNumber":198,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":199,"author":{"gitId":"mingyuanc"},"content":" * @param arr - the array of strings that you want to find the flags from","lastModifiedDate":"2023-08-22"},{"lineNumber":200,"author":{"gitId":"mingyuanc"},"content":" * @param items - the array of flags you want to find from the array","lastModifiedDate":"2023-08-22"},{"lineNumber":201,"author":{"gitId":"mingyuanc"},"content":" * @return an array of the index of the flags","lastModifiedDate":"2023-08-22"},{"lineNumber":202,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the flags cannot be found or without a","lastModifiedDate":"2023-08-29"},{"lineNumber":203,"author":{"gitId":"mingyuanc"},"content":" * description","lastModifiedDate":"2023-08-22"},{"lineNumber":204,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":205,"author":{"gitId":"mingyuanc"},"content":" private static int[] find(String[] arr, String[] items) throws DukeBadInputException {","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"mingyuanc"},"content":" int[] ret \u003d new int[items.length + 1];","lastModifiedDate":"2023-08-22"},{"lineNumber":207,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":208,"author":{"gitId":"mingyuanc"},"content":" // initialise values, these values will contain the index","lastModifiedDate":"2023-08-29"},{"lineNumber":209,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 0; i \u003c items.length + 1; i++) {","lastModifiedDate":"2023-08-22"},{"lineNumber":210,"author":{"gitId":"mingyuanc"},"content":" // set last item as the length to demarcate the end","lastModifiedDate":"2023-08-29"},{"lineNumber":211,"author":{"gitId":"mingyuanc"},"content":" if (i \u003d\u003d items.length) {","lastModifiedDate":"2023-08-22"},{"lineNumber":212,"author":{"gitId":"mingyuanc"},"content":" ret[i] \u003d arr.length;","lastModifiedDate":"2023-08-22"},{"lineNumber":213,"author":{"gitId":"mingyuanc"},"content":" continue;","lastModifiedDate":"2023-08-22"},{"lineNumber":214,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":215,"author":{"gitId":"mingyuanc"},"content":" ret[i] \u003d -1;","lastModifiedDate":"2023-08-22"},{"lineNumber":216,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":217,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":218,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 0; i \u003c arr.length; i++) {","lastModifiedDate":"2023-08-22"},{"lineNumber":219,"author":{"gitId":"mingyuanc"},"content":" for (int j \u003d 0; j \u003c items.length; j++) {","lastModifiedDate":"2023-08-22"},{"lineNumber":220,"author":{"gitId":"mingyuanc"},"content":" if (arr[i].equals(items[j])) {","lastModifiedDate":"2023-08-22"},{"lineNumber":221,"author":{"gitId":"mingyuanc"},"content":" if (ret[j] !\u003d -1) {","lastModifiedDate":"2023-08-22"},{"lineNumber":222,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-29"},{"lineNumber":223,"author":{"gitId":"mingyuanc"},"content":" \"There are too many of the \" + items[j] + \" flag, please just provide one\");","lastModifiedDate":"2023-08-22"},{"lineNumber":224,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":225,"author":{"gitId":"mingyuanc"},"content":" ret[j] \u003d i;","lastModifiedDate":"2023-08-22"},{"lineNumber":226,"author":{"gitId":"mingyuanc"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":227,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":228,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":229,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":230,"author":{"gitId":"mingyuanc"},"content":" return ret;","lastModifiedDate":"2023-08-22"},{"lineNumber":231,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":232,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"mingyuanc":232}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import java.nio.file.StandardOpenOption;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * Handles the loading of tasks from the file and saving tasks in the file","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" * Path of the storage file","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" private Path path;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" * The input string that points to the file","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" private String[] storageFilePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" * Writer instance","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" private BufferedWriter writer;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * Constructs a new instance of a duke.Storage object that reads and write to a specific file","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" * @param storageFilePath - the file which your reading/writing to","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" * @throws IOException - thrown when there is an IOException","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - thrown when the input provided does not point to a file","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" public Storage(String... storageFilePath) throws IOException, DukeBadInputException {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" this.storageFilePath \u003d storageFilePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" String home \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" this.path \u003d Paths.get(home, this.storageFilePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" this.checkFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" this.writer \u003d Files.newBufferedWriter(this.path, StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" * Ensures that default data storage is present","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" * @throws IOException if there is an IOException","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException if the path does not lead to a file","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" private void checkFile() throws IOException, DukeBadInputException {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" String home \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" if (!this.storageFilePath[this.storageFilePath.length - 1].endsWith(\".txt\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(this.path.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" if (!Files.exists(this.path)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" // Handles folder not existing","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 1; i \u003c this.storageFilePath.length; i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" Path tmp \u003d Paths.get(home, Arrays.copyOfRange(this.storageFilePath, 0, i));","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" if (!Files.exists(tmp)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" Files.createDirectories(tmp);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" // handles file not existing","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" Files.createFile(this.path);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" * Reads and parse the storage file","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" * @return a duke.Parser array storing the parsed input","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" * @throws IOException thrown if the file cannot be open or read","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" public List\u003cString\u003e readFile() throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" BufferedReader reader \u003d Files.newBufferedReader(this.path);","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" List\u003cString\u003e ret \u003d reader.lines().collect(Collectors.toList());","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" reader.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" return ret;","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" * Writes the given line to storage","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" * @param input string that is you want to write","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" * @return true if successfully written","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" public boolean writeToFile(String input) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":" this.writer.append(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" this.writer.newLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":" this.writer.flush();","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":" * Rewrites the storage to contain all the current tasks stored in memory","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":" * @param tasks - list of task to be written in","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":" * @return true if carried out successfully","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":" * @throws IOException if there is an IOException","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":" public boolean rewriteAll(Task[] tasks) throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":" this.writer.flush();","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"mingyuanc"},"content":" BufferedWriter tmpWriter \u003d Files.newBufferedWriter(this.path,","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":" StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING);","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":" boolean isSuccessful \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":" // rewrite for each","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"mingyuanc"},"content":" tmpWriter.write(t.getStored());","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"mingyuanc"},"content":" tmpWriter.newLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"mingyuanc"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"mingyuanc"},"content":" isSuccessful \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"mingyuanc"},"content":" tmpWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"mingyuanc"},"content":" return isSuccessful;","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"mingyuanc"},"content":" * Close the connection to the storage and deallocate all resources","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"mingyuanc"},"content":" public void close() {","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"mingyuanc"},"content":" this.writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"mingyuanc"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"mingyuanc":148}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeLoadingException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" * Manages the operation on the tasks","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * Stores all the task","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * construct a new empty task list","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" * Loads the list of task from the storage into the task list instance","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * @param storedInput - the list of task obtained from storage","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" * @return true if all task loaded successfully else false","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" public boolean loadTasks(List\u003cString\u003e storedInput) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" // parse and store data while looking out for data corruption","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" boolean isCorrupted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" for (String s : storedInput) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" Task newTask \u003d Parser.fromStorage(s);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" this.tasks.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" } catch (DukeLoadingException | DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" isCorrupted \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" return isCorrupted;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" * returns the current task list length","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" * @return task list length","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" public int length() {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" * Adds the given task into memory","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" * @param task - the task being added","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" * remove the given task from memory","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" * @param index - the index of the task being removed","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" * @return the task that was removed","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" public Task remove(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" return this.tasks.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" * returns the element at the index","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" * @param index - index of the element","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" * @return the element at the index","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" * returns all the tasks currently stored","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" * @return an array of Task","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" public Task[] getAllTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" return this.tasks.toArray(new Task[this.length()]);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"mingyuanc":92}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":" * Handles the interaction with user","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" * Default Exit Message","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" public static final String GOODBYE_MESSAGE \u003d \"Quack Quack! Quack hopes to see you again soon!\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * Default Welcome Message","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" public static final String WELCOME_MESSAGE \u003d \"Quack Quack! I am a duck named Quack\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" + \"Quack will remember the task you give quack!\\n\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" + Ui.HELP_MESSAGE;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" * Default Help Message","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" private static final String HELP_MESSAGE \u003d \"Quack understands these commands: list, mark, \"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" + \"unmark, delete, todo, deadline, event\\n\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" + \"For mark/unmark/delete please provide a number after, such as mark 2.\\n\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" + \"deadline requires the /by keyword and event requires the /from and /to keyword.\\n\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" + \"Please provide a valid date and time after the keyword with the following format:\"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" + \" YYYY-MM-DD HH:MM\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" * Constructs a new UI instance","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" public Ui() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * gets the default help message","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" * @return the default help message","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" public String getHelpMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" return Ui.HELP_MESSAGE;","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" * Prints Error message in the quack convention","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" * @param e - the error message","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" * @return the formatted error message","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" public String getErrorMessage(String e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" return \"QUACK QUACK!! \" + e;","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" * Prints Unexpected Error message in the quack convention","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" * @param e - the error message","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" * @return the formatted error message","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" public String getUnexpectedErrorMessage(String e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" return \"QUACK QUACK!! unexpected error: \" + e;","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" * Generate the usually used representation when adding tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" * @param newTask - the task being added","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" * @param length - the current number of tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" * @return the formatted string","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" public String getNewTaskMessage(Task newTask, int length) {","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" return \"Quack! I have added this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" + newTask.toString()","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" + \"\\nQuack! Quack is currently remembering \"","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" + length","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" + \" tasks.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"mingyuanc":81}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" * create a command class to handle the execution of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" * validate the index to ensure it is within range","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * @param index - the index of the task in question","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * @param len - the current length of the task list","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException if the index given is not within range","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" public static void validateIndex(int index, int len) throws DukeBadInputException {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" // validate input","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" if (len \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" \"Quack currently has no task remembered and cannot execute your command, add one now??\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" // validate input","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" if (index \u003e\u003d len) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(\"Quack does not remember having a task: \" + (index + 1)","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" + \" Quack only remember till task \" + (len));","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the storage","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" * @return the reply of Quack","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" public abstract String execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException;","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" return other instanceof Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":61}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import duke.task.DeadlineTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" * Represents the Deadline command","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * Stores the description of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" private String desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" * Stores the deadline of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" * Constructor of the duke.task.DeadlineTask command","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * @param by - the due date of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" * @param desc - desc of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" public DeadlineCommand(LocalDateTime by, String desc) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" * storage","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" * @return the reply of Quack","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" if (taskList.length() \u003e\u003d 100) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(\"quack cannot remember any more tasks!!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" // tries to add task to storage and task list, exception thrown otherwise","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" Task newTask \u003d new DeadlineTask(this.by, this.desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" taskList.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" if (!storage.writeToFile(newTask.getStored())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" return ui.getUnexpectedErrorMessage(\"unable to write to storage\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" return ui.getNewTaskMessage(newTask, taskList.length());","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" if (other instanceof DeadlineCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" DeadlineCommand command \u003d (DeadlineCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" return this.by.equals((command.by)) \u0026\u0026 this.desc.equals(command.desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":86}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" * Represents the delete command","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * the index of the task being deleted","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" * Constructor for the duke.command.MarkCommand class","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" * @param index - the index of the task being deleted","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" * storage","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" * @return the reply of Quack","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" Command.validateIndex(this.index, taskList.length());","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" // Check if able to remove","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" Task removed \u003d taskList.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" if (!storage.rewriteAll(taskList.getAllTask())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" return ui.getUnexpectedErrorMessage(\"not all tasks were successfully written,\"","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" + \" please contact my mother :( \");","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" return ui.getUnexpectedErrorMessage(\"error when writing to storage: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" return \"Quack! I have removed this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" + removed.toString()","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" + \"\\nQuack! Quack is currently remembering \"","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" + taskList.length()","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" + \" tasks.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" if (other instanceof DeleteCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" DeleteCommand command \u003d (DeleteCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" return this.index \u003d\u003d command.index;","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":85}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import duke.task.EventTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" * Represents the Event command","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * Stores the description of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" private String desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" * Stores the end date of the event","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" * Stores the start date of the event","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" * Constructor of the Event command","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" * @param from - the start date of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" * @param to - the end date of the event","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" * @param desc - desc of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" public EventCommand(LocalDateTime from, LocalDateTime to, String desc) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" * storage","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" * @return the reply of Quack","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" if (taskList.length() \u003e\u003d 100) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(\"quack cannot remember any more tasks!!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" // Tries to write to storage and task list, error thrown otherwise","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" Task newTask \u003d new EventTask(this.from, this.to, this.desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" taskList.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" if (!storage.writeToFile(newTask.getStored())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" return ui.getUnexpectedErrorMessage(\"unable to write to storage\");","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" return ui.getNewTaskMessage(newTask, taskList.length());","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" if (other instanceof EventCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" EventCommand command \u003d (EventCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" return this.from.equals(command.from)","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" \u0026\u0026 this.to.equals(command.to)","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" \u0026\u0026 this.desc.equals(command.desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":94}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" * Represents the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the storage","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" * @return the reply of Quack","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" storage.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" return Ui.GOODBYE_MESSAGE;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" return other instanceof ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":49}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" * Find a task by searching for a keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * Stores the search query","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" private String query;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" * Constructor of the todo command","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" * @param query - the desc of the command","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" public FindCommand(String query) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" this.query \u003d query;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" * @return the reply of Quack","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" ArrayList\u003cTask\u003e matches \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" String find \u003d this.query.toUpperCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" // filter out relevant","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" for (Task t : taskList.getAllTask()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" if (t.getTask().toUpperCase().contains(find)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" matches.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" // Handles no matches","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" int size \u003d matches.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" if (size \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" return \"Quack has not found any task matching \" + this.query + \", did you spell it correctly?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" String ret \u003d \"Quack has found \" + matches.size() + \" matching tasks in your list:\";","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" ret +\u003d \"\\n\" + (i + 1) + \". \" + matches.get(i).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" return ret;","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" if (other instanceof FindCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" FindCommand command \u003d (FindCommand) other;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" return this.query.equals(command.query);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mingyuanc":86}},{"path":"src/main/java/duke/command/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" * Represents the help command","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the storage","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" * @return the reply of Quack","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" return ui.getHelpMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" return other instanceof HelpCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":47}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" * Represents the list command","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" * storage","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * @return the reply of Quack","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" if (taskList.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" return \"Quack Quack, you have not entered any tasks yet!\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" + \"Create new tasks with the todo, deadline or event command\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" String ret \u003d \"Quack Quack, here are the tasks in quack\u0027s memory:\";","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 0; i \u003c taskList.length(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" ret +\u003d \"\\n \" + (i + 1) + \". \" + taskList.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" return ret;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" return other instanceof ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":56}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" * Represents the mark/unmark command","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * true if mark command else unmark","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" private boolean isMark;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" * index of the task being marked/unmarked","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" * Constructor for the duke.command.MarkCommand class","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" * @param mark - true if mark command else unmark","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * @param index - index of the task in question","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" public MarkCommand(boolean mark, int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" this.isMark \u003d mark;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" * storage","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" * @return the reply of Quack","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" Command.validateIndex(this.index, taskList.length());","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" Task task \u003d taskList.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" // only toggle if mark !\u003d completed as if they are the same then there is no","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" // effect","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" String resp;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" if (isMark !\u003d task.isComplete()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" task.toggleComplete();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" resp \u003d isMark ? \"Quack! Congrats for finishing the task!\"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" : \"Quack, I\u0027ve marked this task as not done yet :(\";","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" resp \u003d isMark ? \"Quack! This task is already done QUACK!\"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" : \"Quack! you cant unmark something that isn\u0027t done yet!!\";","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" if (!storage.rewriteAll(taskList.getAllTask())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" return ui.getUnexpectedErrorMessage(\"not all tasks were successfully written,\"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" + \" please contact my mother :( \");","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" return ui.getUnexpectedErrorMessage(\"error when writing to storage: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" return resp + \"\\n\" + task;","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" if (other instanceof MarkCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" MarkCommand command \u003d (MarkCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" return this.index \u003d\u003d command.index \u0026\u0026 this.isMark \u003d\u003d command.isMark;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":98}},{"path":"src/main/java/duke/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import duke.task.TodoTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" * Represents the Todo command","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * Stores the description of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" private String desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" * Constructor of the todo command","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" * @param desc - the desc of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" public TodoCommand(String desc) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" * storage","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" * @return the reply of Quack","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" if (taskList.length() \u003e\u003d 100) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" throw new DukeBadInputException(\"quack cannot remember any more tasks!!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" // add task to storage and task list, throws error if not successful","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" Task newTask \u003d new TodoTask(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" taskList.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" if (!storage.writeToFile(newTask.getStored())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" return ui.getUnexpectedErrorMessage(\"unable to write to storage\");","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" return ui.getNewTaskMessage(newTask, taskList.length());","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" if (other instanceof TodoCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" TodoCommand command \u003d (TodoCommand) other;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" return this.desc.equals(command.desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":78}},{"path":"src/main/java/duke/command/UnrecognisedCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" * Represents a command that is not recognised","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"public class UnrecognisedCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" * Method to encapsulate the execution logic of the command","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" * @param taskList - the task list instance of the current duke","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * @param ui - the ui instance of DUKE","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * @param storage - the storage instance to allow the command to write to the","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * storage","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" * @throws DukeBadInputException - if the input cannot be used","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeBadInputException {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" return \"Quack does not understand your command!!\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" + \"Quack only understands these commands: list, mark, unmark, delete, todo, deadline, event\";","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" * Checks if the command is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" * @return true if it is the exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same command","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" return other instanceof UnrecognisedCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":47}},{"path":"src/main/java/duke/exception/DukeBadInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":" * Signals when a user input is unable to be parsed or out of bound","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"public class DukeBadInputException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":" * Constructs an BadInputException with the specified detail message.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" * @param e - description of the bad input","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" public DukeBadInputException(String e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" super(e);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"mingyuanc":15}},{"path":"src/main/java/duke/exception/DukeLoadingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":" * Signals when storage cannot be properly loaded","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"public class DukeLoadingException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":" * Constructs an duke.exception.DukeLoadingException with the specified detail message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" * @param e - description of the loading exception","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" public DukeLoadingException(String e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" super(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"mingyuanc":15}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.gui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import javafx.scene.text.Text;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"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":13,"author":{"gitId":"mingyuanc"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" private Text textBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" DialogBox(String text) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" this.textBox.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mingyuanc":31}},{"path":"src/main/java/duke/gui/DialogBoxQuack.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.gui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import javafx.scene.text.Text;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"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":13,"author":{"gitId":"mingyuanc"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"public class DialogBoxQuack extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" private Text textBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" DialogBoxQuack(String text) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBoxQuack.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" this.textBox.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mingyuanc":31}},{"path":"src/main/java/duke/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.gui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import javafx.scene.text.Text;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" private Text textBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" private Text textBoxList;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" * Initialise the stage","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" this.scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" this.textBox.setText(Ui.WELCOME_MESSAGE);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" this.textBoxList.setText(\"Quack Quack, you have not entered any tasks yet!\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" + \"Create new tasks with the todo, deadline or event command\");","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" * set the current duke instance and also update the current tasks stored","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" this.textBoxList.setText(this.duke.getResponse(\"list\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" * Creates two dialog boxes, one echoing user input and the other containing","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" * Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" if (input.isBlank()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" return;","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" new DialogBox(input),","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" new DialogBoxQuack(response));","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" if (response.equals(Ui.GOODBYE_MESSAGE)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" System.exit(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mingyuanc":74}},{"path":"src/main/java/duke/task/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":" * Represents a deadline task in a task manager","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" * The deadline of the task","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * constructor for duke.task.DeadlineTask","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * @param by - the deadline of the task","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" * @param task - the description of the task created","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" public DeadlineTask(LocalDateTime by, String task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" * constructor for duke.task.DeadlineTask from storage","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * @param by - the deadline of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" * @param task - the description of the task created","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" * @param isComplete - if completed","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" public DeadlineTask(LocalDateTime by, String task, boolean isComplete) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" if (isComplete) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" this.toggleComplete();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" return \"[D]\" + super.toString() + \" (by: \" + Task.formatDate(this.by) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" * returns the stored form of this deadline","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" * Stored as DEADLINE{task description}{by}","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" * @return DEADLINE{task description}{by}","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" public String getStored() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" return String.join(Task.SEP, new String[] { \"DEADLINE\", this.getTask(),","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" this.isComplete() ? \"1\" : \"0\", this.by.toString() });","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"mingyuanc":58}},{"path":"src/main/java/duke/task/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":" * Class to encapsulate the logic of an event in a task manager","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" * The starting time of the event","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" * The ending time of the event","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * constructor for duke.task.EventTask","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" * Stored as EVENT{marked}{task description}{from}{to}","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" * @param from - the starting time of the event","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" * @param to - the ending time of the event","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" * @param task - the description of the task created","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" public EventTask(LocalDateTime from, LocalDateTime to, String task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" * constructor for duke.task.EventTask from storage","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" * Stored as EVENT{marked}{task description}{from}{to}","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" * @param from - the starting time of the event","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" * @param to - the ending time of the event","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * @param task - the description of the task created","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * @param isComplete - if completed","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" public EventTask(LocalDateTime from, LocalDateTime to, String task, boolean isComplete) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" if (isComplete) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" this.toggleComplete();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" return \"[E]\" + super.toString() + String.format(\" (from: %s to: %s)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" Task.formatDate(this.from), Task.formatDate(this.to));","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" * returns the stored form of this event","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" * Stored as EVENT,{task description},{from},{to}","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" * @return EVENT,{task description},{from},{to}","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" public String getStored() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" return String.join(Task.SEP, new String[] { \"EVENT\", this.getTask(),","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" this.isComplete() ? \"1\" : \"0\",","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" this.from.toString(), this.to.toString() });","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"mingyuanc":69}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":" * Implementation of the task logic","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" * Formatter to output date time","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" public static final DateTimeFormatter OUTPUT_FORMAT \u003d DateTimeFormatter.ofPattern(\"EEE hh:mma, MMM yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" * Separator used","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" public static final String SEP \u003d \"#\";","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * The description of the task","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" private String task;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" * The state of the task","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" private boolean isComplete \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" * Constructor for the duke.task.Task class","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" * @param task - the description of the task created","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" public Task(String task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" * Format data according to current format","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" * @param time - the local date time to format","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" * @return formatted string according to the format","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" public static String formatDate(LocalDateTime time) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" return Task.OUTPUT_FORMAT.format(time);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" * Accessor for the completed field","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" * @return true if completed is true","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" public boolean isComplete() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" return this.isComplete;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" * Toggles the complete field","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" public void toggleComplete() {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" this.isComplete \u003d !this.isComplete;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" * Getter for tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" * @return task string","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" public String getTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" * returns the stored form of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" * @return a string which duke Parser could Parse","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" public String getStored() {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" return \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" return String.format(\"[%s] %s\", isComplete ? \"X\" : \" \", this.task);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" * Checks if it is the exact same TASK","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" * @param other the other command in question","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" * @return true if there are equals","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" if (other instanceof Task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" Task task \u003d (Task) other;","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" return this.getStored().equals(task.getStored());","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"mingyuanc":100}},{"path":"src/main/java/duke/task/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":" * Class to encapsulate the logic of an todo task","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"public class TodoTask extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":" * Constructor for the duke.task.TodoTask class","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" * Stored as TODO{task description}{1 if marked else 0}","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" * @param task - the description of the task created","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" public TodoTask(String task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" * Constructor for the duke.task.TodoTask class from storage","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * Stored as TODO{task description}{1 if marked else 0}","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" * @param task - the description of the task created","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" * @param isComplete - if completed","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" public TodoTask(String task, boolean isComplete) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" super(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" if (isComplete) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" this.toggleComplete();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" * returns the stored form of this tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" * Stored as TODO{task description}{1 if marked else 0}","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" * @return TODO{task description}{1 if marked else 0}","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" public String getStored() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" return String.join(Task.SEP, new String[] { \"TODO\", this.getTask(), this.isComplete() ? \"1\" : \"0\" });","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"mingyuanc":48}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.text.Text?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" \u003cText fx:id\u003d\"textBox\" strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"Text\" textAlignment\u003d\"RIGHT\" wrappingWidth\u003d\"250.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" \u003cInsets left\u003d\"15.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" \u003c/HBox.margin\u003e\u003c/Text\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"100.0\" fitWidth\u003d\"100.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" \u003cimage\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" \u003cImage url\u003d\"@../images/User.png\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" \u003c/image\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" \u003cInsets right\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mingyuanc":26}},{"path":"src/main/resources/view/DialogBoxQuack.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.text.Text?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"100.0\" fitWidth\u003d\"100.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" \u003cimage\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" \u003cImage url\u003d\"@../images/Quack.png\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" \u003c/image\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" \u003cInsets left\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" \u003cText fx:id\u003d\"textBox\" strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"Text\" wrappingWidth\u003d\"250.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" \u003cInsets left\u003d\"15.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mingyuanc":27}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"\u003c?import javafx.scene.text.Text?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"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.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" promptText\u003d\"Quack Quack!\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"40.0\" prefWidth\u003d\"76.0\" style\u003d\"-fx-background-color: #87CEEB; -fx-background-radius: 10; -fx-border-width: 0.5;\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"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-05"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"555.0\" prefWidth\u003d\"390.0\" style\u003d\"-fx-background-color: #EEEE9B;\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░████░░██████████░░░░░░░░░░░██░░░░░░░░░░██░░░░░░░░████░░██▒▒▒▒▒▒██░░░░░░░░░██░░██░░░░░░░░██░░░░░░░░░░░░░░██▒▒▒▒▒▒██░░░░░░░░░██░░░░██░░░░░░██░░░░░░░░░░░░░░████████░░░░░░░░░██░░░░░░░░██░░░░░░██░░░░░░░░░░░░██░░░░░░░░░░░░░░░██░░░░░░░░████████████░░░░░░░░██░░░░░░░░░░░░░░░░░██░░░░░░░░██░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░██████░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\" textAlignment\u003d\"CENTER\" wrappingWidth\u003d\"387.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" \u003cVBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" \u003cInsets left\u003d\"8.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" \u003c/VBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" \u003cjavafx.scene.layout.HBox alignment\u003d\"TOP_RIGHT\" prefHeight\u003d\"130.0\" prefWidth\u003d\"390.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"100.0\" fitWidth\u003d\"100.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" \u003cimage\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" \u003cImage url\u003d\"@../images/Quack.png\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" \u003c/image\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" \u003cInsets left\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" \u003cText fx:id\u003d\"textBox\" strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"Placeholder\" wrappingWidth\u003d\"250.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" \u003cInsets left\u003d\"15.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" \u003c/javafx.scene.layout.HBox\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" \u003cHBox alignment\u003d\"TOP_RIGHT\" layoutX\u003d\"10.0\" layoutY\u003d\"363.0\" prefHeight\u003d\"130.0\" prefWidth\u003d\"390.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" \u003cImageView fx:id\u003d\"displayPicture1\" fitHeight\u003d\"100.0\" fitWidth\u003d\"100.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" \u003cimage\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" \u003cImage url\u003d\"@../images/Quack.png\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" \u003c/image\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" \u003cInsets left\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" \u003cText fx:id\u003d\"textBoxList\" strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"Placeholder\" wrappingWidth\u003d\"250.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" \u003cInsets left\u003d\"15.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" \u003c/children\u003e\u003c/VBox\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mingyuanc":71}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":"import duke.command.HelpCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":"import duke.command.TodoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":"import duke.command.UnrecognisedCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeLoadingException;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":"import duke.task.DeadlineTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":"import duke.task.EventTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":"import duke.task.TodoTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" public void parseCommand_correctInputs() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" // bye command","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new ExitCommand(), Parser.parse(\"bye\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" // list command","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new ListCommand(), Parser.parse(\"list\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" // help command","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new HelpCommand(), Parser.parse(\"help\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" // unrecognised command","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new UnrecognisedCommand(), Parser.parse(\"What is this\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" // mark command","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new MarkCommand(true, 1), Parser.parse(\"mark 1\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" // unmark command","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new MarkCommand(false, 1), Parser.parse(\"unmark 1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" // delete command","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new DeleteCommand(1), Parser.parse(\"delete 1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" // Find command","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new FindCommand(\"testString\"), Parser.parse(\"Find testString\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" // deadline command","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" // todo command","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new TodoCommand(\"testing1\"), Parser.parse(\"todo testing1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" // deadline command","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new DeadlineCommand(LocalDateTime.parse(\"2023-05-07T03:03\"), \"testing\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" Parser.parse(\"deadline testing /by 2023-05-07 03:03\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" // Event command","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new EventCommand(LocalDateTime.parse(\"2023-05-07T03:03\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" LocalDateTime.parse(\"2023-05-07T03:05\"), \"testingEvent\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" Parser.parse(\"event testingEvent /from 2023-05-07 03:03 /to 2023-05-07 03:05\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" } catch (DukeBadInputException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" public void parseCommand_badIndex_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" // Bad index","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" Exception e \u003d assertThrows(NumberFormatException.class, () -\u003e Parser.parse(\"mark gan\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"For input string: \\\"gan\\\"\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" // Bad index","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" e \u003d assertThrows(NumberFormatException.class, () -\u003e Parser.parse(\"delete gan\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"For input string: \\\"gan\\\"\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" // no index","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" e \u003d assertThrows(DukeBadInputException.class, () -\u003e Parser.parse(\"mark\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Quack requires exactly one number after the mark command\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" // no index","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" e \u003d assertThrows(DukeBadInputException.class, () -\u003e Parser.parse(\"delete\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Quack requires exactly one number after the delete command\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" public void parseCommand_badFlag_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" // no flag","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" Exception e \u003d assertThrows(DukeBadInputException.class, () -\u003e Parser.parse(\"deadline test\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Quack cant find the required /by flags, please provide quack with one please\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" // missing flag","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" e \u003d assertThrows(DukeBadInputException.class, () -\u003e Parser.parse(\"event test /from 2020-12-12 12:12\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Quack cant find the required /to flags, please provide quack with one please\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" //bad flag input","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" e \u003d assertThrows(DateTimeParseException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" Parser.parse(\"event test /from 2020-12-12 /to 2020-12-12 23:59\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Text \u00272020-12-12\u0027 could not be parsed at index 10\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" public void parseCommand_noDesc_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" // no desc todo","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" Exception e \u003d assertThrows(DukeBadInputException.class, () -\u003e Parser.parse(\"todo\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Quack doesn\u0027t understand an empty todo description, please provide one!!\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" // no desc event","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" e \u003d assertThrows(DukeBadInputException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" Parser.parse(\"event /from 2020-12-12 12:12 /to 2020-12-12 23:59\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Quack doesn\u0027t understand an empty description, please provide one!!\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" //no desc deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":" e \u003d assertThrows(DukeBadInputException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" Parser.parse(\"deadline /by 2020-12-12 12:12\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Quack doesn\u0027t understand an empty description, please provide one!!\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":" public void parseStorage_correctInputs() {","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":" // tod0 command and marked","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new TodoTask(\"testing1\", true), Parser.fromStorage(\"TODO#testing1#1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" // deadline command","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new DeadlineTask(LocalDateTime.parse(\"2023-10-01T23:59\"), \"test1\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":" Parser.fromStorage(\"DEADLINE#test1#0#2023-10-01T23:59\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":" // Event command and mark","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":" assertEquals(new EventTask(LocalDateTime.parse(\"2023-05-07T03:03\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":" LocalDateTime.parse(\"2023-05-07T03:05\"), \"testingEvent\", true),","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":" Parser.fromStorage(\"EVENT#testingEvent#1#2023-05-07T03:03#2023-05-07T03:05\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"mingyuanc"},"content":" } catch (DukeLoadingException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mingyuanc":125}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import duke.exception.DukeBadInputException;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" public void checkFile_correctInput() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" String[] expected \u003d new String[]{\"TODO#test#0\",","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" \"TODO#test1#1\",","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" \"DEADLINE#test2#0#2023-10-01T23:59\",","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" \"DEADLINE#test3#0#2024-01-01T12:00\",","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" \"DEADLINE#test4#0#2024-05-05T12:00\",","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" \"EVENT#test5#1#2023-05-07T03:03#2023-05-07T03:05\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" Storage storage \u003d new Storage(\"data/testData.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" List\u003cString\u003e ret \u003d storage.readFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" assertEquals(expected.length, ret.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 0; i \u003c expected.length; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" assertEquals(expected[i], ret.get(i));","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException | DukeBadInputException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" public void checkFile_notFile_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" new Storage(\"data/Data\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" new Storage(\"data/Data.json\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" } catch (IOException | DukeBadInputException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mingyuanc":47}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":" public void toString_correctInput() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"[T][ ] test\", new TodoTask(\"test\").toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"[T][X] test1\",","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":" new TodoTask(\"test1\", true).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"[D][ ] test2 (by: Sun 11:59PM, Oct 2023)\",","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":" new DeadlineTask(LocalDateTime.parse(\"2023-10-01T23:59\"), \"test2\").toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"[E][X] test3 (from: Sun 03:03AM, May 2023 to: Sun 03:05AM, May 2023)\",","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" new EventTask(LocalDateTime.parse(\"2023-05-07T03:03\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" LocalDateTime.parse(\"2023-05-07T03:05\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" \"test3\", true).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" public void getStored_correctInput() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"TODO#test#0\", new TodoTask(\"test\").getStored());","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"TODO#test1#1\",","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" new TodoTask(\"test1\", true).getStored());","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"DEADLINE#test2#0#2023-10-01T23:59\",","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" new DeadlineTask(LocalDateTime.parse(\"2023-10-01T23:59\"), \"test2\").getStored());","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"EVENT#test3#1#2023-05-07T03:03#2023-05-07T03:05\",","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" new EventTask(LocalDateTime.parse(\"2023-05-07T03:03\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" LocalDateTime.parse(\"2023-05-07T03:05\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" \"test3\", true).getStored());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mingyuanc":35}}] diff --git a/mingyuanc_ip_master/commits.json b/mingyuanc_ip_master/commits.json index aa2d305c..54741a6a 100644 --- a/mingyuanc_ip_master/commits.json +++ b/mingyuanc_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"mingyuanc":[{"date":"2023-08-21","commitResults":[{"hash":"e66b6547b5769b8505b1998cb87b4cc31812db2f","isMergeCommit":false,"messageTitle":"Renamed, Greet and exited","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":0}}},{"hash":"d04adc13d1f03d5970e1cc76dc9df46ffeda1d9c","isMergeCommit":false,"messageTitle":"renamed Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":10}}},{"hash":"9e79a98e7dab22bf0f1486a04182c5b8f1fd5c9e","isMergeCommit":false,"messageTitle":"updated logo","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":8}}},{"hash":"018270d8a28f10decb26b556158ecce939a721bb","isMergeCommit":false,"messageTitle":"Implemented Echo into Quack","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":29}}},{"hash":"ca20218bec2eb88d678ff8a6bdfb663047cc27c7","isMergeCommit":false,"messageTitle":"added final to constants","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"96191bddf3883e5b5ce24c9d91b9fa057711cdac","isMergeCommit":false,"messageTitle":"added the ability to store and access inputed text","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":9}}},{"hash":"e26903244ed14a6968abeb47f60be5c633d599d2","isMergeCommit":false,"messageTitle":"created a class task to store the task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":0}}},{"hash":"9f531379ce92879ce6858c5dc7bf2952286f0005","isMergeCommit":false,"messageTitle":"finished level3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":28}}},{"hash":"4e3cbc8f3ebc7527a45197e14a8d3c3e5636cca6","isMergeCommit":false,"messageTitle":"updated output messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-22","commitResults":[{"hash":"47e6ec7dcc791918565f95bbbcf0651fda3109ba","isMergeCommit":false,"messageTitle":"implemented subclasses for tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":0}}},{"hash":"3083a13b9def0a4a9fa8737a58fe6c147f8af1a0","isMergeCommit":false,"messageTitle":"created enum for possible commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}},{"hash":"b46ab61049da3f141ad973b5ac72a4113986c29f","isMergeCommit":false,"messageTitle":"Implemented a parser class to handle inputs","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":226,"deletions":19}}},{"hash":"841e53529c80e1a62c42ed43cd661884823c213a","isMergeCommit":false,"messageTitle":"added text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":16,"deletions":0},"java":{"insertions":55,"deletions":54}}},{"hash":"af459c8ab031fcbdec60794238516e0b2ecfdf42","isMergeCommit":false,"messageTitle":"added error handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":41}}},{"hash":"27e3c89ab2939bacaf44a5396c4567d6b165d287","isMergeCommit":false,"messageTitle":"Removed redundent field","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":24}}},{"hash":"a9571e6e73a93590a1ca131f932f3097815d9a3f","isMergeCommit":false,"messageTitle":"handled error where input cannot be casted to int","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":19}}},{"hash":"8b5cc1bd17500e0bcbbca73f8fae2f838645f794","isMergeCommit":false,"messageTitle":"edited error message to be more clear","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"8d3aaa46751785590f3644fe5a62b7cba606a3eb","isMergeCommit":false,"messageTitle":"updated tests to include delete command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}},{"hash":"e5f0ae0612929d00b76c298363424c824e7bb222","isMergeCommit":false,"messageTitle":"added delete to enum","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"a92e224d06ea850b264171b49156ce0270adbb82","isMergeCommit":false,"messageTitle":"handled the additional delete command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":6}}},{"hash":"4f068bc98c7684a4ccef6f1cfe30814ed1abd250","isMergeCommit":false,"messageTitle":"added delete into list of possible commands","messageBody":"","tags":["Level-6","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"dfc95660784e72f946616aa377c29fd9c3e9f110","isMergeCommit":false,"messageTitle":"Fix parser bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":31}}},{"hash":"4eab7ac2d3a6f5ef645c969cb296d82d0becca1e","isMergeCommit":false,"messageTitle":"add final to constants","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":29}}},{"hash":"4dff6375b8cf2a25360f68f554aac4f2ce504489","isMergeCommit":false,"messageTitle":"Updated docs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":2}}},{"hash":"390e105244dea9c8a32b9b333a8e4143c15242a3","isMergeCommit":false,"messageTitle":"add input field","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":24}}},{"hash":"ba45be07366f1b96889d2eb2fc98498688b9edf5","isMergeCommit":false,"messageTitle":"create Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":0}}},{"hash":"0d79929379b3a4810528e996243f320b5cabb490","isMergeCommit":false,"messageTitle":"update name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"36f695be12e6b04071d853f94bc14eb34ca20c0f","isMergeCommit":false,"messageTitle":"update name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":17}}},{"hash":"775ef2c418632fa28aaa6d77afce9b116f4d0347","isMergeCommit":false,"messageTitle":"implement storage class for persistent storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":49}}},{"hash":"65cdb1bc8d58bf6e29a65adb8de528d212781971","isMergeCommit":true,"messageTitle":"Merge Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"6f2cb7d89937a046be2158d2a68a23e049cda5f6","isMergeCommit":false,"messageTitle":"implement date time parameter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":14}}},{"hash":"6e9b78699854a4d84dc57702d6df15204a454c36","isMergeCommit":true,"messageTitle":"Merge Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"1acc40d9b159d626832ab8b75ab16e0f10bb9740","isMergeCommit":false,"messageTitle":"create Ui class to handle ui operations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":0}}},{"hash":"214c5222cdb6c95827e68edc7445b3bdac90f228","isMergeCommit":false,"messageTitle":"create task list class to handle operations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":0}}},{"hash":"cc0535be0b02e5f7ea5b9240ef53f05980a9babb","isMergeCommit":false,"messageTitle":"create exception to represent loading issues","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"5caed8250634045df096359d805ae48a7f16b9d9","isMergeCommit":false,"messageTitle":"implemente more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":124}}}]},{"date":"2023-08-30","commitResults":[{"hash":"2468600cb67c4008335ea1207c2bc3f7ab2f6bf0","isMergeCommit":false,"messageTitle":"fix task not storing marked bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":187,"deletions":61}}},{"hash":"6cea953c0174964f3d43150929093c4bf97b2e46","isMergeCommit":false,"messageTitle":"Update Tasks files naming and fixed bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":23}}},{"hash":"72183a794cfc77614c894e813de75496bb2a657c","isMergeCommit":false,"messageTitle":"Encapsulate command in their own class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":479,"deletions":0}}},{"hash":"2dd0803ef5adaae49f24a37636117b3f3ec9dc99","isMergeCommit":false,"messageTitle":"Move code around to follow OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":320}}},{"hash":"7c7e61403231c50c0a1b4bd059ec7a9a1536941a","isMergeCommit":false,"messageTitle":"Deleted Commands.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":37}}},{"hash":"95207a91d09b7802547cb7f86835bdca771ac478","isMergeCommit":true,"messageTitle":"Merge A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b58210bc3bcf06f5ba1b2a7b4a4deb84dc7e851e","isMergeCommit":false,"messageTitle":"Refactor into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":156,"deletions":35},"bat":{"insertions":1,"deletions":1},"md":{"insertions":13,"deletions":8}}},{"hash":"b279c1f9e833d5b3ae9ef355aa97c7ab5e010a75","isMergeCommit":true,"messageTitle":"Merge A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"96eafa077e1f7bed9193d74785c8d3f3bcbef1db","isMergeCommit":false,"messageTitle":"added gradle support","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"b6a0899fbcf5ea0824bb1acddddb3812b2c0bfda","isMergeCommit":false,"messageTitle":"add checkstyle support","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"4a6b10fbddfb3f5a558f87e9d2c62f46b5a49b13","isMergeCommit":true,"messageTitle":"Merge add-gradle-support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"e745e304428add280b4ff0fc49ee7a6a8cfabe31","isMergeCommit":false,"messageTitle":"add junit test to gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":9,"deletions":0}}},{"hash":"3bcffe1f0ac4b93adb5abcde63df0da95b281c8f","isMergeCommit":false,"messageTitle":"fix checkstyle error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":109}}},{"hash":"83dd3f9438270e2fcf71f2bd351909269ad7bbd5","isMergeCommit":false,"messageTitle":"add equals method for testing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":122,"deletions":1}}},{"hash":"0c4840e2b880828f32bb5d20d9b10b1b42e94e53","isMergeCommit":false,"messageTitle":"add date.txt to git ignore","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a19b2b4c46ebce9132c626e04bb102ac463cd047","isMergeCommit":false,"messageTitle":"implement parser test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":4}}},{"hash":"be995df3eb6410bc0fd2c00a0fa24d3a85507233","isMergeCommit":false,"messageTitle":"fix bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"e7f6bb6dc59c0688af87309683fc509530598db3","isMergeCommit":false,"messageTitle":"follow checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":62}}},{"hash":"0642a609cd80193ab7dca1ce4f9b73e598d1a6bc","isMergeCommit":false,"messageTitle":"implement unit test for storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":0}}},{"hash":"b026d633067fd562d989cd633d1f50ba8e89a5b9","isMergeCommit":false,"messageTitle":"implement unit test for storage","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0}}},{"hash":"168f91b5f5c980f99496901bc036d69fb98a2dcc","isMergeCommit":false,"messageTitle":"implement junit test for Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":0}}},{"hash":"66e16a79b5b85ee8d6ebb889c3a131966e6933cf","isMergeCommit":false,"messageTitle":"remove data.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1}}},{"hash":"95db3f4dc3f56eb80aca8cc83ede52edc0d0d068","isMergeCommit":false,"messageTitle":"fix edge case of empty string","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}},{"hash":"5afc9b0ee762140660eb189ca9bd9b2f14c1762d","isMergeCommit":true,"messageTitle":"Merge branch-A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"da8dffa9ed5d09fc80fa0b5378693de0651cd2c0","isMergeCommit":false,"messageTitle":"add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":33}}},{"hash":"ff3de88be4447e728dfe65dae74a396a426a94e4","isMergeCommit":false,"messageTitle":"check checkstyle","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":45}}},{"hash":"4e0bb4f55bb7b17f201b929cafb0bc47e7aeb797","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":3}}},{"hash":"380f625162693b3c955038619d7ca7423d1f554b","isMergeCommit":false,"messageTitle":"Add find command testcases","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"568cc162a9a7969aa4d7dc98e55265577bba5d72","isMergeCommit":true,"messageTitle":"Merge branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"05afe6d68c691171347124b958bf3b0c862cf240","isMergeCommit":true,"messageTitle":"Merge branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6b867b7e6c87ef6a62a73b4ccef95971f0fc5155","isMergeCommit":true,"messageTitle":"Merge branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"41ba9972533791ea3dc917e5624850cf6f915c2f","isMergeCommit":false,"messageTitle":"fix indentation for checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":48}}}]}]},"authorFileTypeContributionMap":{"mingyuanc":{"java":2062,"md":10,"fxml":0,"sh":0,"bat":1,"gradle":14,"txt":26}},"authorContributionVariance":{"mingyuanc":309864.5},"authorDisplayNameMap":{"mingyuanc":"CS2103T-W15-2 CHIN..YUAN"}} +{"authorDailyContributionsMap":{"mingyuanc":[{"date":"2023-08-21","commitResults":[{"hash":"e66b6547b5769b8505b1998cb87b4cc31812db2f","isMergeCommit":false,"messageTitle":"Renamed, Greet and exited","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":0}}},{"hash":"d04adc13d1f03d5970e1cc76dc9df46ffeda1d9c","isMergeCommit":false,"messageTitle":"renamed Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":10}}},{"hash":"9e79a98e7dab22bf0f1486a04182c5b8f1fd5c9e","isMergeCommit":false,"messageTitle":"updated logo","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":8}}},{"hash":"018270d8a28f10decb26b556158ecce939a721bb","isMergeCommit":false,"messageTitle":"Implemented Echo into Quack","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":29}}},{"hash":"ca20218bec2eb88d678ff8a6bdfb663047cc27c7","isMergeCommit":false,"messageTitle":"added final to constants","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"96191bddf3883e5b5ce24c9d91b9fa057711cdac","isMergeCommit":false,"messageTitle":"added the ability to store and access inputed text","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":9}}},{"hash":"e26903244ed14a6968abeb47f60be5c633d599d2","isMergeCommit":false,"messageTitle":"created a class task to store the task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":0}}},{"hash":"9f531379ce92879ce6858c5dc7bf2952286f0005","isMergeCommit":false,"messageTitle":"finished level3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":28}}},{"hash":"4e3cbc8f3ebc7527a45197e14a8d3c3e5636cca6","isMergeCommit":false,"messageTitle":"updated output messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-22","commitResults":[{"hash":"47e6ec7dcc791918565f95bbbcf0651fda3109ba","isMergeCommit":false,"messageTitle":"implemented subclasses for tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":0}}},{"hash":"3083a13b9def0a4a9fa8737a58fe6c147f8af1a0","isMergeCommit":false,"messageTitle":"created enum for possible commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}},{"hash":"b46ab61049da3f141ad973b5ac72a4113986c29f","isMergeCommit":false,"messageTitle":"Implemented a parser class to handle inputs","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":226,"deletions":19}}},{"hash":"841e53529c80e1a62c42ed43cd661884823c213a","isMergeCommit":false,"messageTitle":"added text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":16,"deletions":0},"java":{"insertions":55,"deletions":54}}},{"hash":"af459c8ab031fcbdec60794238516e0b2ecfdf42","isMergeCommit":false,"messageTitle":"added error handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":41}}},{"hash":"27e3c89ab2939bacaf44a5396c4567d6b165d287","isMergeCommit":false,"messageTitle":"Removed redundent field","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":24}}},{"hash":"a9571e6e73a93590a1ca131f932f3097815d9a3f","isMergeCommit":false,"messageTitle":"handled error where input cannot be casted to int","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":19}}},{"hash":"8b5cc1bd17500e0bcbbca73f8fae2f838645f794","isMergeCommit":false,"messageTitle":"edited error message to be more clear","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"8d3aaa46751785590f3644fe5a62b7cba606a3eb","isMergeCommit":false,"messageTitle":"updated tests to include delete command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}},{"hash":"e5f0ae0612929d00b76c298363424c824e7bb222","isMergeCommit":false,"messageTitle":"added delete to enum","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"a92e224d06ea850b264171b49156ce0270adbb82","isMergeCommit":false,"messageTitle":"handled the additional delete command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":6}}},{"hash":"4f068bc98c7684a4ccef6f1cfe30814ed1abd250","isMergeCommit":false,"messageTitle":"added delete into list of possible commands","messageBody":"","tags":["Level-6","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"dfc95660784e72f946616aa377c29fd9c3e9f110","isMergeCommit":false,"messageTitle":"Fix parser bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":31}}},{"hash":"4eab7ac2d3a6f5ef645c969cb296d82d0becca1e","isMergeCommit":false,"messageTitle":"add final to constants","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":29}}},{"hash":"4dff6375b8cf2a25360f68f554aac4f2ce504489","isMergeCommit":false,"messageTitle":"Updated docs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":2}}},{"hash":"390e105244dea9c8a32b9b333a8e4143c15242a3","isMergeCommit":false,"messageTitle":"add input field","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":24}}},{"hash":"ba45be07366f1b96889d2eb2fc98498688b9edf5","isMergeCommit":false,"messageTitle":"create Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":0}}},{"hash":"0d79929379b3a4810528e996243f320b5cabb490","isMergeCommit":false,"messageTitle":"update name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"36f695be12e6b04071d853f94bc14eb34ca20c0f","isMergeCommit":false,"messageTitle":"update name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":17}}},{"hash":"775ef2c418632fa28aaa6d77afce9b116f4d0347","isMergeCommit":false,"messageTitle":"implement storage class for persistent storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":49}}},{"hash":"65cdb1bc8d58bf6e29a65adb8de528d212781971","isMergeCommit":true,"messageTitle":"Merge Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"6f2cb7d89937a046be2158d2a68a23e049cda5f6","isMergeCommit":false,"messageTitle":"implement date time parameter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":14}}},{"hash":"6e9b78699854a4d84dc57702d6df15204a454c36","isMergeCommit":true,"messageTitle":"Merge Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"1acc40d9b159d626832ab8b75ab16e0f10bb9740","isMergeCommit":false,"messageTitle":"create Ui class to handle ui operations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":0}}},{"hash":"214c5222cdb6c95827e68edc7445b3bdac90f228","isMergeCommit":false,"messageTitle":"create task list class to handle operations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":0}}},{"hash":"cc0535be0b02e5f7ea5b9240ef53f05980a9babb","isMergeCommit":false,"messageTitle":"create exception to represent loading issues","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"5caed8250634045df096359d805ae48a7f16b9d9","isMergeCommit":false,"messageTitle":"implemente more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":124}}}]},{"date":"2023-08-30","commitResults":[{"hash":"2468600cb67c4008335ea1207c2bc3f7ab2f6bf0","isMergeCommit":false,"messageTitle":"fix task not storing marked bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":187,"deletions":61}}},{"hash":"6cea953c0174964f3d43150929093c4bf97b2e46","isMergeCommit":false,"messageTitle":"Update Tasks files naming and fixed bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":23}}},{"hash":"72183a794cfc77614c894e813de75496bb2a657c","isMergeCommit":false,"messageTitle":"Encapsulate command in their own class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":479,"deletions":0}}},{"hash":"2dd0803ef5adaae49f24a37636117b3f3ec9dc99","isMergeCommit":false,"messageTitle":"Move code around to follow OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":320}}},{"hash":"7c7e61403231c50c0a1b4bd059ec7a9a1536941a","isMergeCommit":false,"messageTitle":"Deleted Commands.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":37}}},{"hash":"95207a91d09b7802547cb7f86835bdca771ac478","isMergeCommit":true,"messageTitle":"Merge A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b58210bc3bcf06f5ba1b2a7b4a4deb84dc7e851e","isMergeCommit":false,"messageTitle":"Refactor into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":156,"deletions":35},"bat":{"insertions":1,"deletions":1},"md":{"insertions":13,"deletions":8}}},{"hash":"b279c1f9e833d5b3ae9ef355aa97c7ab5e010a75","isMergeCommit":true,"messageTitle":"Merge A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"96eafa077e1f7bed9193d74785c8d3f3bcbef1db","isMergeCommit":false,"messageTitle":"added gradle support","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"b6a0899fbcf5ea0824bb1acddddb3812b2c0bfda","isMergeCommit":false,"messageTitle":"add checkstyle support","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"4a6b10fbddfb3f5a558f87e9d2c62f46b5a49b13","isMergeCommit":true,"messageTitle":"Merge add-gradle-support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"e745e304428add280b4ff0fc49ee7a6a8cfabe31","isMergeCommit":false,"messageTitle":"add junit test to gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":9,"deletions":0}}},{"hash":"3bcffe1f0ac4b93adb5abcde63df0da95b281c8f","isMergeCommit":false,"messageTitle":"fix checkstyle error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":109}}},{"hash":"83dd3f9438270e2fcf71f2bd351909269ad7bbd5","isMergeCommit":false,"messageTitle":"add equals method for testing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":122,"deletions":1}}},{"hash":"0c4840e2b880828f32bb5d20d9b10b1b42e94e53","isMergeCommit":false,"messageTitle":"add date.txt to git ignore","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a19b2b4c46ebce9132c626e04bb102ac463cd047","isMergeCommit":false,"messageTitle":"implement parser test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":4}}},{"hash":"be995df3eb6410bc0fd2c00a0fa24d3a85507233","isMergeCommit":false,"messageTitle":"fix bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"e7f6bb6dc59c0688af87309683fc509530598db3","isMergeCommit":false,"messageTitle":"follow checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":62}}},{"hash":"0642a609cd80193ab7dca1ce4f9b73e598d1a6bc","isMergeCommit":false,"messageTitle":"implement unit test for storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":0}}},{"hash":"b026d633067fd562d989cd633d1f50ba8e89a5b9","isMergeCommit":false,"messageTitle":"implement unit test for storage","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0}}},{"hash":"168f91b5f5c980f99496901bc036d69fb98a2dcc","isMergeCommit":false,"messageTitle":"implement junit test for Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":0}}},{"hash":"66e16a79b5b85ee8d6ebb889c3a131966e6933cf","isMergeCommit":false,"messageTitle":"remove data.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1}}},{"hash":"95db3f4dc3f56eb80aca8cc83ede52edc0d0d068","isMergeCommit":false,"messageTitle":"fix edge case of empty string","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}},{"hash":"5afc9b0ee762140660eb189ca9bd9b2f14c1762d","isMergeCommit":true,"messageTitle":"Merge branch-A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"da8dffa9ed5d09fc80fa0b5378693de0651cd2c0","isMergeCommit":false,"messageTitle":"add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":33}}},{"hash":"ff3de88be4447e728dfe65dae74a396a426a94e4","isMergeCommit":false,"messageTitle":"check checkstyle","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":45}}},{"hash":"4e0bb4f55bb7b17f201b929cafb0bc47e7aeb797","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":3}}},{"hash":"380f625162693b3c955038619d7ca7423d1f554b","isMergeCommit":false,"messageTitle":"Add find command testcases","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"568cc162a9a7969aa4d7dc98e55265577bba5d72","isMergeCommit":true,"messageTitle":"Merge branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"05afe6d68c691171347124b958bf3b0c862cf240","isMergeCommit":true,"messageTitle":"Merge branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6b867b7e6c87ef6a62a73b4ccef95971f0fc5155","isMergeCommit":true,"messageTitle":"Merge branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"41ba9972533791ea3dc917e5624850cf6f915c2f","isMergeCommit":false,"messageTitle":"fix indentation for checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":48}}}]},{"date":"2023-09-05","commitResults":[{"hash":"de75a9aca4ef5863250ece935c6cb4214502ac84","isMergeCommit":false,"messageTitle":"Add GUI to Quack","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"fxml":{"insertions":124,"deletions":0},"java":{"insertions":164,"deletions":0}}},{"hash":"8973f879195d17f55b03ee47ffa8547705b6505d","isMergeCommit":false,"messageTitle":"Integrate Quack with GUI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":226}}},{"hash":"e3702fd9847eb81d6d0cdd9cad75755bab996cc3","isMergeCommit":false,"messageTitle":"Add missing javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":4}}},{"hash":"78d583f6e2c9e79f56467f8b01d29d2ee86494a1","isMergeCommit":true,"messageTitle":"Move to branch-Level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1331d169c01c8c628a94a676f6fa8f2760ff22e7","isMergeCommit":false,"messageTitle":"Fix minor bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":8}}},{"hash":"f15bc2dda1ea8c5d8341588b58f623def6c21b10","isMergeCommit":true,"messageTitle":"Merge branch-Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"4a1de1aae4fdb0dba6401a5ca88beadf994ee836","isMergeCommit":false,"messageTitle":"Delete I/O redirection style testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":20},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":0,"deletions":38}}},{"hash":"19cbd42e794f6865c074d5164bdb933b9954e6bd","isMergeCommit":false,"messageTitle":"Use Varargs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":14}}},{"hash":"277ec7d0d6948420b64774443320af05d1f04a8c","isMergeCommit":true,"messageTitle":"Merge branch-A-Varargs","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"mingyuanc":{"java":2120,"md":10,"fxml":124,"sh":0,"bat":0,"gradle":20,"txt":6}},"authorContributionVariance":{"mingyuanc":260002.03},"authorDisplayNameMap":{"mingyuanc":"CS2103T-W15-2 CHIN..YUAN"}} diff --git a/mounilsankar_ip_master/authorship.json b/mounilsankar_ip_master/authorship.json index 7e04de91..998eec6c 100644 --- a/mounilsankar_ip_master/authorship.json +++ b/mounilsankar_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":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-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":"-"},"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":"mounilsankar"},"content":" enableAssertions \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"mounilsankar":1,"-":42}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"D|0|return book |2019-10-15T18:00","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"E|0|join club |2019-01-14T19:00|2019-01-18T19:00","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mounilsankar":2}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":" * Represents the command line chat application Duke","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" * Constructs a Duke instance with the specified file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" * @param filePath File path which the Duke instance reads and writes from.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" tasks \u003d new TaskList(this.storage.readTasksFromFile());","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" private void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" Ui.greet();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" while(!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" Ui.showError(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" * Main method for the Duke instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" * @param args The command line arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"mounilsankar":49,"-":1}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.command.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidTaskException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":" * Represents a parser class to parse user commands for Duke","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" * Parses a string input and returns the corresponding Command object.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" * If the command is invalid throws InvalidTaskException","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The String command that is inputeby the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" * @return Command object corresponding to the string command.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" public static Command parse(String fullCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" //read first word in command","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" switch (words[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" return new ExitCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" return new DeleteCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" return new ListCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" return new MarkCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" return new UnmarkCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" return new TodoCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" return new DeadlineCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" return new EventCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" return new FindCommand(fullCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidTaskException();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":43}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" * Represents a storage class which takes care of the reading","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" * and writing of the list of tasks for Duke","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" //path for file to read/right to","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" private final String FILE_PATH;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" public static final String DATETIME_INPUT_FORMAT \u003d \"yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" public static final DateTimeFormatter dateTimeInputFormatter","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" \u003d DateTimeFormatter.ofPattern(DATETIME_INPUT_FORMAT);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" * Constructs a Storage instance with the specified filePath","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" * @param filePath The file path to read and write from","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" this.FILE_PATH \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" * Writes the tasks in the task list to a file as specified","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" * @param taskList The list of tasks to write","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" * @throws IOException Throws IOException when the writing is unsuccessful","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" public void writeTasksToFile(ArrayList\u003cTask\u003e taskList) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" //check if file path exists already or not","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" String fileDirectory \u003d \"./\" + FILE_PATH.split(\"/\",2)[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" File dir \u003d new File(fileDirectory);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" dir.mkdir();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" FileWriter fw \u003d new FileWriter(FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" fw.write(task.writeFileFormat() + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":" * Reads saved tasks from file path","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":" * @return Returns an arraylist of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":" * @throws FileNotFoundException Throws FileNotFoundException if the file path does not exist","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" public ArrayList\u003cTask\u003e readTasksFromFile() throws FileNotFoundException {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" ArrayList\u003cTask\u003e savedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":" Task task \u003d Task.readFromFile(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mounilsankar"},"content":" savedTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"mounilsankar"},"content":" return savedTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mounilsankar":69}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":" * A class to represent a list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new task list with the given list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The list of tasks to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" this.taskList \u003d tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" * @param t The task to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" public void addTask(Task t) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" this.taskList.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Now you have \" + this.taskList.size() + \" in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" * Gets the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" return this.taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" * @param i The index of the task to delete.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" public void deleteTask(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":" Task t \u003d this.taskList.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" this.taskList.remove(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" int length \u003d this.taskList.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Noted! I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Now you have \" + length + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"mounilsankar"},"content":" * Prints the tasks in the list that contain the String s.","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"mounilsankar"},"content":" * @param s The string to search among the tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"mounilsankar"},"content":" public void findMatching(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"mounilsankar"},"content":" int index \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"mounilsankar"},"content":" for (Task t : this.taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"mounilsankar"},"content":" if (t.contains(s)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"mounilsankar"},"content":" System.out.println(index + \".\" + t);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"mounilsankar"},"content":" index +\u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"mounilsankar"},"content":" * Prints the tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"mounilsankar"},"content":" public void printTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"mounilsankar"},"content":" int len \u003dthis.taskList.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"mounilsankar"},"content":" for (int i \u003d 0; i \u003c len; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"mounilsankar"},"content":" int task_number \u003d i + 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"mounilsankar"},"content":" Task t \u003d this.taskList.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"mounilsankar"},"content":" System.out.println(task_number","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"mounilsankar"},"content":" + \".\"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"mounilsankar"},"content":" + t);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":100}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":" * The Ui class handles user interface interactions and displays messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" final static String HORIZONTAL_LINE \u003d \"_____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" * Constructs a Ui object and initializes the scanner to read user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" public Ui() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" * Reads and returns a user command from the standard input.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" * @return A string representing the user\u0027s input command.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" String command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" return command;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" * Displays a horizontal line to separate messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" public static void showLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" * Displays a greeting message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" public static void greet() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" String logo \u003d \" .__\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" + \" ____ |__| ____ ____\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" + \"/ \\\\| |/ \\\\ / _ \\\\\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" + \"| | \\\\ | | ( \u003c_\u003e )\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" + \"|___| /__|___| /\\\\____/\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" + \" \\\\/ \\\\/\";","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Hello! I\u0027m NINO!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" * @param e A DukeException representing the error to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" public static void showError(DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":64}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":" * The Command class is an abstract base class for all commands that can be executed in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" * Each concrete subclass of Command represents a specific user command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" protected String fullCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new Command object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" public Command(String fullCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" this.fullCommand \u003d fullCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" * @return true if the command is an exit command; false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" * Executes the command, performing the necessary actions on the task list, user interface, and storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list to be operated on by the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface to display messages or interact with the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object to read from or write to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" public abstract void execute(TaskList tasks , Ui ui, Storage storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":38}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" * The DeadlineCommand class represents a command to add a Deadline task to the task list in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input and handles exceptions related to invalid input or date formatting.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new DeadlineCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" public DeadlineCommand(String fullCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" * Executes the deadline command, adding a new deadline task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list to which the deadline task will be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidArgumentException If the command is missing required arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidDateException If the date provided is in an invalid format.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) throws InvalidArgumentException, InvalidDateException {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d this.fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"deadline\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" String[] taskWithDeadline \u003d words[1].split(\"/\", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" String c \u003d taskWithDeadline[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" if(taskWithDeadline.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"deadline\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" String[] splitTask \u003d taskWithDeadline[1].split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" if (splitTask.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"deadline\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":" LocalDateTime deadline \u003d LocalDateTime.parse(splitTask[1], Storage.dateTimeInputFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":" Deadline t \u003d new Deadline(c, deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidDateException();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":65}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" * The DeleteCommand class represents a command to delete a task","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input and handles exceptions related to invalid input.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new DeleteCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" public DeleteCommand(String fullCommand) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" * Executes the Delete command, deleting a task in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list in which the task is to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidArgumentException If the command is missing required arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) throws InvalidArgumentException {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d this.fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" tasks.deleteTask(Integer.parseInt(words[1]) - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! I\u0027m sorry, please enter a valid index to mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":44}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" * The EventCommand class represents a command to add a Event task to the task list in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input and handles exceptions related to invalid input or date formatting.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new EventCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" public EventCommand(String fullCommand) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" * Executes the Event command, adding a new Event task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list to which the Event task will be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidArgumentException If the command is missing required arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidDateException If the date provided is in an invalid format.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) throws InvalidArgumentException, InvalidDateException {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d this.fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" String[] splitCommand \u003d words[1].split(\"/\", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" if (splitCommand.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" String c \u003d splitCommand[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" String[] splitDeadline \u003d splitCommand[1].split(\"/\", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" if (splitDeadline.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" if (splitDeadline[0].split(\" \", 2).length \u003c 2","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":" || splitDeadline[1].split(\" \", 2).length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" LocalDateTime from \u003d LocalDateTime.parse(splitDeadline[0].split(\" \", 2)[1].strip(), Storage.dateTimeInputFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" LocalDateTime to \u003d LocalDateTime.parse(splitDeadline[1].split(\" \", 2)[1].strip(), Storage.dateTimeInputFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":" Event t \u003d new Event(c, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidDateException();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":71}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" * The ExitCommand class represents a command to exit the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new ExitCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" public ExitCommand(String fullCommand) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" * Executes the Exit command, adding a new deadline task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list from which the tasks will be read from.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" * @throws DukeException If there is an error writing to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" storage.writeTasksToFile(tasks.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" throw new DukeException(\"Error in writing taskList to file!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":48}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" * The FindCommand class represents a command to search for tasks in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" * It searches for tasks that match a given keyword and displays the results to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new FindCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" public FindCommand(String fullCommand) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" * @return false since FindCommand is not an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit(){","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" * Executes the find command, searching for tasks that match a given keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list to search for matching tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidArgumentException If the command is missing the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d this.fullCommand.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" if(words.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"find\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" tasks.findMatching(words[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"mounilsankar":49}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":" * The ListCommand class represents a command to list current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"public class ListCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new ListCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" public ListCommand(String fullCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" * Executes the List command, printing the list of current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list which contains the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" tasks.printTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":40}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" * The MarkCommand class represents a command to mark tasks as complete.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input and handles exceptions related to invalid input.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new MarkCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" public MarkCommand(String fullCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" * Executes the Mark command, marking a task in tasks as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list containing the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidArgumentException If the command is missing required arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d this.fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" Task t \u003d tasks.getTasks().get(Integer.parseInt(words[1]) - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" t.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! I\u0027m sorry, please enter a valid index to mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":50}},{"path":"src/main/java/duke/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" * The TodoCommand class represents a command to add a Todo task to the task list in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input and handles exceptions related to invalid input.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new TodoCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" public TodoCommand(String fullCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" * Executes the Todo command, adding a new Todo task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list to which the Todo task will be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidArgumentException If the command is missing required arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) throws InvalidArgumentException {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d this.fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" Todo t \u003d new Todo(words[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":46}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" * The UnmarkCommand class represents a command to unmark tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input and handles exceptions related to invalid input.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new UnmarkCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" public UnmarkCommand(String fullCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" * Executes the Unmark command, marking a task in tasks as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list containing the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidArgumentException If the command is missing required arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) throws InvalidArgumentException {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d this.fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" Task t \u003d tasks.getTasks().get(Integer.parseInt(words[1]) - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" t.markUndone();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! I\u0027m sorry, please enter a valid index to mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":50}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":" * The DukeException class represents exceptions specific to the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":" * It is a subclass of RuntimeException and is used to handle custom application-related exceptions.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"public class DukeException extends RuntimeException{","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new DukeException with the specified error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" * @param message The error message that describes the cause of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"mounilsankar":17}},{"path":"src/main/java/duke/exception/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":" * The InvalidArgumentException class represents an exception that is thrown when invalid arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":" * are provided to a command in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":" * It is a subclass of DukeException and provides a specific error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"public class InvalidArgumentException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new InvalidArgumentException with a custom error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" * @param s The name of the command for which the arguments are invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" public InvalidArgumentException(String s) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but arguments to \" + s + \" cannot be empty\");","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"mounilsankar":18}},{"path":"src/main/java/duke/exception/InvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":" * The InvalidDateException class represents an exception that is thrown when invalid dates","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":" * are input to a command in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":" * It is a subclass of DukeException and provides a specific error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"public class InvalidDateException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new InvalidDateException with an error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" public InvalidDateException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but your date is in the incorrect format! \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" \"please key it in yyyy-mm-dd format! :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mounilsankar":17}},{"path":"src/main/java/duke/exception/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":" * The InvalidTaskException class represents an exception that is thrown when invalid taks","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":" * are input to a command in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":" * It is a subclass of DukeException and provides a specific error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"public class InvalidTaskException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new InvalidTaskException with an error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" public InvalidTaskException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"mounilsankar":16}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":" * The Deadline class represents a deadline task in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":" * It is a subclass of the Task class and inherits its properties and methods.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new Deadline object with the specified description and deadline date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" * @param deadline The deadline date and time of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" public Deadline(String description, LocalDateTime deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" * Reads a deadline task from a file and returns a corresponding Deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" * @param components An array of components parsed from a data file line.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" * @return A Deadline object representing the deadline task read from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" public static Deadline readFromFile(String[] components) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" boolean isDone \u003d components[1].equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" Deadline deadline \u003d new Deadline(components[2], LocalDateTime.parse(components[3]));","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" if (isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" deadline.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" return deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" * Returns the task in the format suitable for writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" * @return A string in the file format representing the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" public String writeFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" return \"D|\" + super.writeFileFormat() + \"|\" + this.deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" * Returns a string representation of the deadline task, including its status icon, description,","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" * and the deadline date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":" * @return A string representation of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" return \"[D] \"","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":" + super.toString()","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" + \"(by: \"","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" + this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"mounilsankar":63}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":" * The Event class represents an event task in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":" * It is a subclass of the Task class and inherits its properties and methods.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" private LocalDateTime start;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" private LocalDateTime end;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new Event object with the specified description, start, and end date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" * @param start The start date and time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" * @param end The end date and time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" public Event(String description, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" * Reads an event task from a file and returns a corresponding Event object.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * @param components An array of components parsed from a data file line.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" * @return An Event object representing the event task read from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" public static Event readFromFile(String[] components) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" boolean isDone \u003d components[1].equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" Event event \u003d new Event(components[2], LocalDateTime.parse(components[3]),","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" LocalDateTime.parse(components[4]));","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" if (isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" event.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" return event;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" * Returns the task in the format suitable for writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" * @return A string in the file format representing the event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" public String writeFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" //store as E|1/0|this.start|this.end","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" return \"E|\" + super.writeFileFormat() + \"|\" + this.start + \"|\" + this.end;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":" * Returns a string representation of the event task, including its status icon, description,","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" * and the start and end date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" * @return A string representation of the event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" return \"[E] \"","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":" + super.toString()","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":" + \"(from: \"","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"mounilsankar"},"content":" + this.start.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mounilsankar"},"content":" + \" to: \"","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"mounilsankar"},"content":" + this.end.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"mounilsankar"},"content":" + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"mounilsankar":69}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":" * The Task class represents a generic task in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" protected static final String DATETIME_INPUT_FORMAT \u003d \"yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" protected static final DateTimeFormatter dateTimeInputFormatter","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" \u003d DateTimeFormatter.ofPattern(DATETIME_INPUT_FORMAT);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new Task object with the specified description.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" * Reads a task from a file and returns a corresponding Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" * @param line The line containing task information from the data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * @return A Task object representing the task read from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" public static Task readFromFile(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" String[] components \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" switch(components[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" case(\"T\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" return Todo.readFromFile(components);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" case(\"D\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" return Deadline.readFromFile(components);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" case(\"E\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" return Event.readFromFile(components);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" * Returns the task in the format suitable for writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" * @return A string in the file format representing the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" public String writeFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" return (this.isDone ? \"1\" : \"0\") + \"|\" + this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" * Gets the status icon for the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" * @return \"X\" if the task is done, \" \" (space) otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"mounilsankar"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"mounilsankar"},"content":" public void markDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"mounilsankar"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"mounilsankar"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"mounilsankar"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"mounilsankar"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"mounilsankar"},"content":" * Returns a boolean value indicating if the tasks description contains the string s.","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"mounilsankar"},"content":" * @param s The String to be searched in task descripton","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"mounilsankar"},"content":" * @return A true if s in task description and false if not.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"mounilsankar"},"content":" public boolean contains(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"mounilsankar"},"content":" return this.description.contains(s);","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"mounilsankar"},"content":" * Returns a string representation of the task, including its status icon and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"mounilsankar"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":93,"author":{"gitId":"mounilsankar"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"mounilsankar"},"content":" return(\"[\"","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"mounilsankar"},"content":" + this.getStatusIcon()","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"mounilsankar"},"content":" + \"] \"","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"mounilsankar"},"content":" + this.description);","lastModifiedDate":"2023-08-23"},{"lineNumber":98,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"mounilsankar":99}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":" * The Todo class represents a to-do task in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":" * It is a subclass of the Task class and inherits its properties and methods.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new Todo object with the specified description.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" * Reads a todo task from a file and returns a corresponding Todo object.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" * @param components An array of components parsed from a data file line.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" * @return A Todo object representing the to-do task read from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" public static Todo readFromFile(String[] components) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" boolean isDone \u003d components[1].equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" Todo todo \u003d new Todo(components[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" if(isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" todo.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" return todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" * Returns the task in the format suitable for writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" * @return A string in the file format representing the todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" public String writeFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" return \"T|\" + super.writeFileFormat();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" * Returns a string representation of the todo task, including its status icon and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" * @return A string representation of the todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" return \"[T] \" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"mounilsankar":52}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.command.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidTaskException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" public void testParse_ValidCommands() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" // Test valid commands and their corresponding Command classes","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" assertEquals(ExitCommand.class, Parser.parse(\"bye\").getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" assertEquals(DeleteCommand.class, Parser.parse(\"delete 2\").getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" assertEquals(ListCommand.class, Parser.parse(\"list\").getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" assertEquals(MarkCommand.class, Parser.parse(\"mark 1\").getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" assertEquals(UnmarkCommand.class, Parser.parse(\"unmark 3\").getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" assertEquals(TodoCommand.class, Parser.parse(\"todo Buy groceries\").getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" assertEquals(DeadlineCommand.class, Parser.parse(\"deadline Submit report /by 2023-09-10 1900\").getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" assertEquals(EventCommand.class, Parser.parse(\"event Team meeting /from 2023-09-15 1900 /to 2023-09-15 2100\").getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" public void testParse_InvalidCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" // Test an invalid command","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" assertThrows(InvalidTaskException.class, () -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" Parser.parse(\"invalidCommand\");","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" assertThrows(InvalidTaskException.class, () -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" Parser.parse(\"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" assertThrows(InvalidTaskException.class, () -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" Parser.parse(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"mounilsankar":36}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" public void testAddTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" Todo task \u003d new Todo(\"Buy groceries\");","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" assertEquals(1, tasks.getTasks().size());","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" public void testDeleteTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" Todo task1 \u003d new Todo(\"Buy groceries\");","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" Todo task2 \u003d new Todo(\"Do dishes\");","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" tasks.addTask(task1);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" tasks.addTask(task2);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" assertEquals(2, tasks.getTasks().size());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" tasks.deleteTask(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" assertEquals(1, tasks.getTasks().size());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"mounilsankar":30}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"todo read book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"mounilsankar":11}}] +[{"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":"mounilsankar"},"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":"-"},"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":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" enableAssertions \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mounilsankar":4,"-":43}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"D|0|return book |2019-10-15T18:00","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"E|0|join club |2019-01-14T19:00|2019-01-18T19:00","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mounilsankar":2}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" * Represents the command line chat application Duke","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" * Constructs a Duke instance with the specified file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" * @param filePath File path which the Duke instance reads and writes from.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" tasks \u003d new TaskList(this.storage.readTasksFromFile());","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" private void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" Ui.greet();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" Ui.showError(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" * Main method for the Duke instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" * @param args The command line arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"mounilsankar":50,"-":1}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"import duke.command.TodoCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidTaskException;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" * Represents a parser class to parse user commands for Duke","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" * Parses a string input and returns the corresponding Command object.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" * If the command is invalid throws InvalidTaskException","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The String command that is inputeby the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" * @return Command object corresponding to the string command.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" public static Command parse(String fullCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" //read first word in command","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" switch (words[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" return new ExitCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" return new DeleteCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" return new ListCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" return new MarkCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" return new UnmarkCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" return new TodoCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" return new DeadlineCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" return new EventCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" return new FindCommand(fullCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidTaskException();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":52}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" * Represents a storage class which takes care of the reading","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" * and writing of the list of tasks for Duke","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" public static final String DATETIME_INPUT_FORMAT \u003d \"yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" public static final DateTimeFormatter","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" DATE_TIME_INPUT_FORMATTER \u003d DateTimeFormatter.ofPattern(DATETIME_INPUT_FORMAT);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" private final String FILE_PATH;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" * Constructs a Storage instance with the specified filePath","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" * @param filePath The file path to read and write from","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" this.FILE_PATH \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" * Writes the tasks in the task list to a file as specified","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" * @param taskList The list of tasks to write","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" * @throws IOException Throws IOException when the writing is unsuccessful","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" public void writeTasksToFile(ArrayList\u003cTask\u003e taskList) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" //check if file path exists already or not","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" String fileDirectory \u003d \"./\" + FILE_PATH.split(\"/\", 2)[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" File dir \u003d new File(fileDirectory);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" dir.mkdir();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" FileWriter fw \u003d new FileWriter(FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" fw.write(task.writeFileFormat() + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":" * Reads saved tasks from file path","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":" * @return Returns an arraylist of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":" * @throws FileNotFoundException Throws FileNotFoundException if the file path does not exist","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" public ArrayList\u003cTask\u003e readTasksFromFile() throws FileNotFoundException {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" ArrayList\u003cTask\u003e savedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":" Task task \u003d Task.readFromFile(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"mounilsankar"},"content":" savedTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"mounilsankar"},"content":" return savedTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mounilsankar":69}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" * A class to represent a list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new task list with the given list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The list of tasks to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" this.taskList \u003d tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" * @param t The task to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" public void addTask(Task t) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" this.taskList.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Now you have \" + this.taskList.size() + \" in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" * Gets the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" return this.taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" * @param i The index of the task to delete.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" public void deleteTask(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" Task t \u003d this.taskList.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" this.taskList.remove(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":" int length \u003d this.taskList.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Noted! I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"mounilsankar"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Now you have \" + length + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"mounilsankar"},"content":" * Prints the tasks in the list that contain the String s.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"mounilsankar"},"content":" * @param s The string to search among the tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"mounilsankar"},"content":" public void findMatching(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"mounilsankar"},"content":" int index \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"mounilsankar"},"content":" for (Task t : this.taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"mounilsankar"},"content":" if (t.contains(s)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"mounilsankar"},"content":" System.out.println(index + \".\" + t);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"mounilsankar"},"content":" index +\u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"mounilsankar"},"content":" * Prints the tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"mounilsankar"},"content":" public void printTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"mounilsankar"},"content":" int len \u003d this.taskList.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"mounilsankar"},"content":" for (int i \u003d 0; i \u003c len; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"mounilsankar"},"content":" int taskNumber \u003d i + 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"mounilsankar"},"content":" Task t \u003d this.taskList.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"mounilsankar"},"content":" System.out.println(taskNumber","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"mounilsankar"},"content":" + \".\"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"mounilsankar"},"content":" + t);","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":102}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":" * The Ui class handles user interface interactions and displays messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" private static final String HORIZONTAL_LINE \u003d \"_____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" * Constructs a Ui object and initializes the scanner to read user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" public Ui() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" * Reads and returns a user command from the standard input.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" * @return A string representing the user\u0027s input command.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" String command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" return command;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" * Displays a horizontal line to separate messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" public static void showLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" * Displays a greeting message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" public static void greet() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" String logo \u003d \" .__\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" + \" ____ |__| ____ ____\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" + \"/ \\\\| |/ \\\\ / _ \\\\\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" + \"| | \\\\ | | ( \u003c_\u003e )\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" + \"|___| /__|___| /\\\\____/\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" + \" \\\\/ \\\\/\";","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Hello! I\u0027m NINO!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":" * @param e A DukeException representing the error to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" public static void showError(DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":65}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":" * The Command class is an abstract base class for all commands that can be executed in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" * Each concrete subclass of Command represents a specific user command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" protected String fullCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new Command object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" public Command(String fullCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" this.fullCommand \u003d fullCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" * @return true if the command is an exit command; false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" * Executes the command, performing the necessary actions on the task list, user interface, and storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list to be operated on by the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface to display messages or interact with the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object to read from or write to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" public abstract void execute(TaskList tasks , Ui ui, Storage storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":38}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" * The DeadlineCommand class represents a command to add a Deadline task to the task list in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input and handles exceptions related to invalid input or date formatting.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new DeadlineCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" public DeadlineCommand(String fullCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * Executes the deadline command, adding a new deadline task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list to which the deadline task will be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidArgumentException If the command is missing required arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidDateException If the date provided is in an invalid format.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) throws InvalidArgumentException, InvalidDateException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d this.fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"deadline\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" String[] taskWithDeadline \u003d words[1].split(\"/\", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" String c \u003d taskWithDeadline[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" if (taskWithDeadline.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"deadline\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" String[] splitTask \u003d taskWithDeadline[1].split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" if (splitTask.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"deadline\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":" LocalDateTime deadline \u003d LocalDateTime.parse(splitTask[1], Storage.DATE_TIME_INPUT_FORMATTER);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":" Deadline t \u003d new Deadline(c, deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidDateException();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":66}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" * The DeleteCommand class represents a command to delete a task","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input and handles exceptions related to invalid input.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new DeleteCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" public DeleteCommand(String fullCommand) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" * Executes the Delete command, deleting a task in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list in which the task is to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidArgumentException If the command is missing required arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) throws InvalidArgumentException {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d this.fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" tasks.deleteTask(Integer.parseInt(words[1]) - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! I\u0027m sorry, please enter a valid index to mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":44}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" * The EventCommand class represents a command to add a Event task to the task list in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input and handles exceptions related to invalid input or date formatting.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new EventCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" public EventCommand(String fullCommand) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * Executes the Event command, adding a new Event task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list to which the Event task will be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidArgumentException If the command is missing required arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidDateException If the date provided is in an invalid format.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) throws InvalidArgumentException, InvalidDateException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d this.fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" String[] splitCommand \u003d words[1].split(\"/\", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" if (splitCommand.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" String c \u003d splitCommand[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" String[] splitDeadline \u003d splitCommand[1].split(\"/\", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" if (splitDeadline.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":" if (splitDeadline[0].split(\" \", 2).length \u003c 2","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":" || splitDeadline[1].split(\" \", 2).length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" LocalDateTime from \u003d LocalDateTime.parse(splitDeadline[0].split(\" \", 2)[1]","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":" .strip(), Storage.DATE_TIME_INPUT_FORMATTER);","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" LocalDateTime to \u003d LocalDateTime.parse(splitDeadline[1].split(\" \", 2)[1]","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" .strip(), Storage.DATE_TIME_INPUT_FORMATTER);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" Event t \u003d new Event(c, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidDateException();","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":74}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" * The ExitCommand class represents a command to exit the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new ExitCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" public ExitCommand(String fullCommand) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" * Executes the Exit command, adding a new deadline task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list from which the tasks will be read from.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" * @throws DukeException If there is an error writing to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" storage.writeTasksToFile(tasks.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" throw new DukeException(\"Error in writing taskList to file!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":48}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" * The FindCommand class represents a command to search for tasks in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" * It searches for tasks that match a given keyword and displays the results to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new FindCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" public FindCommand(String fullCommand) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" * @return false since FindCommand is not an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" * Executes the find command, searching for tasks that match a given keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list to search for matching tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidArgumentException If the command is missing the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d this.fullCommand.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"find\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" tasks.findMatching(words[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"mounilsankar":49}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":" * The ListCommand class represents a command to list current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new ListCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" public ListCommand(String fullCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" * Executes the List command, printing the list of current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list which contains the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" tasks.printTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":39}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" * The MarkCommand class represents a command to mark tasks as complete.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input and handles exceptions related to invalid input.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new MarkCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" public MarkCommand(String fullCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" * Executes the Mark command, marking a task in tasks as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list containing the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidArgumentException If the command is missing required arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d this.fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" Task t \u003d tasks.getTasks().get(Integer.parseInt(words[1]) - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" t.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! I\u0027m sorry, please enter a valid index to mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":50}},{"path":"src/main/java/duke/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" * The TodoCommand class represents a command to add a Todo task to the task list in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input and handles exceptions related to invalid input.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new TodoCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" public TodoCommand(String fullCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" * Executes the Todo command, adding a new Todo task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list to which the Todo task will be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidArgumentException If the command is missing required arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) throws InvalidArgumentException {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d this.fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" Todo t \u003d new Todo(words[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":46}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" * The UnmarkCommand class represents a command to unmark tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" * It parses the user input and handles exceptions related to invalid input.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new UnmarkCommand object with the specified full command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" * @param fullCommand The full command string as entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" public UnmarkCommand(String fullCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" super(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" * Executes the Unmark command, marking a task in tasks as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" * @param tasks The task list containing the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * @param storage The storage object for reading from or writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" * @throws InvalidArgumentException If the command is missing required arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" public void execute(TaskList tasks , Ui ui, Storage storage) throws InvalidArgumentException {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" String[] words \u003d this.fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" Task t \u003d tasks.getTasks().get(Integer.parseInt(words[1]) - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" t.markUndone();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! I\u0027m sorry, please enter a valid index to mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"mounilsankar":50}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":" * The DukeException class represents exceptions specific to the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":" * It is a subclass of RuntimeException and is used to handle custom application-related exceptions.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"public class DukeException extends RuntimeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new DukeException with the specified error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" * @param message The error message that describes the cause of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"mounilsankar":17}},{"path":"src/main/java/duke/exception/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":" * The InvalidArgumentException class represents an exception that is thrown when invalid arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":" * are provided to a command in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":" * It is a subclass of DukeException and provides a specific error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"public class InvalidArgumentException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new InvalidArgumentException with a custom error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" * @param s The name of the command for which the arguments are invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" public InvalidArgumentException(String s) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but arguments to \" + s + \" cannot be empty\");","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"mounilsankar":18}},{"path":"src/main/java/duke/exception/InvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":" * The InvalidDateException class represents an exception that is thrown when invalid dates","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":" * are input to a command in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":" * It is a subclass of DukeException and provides a specific error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"public class InvalidDateException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new InvalidDateException with an error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" public InvalidDateException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but your date is in the incorrect format! \"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" + \"please key it in yyyy-mm-dd format! :-(\");","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"mounilsankar":17}},{"path":"src/main/java/duke/exception/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":" * The InvalidTaskException class represents an exception that is thrown when invalid taks","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":" * are input to a command in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":" * It is a subclass of DukeException and provides a specific error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"public class InvalidTaskException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new InvalidTaskException with an error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" public InvalidTaskException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"mounilsankar":16}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":" * The Deadline class represents a deadline task in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":" * It is a subclass of the Task class and inherits its properties and methods.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new Deadline object with the specified description and deadline date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" * @param deadline The deadline date and time of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" public Deadline(String description, LocalDateTime deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" * Reads a deadline task from a file and returns a corresponding Deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" * @param components An array of components parsed from a data file line.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" * @return A Deadline object representing the deadline task read from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" public static Deadline readFromFile(String[] components) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" boolean isDone \u003d components[1].equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" Deadline deadline \u003d new Deadline(components[2], LocalDateTime.parse(components[3]));","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" if (isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" deadline.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" return deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" * Returns the task in the format suitable for writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" * @return A string in the file format representing the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" public String writeFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" return \"D|\" + super.writeFileFormat() + \"|\" + this.deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" * Returns a string representation of the deadline task, including its status icon, description,","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" * and the deadline date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":" * @return A string representation of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" return \"[D] \"","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":" + super.toString()","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" + \"(by: \"","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" + this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"mounilsankar":63}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":" * The Event class represents an event task in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":" * It is a subclass of the Task class and inherits its properties and methods.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" private LocalDateTime start;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" private LocalDateTime end;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new Event object with the specified description, start, and end date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" * @param start The start date and time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" * @param end The end date and time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" public Event(String description, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" * Reads an event task from a file and returns a corresponding Event object.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" * @param components An array of components parsed from a data file line.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" * @return An Event object representing the event task read from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" public static Event readFromFile(String[] components) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" boolean isDone \u003d components[1].equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" Event event \u003d new Event(components[2], LocalDateTime.parse(components[3]),","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" LocalDateTime.parse(components[4]));","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" if (isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" event.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" return event;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" * Returns the task in the format suitable for writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" * @return A string in the file format representing the event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" public String writeFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" //store as E|1/0|this.start|this.end","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" return \"E|\" + super.writeFileFormat() + \"|\" + this.start + \"|\" + this.end;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":" * Returns a string representation of the event task, including its status icon, description,","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" * and the start and end date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" * @return A string representation of the event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" return \"[E] \"","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":" + super.toString()","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":" + \"(from: \"","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"mounilsankar"},"content":" + this.start.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"mounilsankar"},"content":" + \" to: \"","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"mounilsankar"},"content":" + this.end.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"mounilsankar"},"content":" + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"mounilsankar":69}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":" * The Task class represents a generic task in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":" protected static final String DATETIME_INPUT_FORMAT \u003d \"yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new Task object with the specified description.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" * Reads a task from a file and returns a corresponding Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" * @param line The line containing task information from the data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" * @return A Task object representing the task read from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" public static Task readFromFile(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" String[] components \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" switch(components[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" case(\"T\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" return Todo.readFromFile(components);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" case(\"D\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" return Deadline.readFromFile(components);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" case(\"E\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" return Event.readFromFile(components);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" * Returns the task in the format suitable for writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" * @return A string in the file format representing the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" public String writeFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" return (this.isDone ? \"1\" : \"0\") + \"|\" + this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" * Gets the status icon for the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"mounilsankar"},"content":" * @return \"X\" if the task is done, \" \" (space) otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"mounilsankar"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"mounilsankar"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"mounilsankar"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"mounilsankar"},"content":" public void markDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"mounilsankar"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"mounilsankar"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"mounilsankar"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"mounilsankar"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"mounilsankar"},"content":" * Returns a boolean value indicating if the tasks description contains the string s.","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"mounilsankar"},"content":" * @param s The String to be searched in task descripton","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"mounilsankar"},"content":" * @return A true if s in task description and false if not.","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"mounilsankar"},"content":" public boolean contains(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"mounilsankar"},"content":" return this.description.contains(s);","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"mounilsankar"},"content":" * Returns a string representation of the task, including its status icon and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"mounilsankar"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"mounilsankar"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"mounilsankar"},"content":" return (\"[\"","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"mounilsankar"},"content":" + this.getStatusIcon()","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"mounilsankar"},"content":" + \"] \"","lastModifiedDate":"2023-08-23"},{"lineNumber":93,"author":{"gitId":"mounilsankar"},"content":" + this.description);","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"mounilsankar":95}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":" * The Todo class represents a to-do task in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":" * It is a subclass of the Task class and inherits its properties and methods.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" * Constructs a new Todo object with the specified description.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" * Reads a todo task from a file and returns a corresponding Todo object.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" * @param components An array of components parsed from a data file line.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" * @return A Todo object representing the to-do task read from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" public static Todo readFromFile(String[] components) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" boolean isDone \u003d components[1].equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" Todo todo \u003d new Todo(components[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" if (isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" todo.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" return todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" * Returns the task in the format suitable for writing to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" * @return A string in the file format representing the todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" public String writeFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" return \"T|\" + super.writeFileFormat();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" * Returns a string representation of the todo task, including its status icon and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" * @return A string representation of the todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"mounilsankar"},"content":" return \"[T] \" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"mounilsankar":52}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":"import duke.command.TodoCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":"import duke.exception.InvalidTaskException;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" public void parse_validCommands() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" // Test valid commands and their corresponding Command classes","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" assertEquals(ExitCommand.class, Parser.parse(\"bye\").getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" assertEquals(DeleteCommand.class, Parser.parse(\"delete 2\").getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" assertEquals(ListCommand.class, Parser.parse(\"list\").getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" assertEquals(MarkCommand.class, Parser.parse(\"mark 1\").getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" assertEquals(UnmarkCommand.class, Parser.parse(\"unmark 3\").getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" assertEquals(TodoCommand.class, Parser.parse(\"todo Buy groceries\").getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" assertEquals(DeadlineCommand.class,","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":" Parser.parse(\"deadline Submit report /by 2023-09-10 1900\")","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":" .getClass());","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":" assertEquals(EventCommand.class,","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"mounilsankar"},"content":" Parser.parse(\"event Team meeting /from 2023-09-15 1900 /to 2023-09-15 2100\")","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"mounilsankar"},"content":" .getClass());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"mounilsankar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"mounilsankar"},"content":" public void parse_invalidCommand_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"mounilsankar"},"content":" // Test an invalid command","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"mounilsankar"},"content":" assertThrows(InvalidTaskException.class, () -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"mounilsankar"},"content":" Parser.parse(\"invalidCommand\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"mounilsankar"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"mounilsankar"},"content":" assertThrows(InvalidTaskException.class, () -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"mounilsankar"},"content":" Parser.parse(\"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"mounilsankar"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"mounilsankar"},"content":" assertThrows(InvalidTaskException.class, () -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"mounilsankar"},"content":" Parser.parse(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"mounilsankar"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"mounilsankar":49}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":" public void testAddTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"mounilsankar"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"mounilsankar"},"content":" Todo task \u003d new Todo(\"Buy groceries\");","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"mounilsankar"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"mounilsankar"},"content":" assertEquals(1, tasks.getTasks().size());","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"mounilsankar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"mounilsankar"},"content":" public void testDeleteTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"mounilsankar"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"mounilsankar"},"content":" Todo task1 \u003d new Todo(\"Buy groceries\");","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"mounilsankar"},"content":" Todo task2 \u003d new Todo(\"Do dishes\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"mounilsankar"},"content":" tasks.addTask(task1);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"mounilsankar"},"content":" tasks.addTask(task2);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"mounilsankar"},"content":" assertEquals(2, tasks.getTasks().size());","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"mounilsankar"},"content":" tasks.deleteTask(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"mounilsankar"},"content":" assertEquals(1, tasks.getTasks().size());","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"mounilsankar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"mounilsankar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"mounilsankar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"mounilsankar":31}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"mounilsankar"},"content":"todo read book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"mounilsankar"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"mounilsankar"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"mounilsankar"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"mounilsankar"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"mounilsankar"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"mounilsankar"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"mounilsankar"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"mounilsankar"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"mounilsankar"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"mounilsankar"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"mounilsankar":11}}] diff --git a/mounilsankar_ip_master/commits.json b/mounilsankar_ip_master/commits.json index f8608f99..0f6f9a89 100644 --- a/mounilsankar_ip_master/commits.json +++ b/mounilsankar_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"mounilsankar":[{"date":"2023-08-22","commitResults":[{"hash":"22eaa6c789698fe5ad3d34f8bfb6d2561a53a18d","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":5}}},{"hash":"54db017ee8cc05dea3cdfa6a93429222c39da78b","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}},{"hash":"0cab647f2ce85320bf32a3a8bf0e6c6822a6fdf9","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}}]},{"date":"2023-08-23","commitResults":[{"hash":"d90d0544cf68a30c201cffe16320411f15ad3c43","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":3}}},{"hash":"0da0051a82c7e4cecd7433f43204102497d3a430","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":6}}},{"hash":"4e4ad2f623d25ad309e861af76982b977e92d7a7","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":11}}},{"hash":"9fe5ab4074889995f20540a9e15604ae7529eb82","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":4,"deletions":4}}}]},{"date":"2023-08-24","commitResults":[{"hash":"4ea08876d674a9ca9ce4dbbf32e167250980a031","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":135,"deletions":72}}},{"hash":"00f115590c2ff2d3a9a7cd914e1fec88bb47f758","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"a22490cccc8b6f148796d2bf2aaf85eedadfe268","isMergeCommit":false,"messageTitle":"Implemented Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":1}}},{"hash":"54c434726b93d52a3460424ce7d0e541cfc19833","isMergeCommit":false,"messageTitle":"Merge branck-Level-7 to master","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}},{"hash":"df9470c79e6e3245d626644ffbadc6e512f343f4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 with master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"976bc582c19a0aeb16e653477342b9cc87ca0df2","isMergeCommit":false,"messageTitle":"Implemented Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":4},"java":{"insertions":60,"deletions":28}}},{"hash":"1e52f53109713d7aa4e625c734beb0fd7742b47d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 with master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"8eb475db3c0ba3fd5ed40d1099a94319fc8e860c","isMergeCommit":false,"messageTitle":"Implemented A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":364,"deletions":186}}},{"hash":"37e7b9062e2504176331dfedfddc6c9788a25149","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-moreOOP\u0027 with master","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"f0cdf49fbcece8499e2eec6050cbd95dad94f951","isMergeCommit":false,"messageTitle":"Implemented A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":9}}},{"hash":"af9c85fbc7f3d201a38c5190e81bc661761c2ef8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027 with master","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"753270ab887848c664ef1b1471de8ff784f9de11","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 to master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b929975db0f989bde9e3731d79eb967323f87710","isMergeCommit":false,"messageTitle":"Implemented A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"c779ec6d2cd55fa1f09e71720686a99ad5f7360d","isMergeCommit":false,"messageTitle":"Implemented A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":26}}},{"hash":"54c7354c4d601804b7262bfffa63caa0613e3c99","isMergeCommit":false,"messageTitle":"Implemented A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":461,"deletions":15}}},{"hash":"e38ff0acb749ccc51323ec8d86f4b995c862d06a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027 with master","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"8f4324cf171ab8ed9400c607cbd5fcf0920733ff","isMergeCommit":false,"messageTitle":"Implemented A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":18}}},{"hash":"261e40550a5694b9eb5c6ee40c10f001419596d4","isMergeCommit":false,"messageTitle":"Implemented Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":1}}},{"hash":"c1aeb9cc7cd1975b15424fc8d097aea2ba94dc2f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027 to master","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"3eb3d051e5f5a804d96f3b846660ac55521df757","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 with master","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"mounilsankar":{"java":1243,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":13}},"authorContributionVariance":{"mounilsankar":52670.92},"authorDisplayNameMap":{"mounilsankar":"CS2103T-T08-1 MOUN..NKAR"}} +{"authorDailyContributionsMap":{"mounilsankar":[{"date":"2023-08-22","commitResults":[{"hash":"22eaa6c789698fe5ad3d34f8bfb6d2561a53a18d","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":5}}},{"hash":"54db017ee8cc05dea3cdfa6a93429222c39da78b","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}},{"hash":"0cab647f2ce85320bf32a3a8bf0e6c6822a6fdf9","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}}]},{"date":"2023-08-23","commitResults":[{"hash":"d90d0544cf68a30c201cffe16320411f15ad3c43","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":3}}},{"hash":"0da0051a82c7e4cecd7433f43204102497d3a430","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":6}}},{"hash":"4e4ad2f623d25ad309e861af76982b977e92d7a7","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":11}}},{"hash":"9fe5ab4074889995f20540a9e15604ae7529eb82","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":4,"deletions":4}}}]},{"date":"2023-08-24","commitResults":[{"hash":"4ea08876d674a9ca9ce4dbbf32e167250980a031","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":135,"deletions":72}}},{"hash":"00f115590c2ff2d3a9a7cd914e1fec88bb47f758","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"a22490cccc8b6f148796d2bf2aaf85eedadfe268","isMergeCommit":false,"messageTitle":"Implemented Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":1}}},{"hash":"54c434726b93d52a3460424ce7d0e541cfc19833","isMergeCommit":false,"messageTitle":"Merge branck-Level-7 to master","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}},{"hash":"df9470c79e6e3245d626644ffbadc6e512f343f4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 with master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"976bc582c19a0aeb16e653477342b9cc87ca0df2","isMergeCommit":false,"messageTitle":"Implemented Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":4},"java":{"insertions":60,"deletions":28}}},{"hash":"1e52f53109713d7aa4e625c734beb0fd7742b47d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 with master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"8eb475db3c0ba3fd5ed40d1099a94319fc8e860c","isMergeCommit":false,"messageTitle":"Implemented A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":364,"deletions":186}}},{"hash":"37e7b9062e2504176331dfedfddc6c9788a25149","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-moreOOP\u0027 with master","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"f0cdf49fbcece8499e2eec6050cbd95dad94f951","isMergeCommit":false,"messageTitle":"Implemented A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":9}}},{"hash":"af9c85fbc7f3d201a38c5190e81bc661761c2ef8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027 with master","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"753270ab887848c664ef1b1471de8ff784f9de11","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 to master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b929975db0f989bde9e3731d79eb967323f87710","isMergeCommit":false,"messageTitle":"Implemented A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"c779ec6d2cd55fa1f09e71720686a99ad5f7360d","isMergeCommit":false,"messageTitle":"Implemented A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":26}}},{"hash":"54c7354c4d601804b7262bfffa63caa0613e3c99","isMergeCommit":false,"messageTitle":"Implemented A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":461,"deletions":15}}},{"hash":"e38ff0acb749ccc51323ec8d86f4b995c862d06a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027 with master","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"8f4324cf171ab8ed9400c607cbd5fcf0920733ff","isMergeCommit":false,"messageTitle":"Implemented A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":18}}},{"hash":"261e40550a5694b9eb5c6ee40c10f001419596d4","isMergeCommit":false,"messageTitle":"Implemented Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":1}}},{"hash":"c1aeb9cc7cd1975b15424fc8d097aea2ba94dc2f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027 to master","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"3eb3d051e5f5a804d96f3b846660ac55521df757","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 with master","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"bfc5c9fb3caa2109ce3d1240d5d6582b14bbd6cf","isMergeCommit":false,"messageTitle":"Implemented A-Checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"java":{"insertions":133,"deletions":107}}}]}]},"authorFileTypeContributionMap":{"mounilsankar":{"java":1269,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":4,"txt":13}},"authorContributionVariance":{"mounilsankar":46529.92},"authorDisplayNameMap":{"mounilsankar":"CS2103T-T08-1 MOUN..NKAR"}} diff --git a/nananakx-x_ip_master/authorship.json b/nananakx-x_ip_master/authorship.json index c82f870f..40788954 100644 --- a/nananakx-x_ip_master/authorship.json +++ b/nananakx-x_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":" * Represents Duke, a Personal Assistant Chatbot that helps a person to keep track of","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" * various things. The name Duke was chosen as a placeholder name, in honor of Duke,","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" * the Java Mascot. The current name of the Chatbot is John.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":"public class Duke {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" private Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" private Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" * Constructor for a Duke object.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" * Initialises the ui, storage, and taskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" public Duke() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" storage \u003d new Storage(\"./data/duke.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" taskList \u003d new TaskList(storage.retrieveData());","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" * Starts the Chatbot and continuously reads user input, processes commands,","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" * and provides responses until the user exits.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" public void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" storage.createFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" ui.startMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" ui.promptReply();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" ui.endMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" storage.save(taskList.getAllTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" new Parser().processCommand(command, taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":" sc.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" * Our main method for the Chatbot to work. It starts the Chatbot by calling","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":" * the run method.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":" * @param args The command-line arguments.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":" new Duke().run();","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"nananakx-x":64,"-":1}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import duke.exception.InvalidCommandException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import duke.exception.InvalidDeadlineException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"import duke.exception.InvalidDescriptionException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"import duke.exception.InvalidEventException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"import duke.exception.InvalidNumberException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" * This class deals with making sense of the user command.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" private Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" public Parser() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The list of tasks to display.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" public static void printList(TaskList taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" for (int i \u003d 1; i \u003c\u003d taskList.getSize(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" // Adding toString() to use the overridden one in duke.task.Task, etc.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" System.out.println(i + \". \" + taskList.getTask(i - 1).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" * Marks a task as done and displays a message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command to mark a task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The list of tasks to update.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" * @throws Exception If an invalid number is given.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" public void printMark(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" // Space behind is needed!, number index \u003d 5","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" // Convert substring to int, -1 for index","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" int taskPos \u003d Integer.parseInt(command.substring(5)) - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" // Only numbers \u003e\u003d 0 and \u003c total number are valid","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":" if (taskPos \u003e\u003d 0 \u0026\u0026 taskPos \u003c taskList.getSize()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":" taskList.getTask(taskPos).markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":" ui.showTaskMarked(taskList.getTask(taskPos));","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidNumberException();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":" * Unmarks a task as done and displays a message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command to mark a task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The list of tasks to update.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidNumberException If an invalid number is given.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"nananakx-x"},"content":" * @throws Exception If an error occurs during execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"nananakx-x"},"content":" public void printUnmark(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"nananakx-x"},"content":" // Number index \u003d 7","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"nananakx-x"},"content":" // Convert substring to int, -1 for index","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"nananakx-x"},"content":" int taskPos \u003d Integer.parseInt(command.substring(7)) - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"nananakx-x"},"content":" // Only numbers \u003e\u003d 0 and \u003c total number are valid","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"nananakx-x"},"content":" if (taskPos \u003e\u003d 0 \u0026\u0026 taskPos \u003c taskList.getSize()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"nananakx-x"},"content":" taskList.getTask(taskPos).unmark();","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"nananakx-x"},"content":" ui.showTaskUnmarked(taskList.getTask(taskPos));","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidNumberException();","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"nananakx-x"},"content":" * Adds a new ToDo task to the task list and displays a message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command.","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The list of tasks to which the task will be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidDescriptionException If the description for the ToDo task is empty.","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"nananakx-x"},"content":" * @throws Exception If an error occurs during execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"nananakx-x"},"content":" public void addToDo(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"nananakx-x"},"content":" // Description starting index \u003d 5","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"nananakx-x"},"content":" String description \u003d command.substring(5);","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"nananakx-x"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"todo\");","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"nananakx-x"},"content":" Task newTask \u003d new ToDo(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"nananakx-x"},"content":" ui.showTaskAdded(newTask, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"nananakx-x"},"content":" * Adds a new Deadline task to the task list and displays a message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command.","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The list of tasks to which the task will be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidDescriptionException If the description for the Deadline task is empty.","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidDeadlineException If there is an invalid deadline task given. (without","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"nananakx-x"},"content":" * a due date/time)","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"nananakx-x"},"content":" * @throws Exception If an error occurs during execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"nananakx-x"},"content":" public void addDeadline(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"nananakx-x"},"content":" // indexOf: searches for the substring and returns the index of the first character","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"nananakx-x"},"content":" if (command.contains(\" /by \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"nananakx-x"},"content":" // Description starting index \u003d 9","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"nananakx-x"},"content":" String description \u003d command.substring(9, command.indexOf(\" /by \"));","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"nananakx-x"},"content":" // From \" \" to the specified date is 5","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"nananakx-x"},"content":" String by \u003d command.substring(command.indexOf(\" /by \") + 5);","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"nananakx-x"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"deadline\");","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"nananakx-x"},"content":" if (by.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"nananakx-x"},"content":" Task newTask \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"nananakx-x"},"content":" ui.showTaskAdded(newTask, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"nananakx-x"},"content":" * Adds a new Event task to the task list and displays a message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command.","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The list of tasks to which the task will be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidDescriptionException If the description for the Deadline task is empty.","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidEventException If there is an invalid event task given. (without a start","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"nananakx-x"},"content":" * and/or end date/time)","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"nananakx-x"},"content":" * @throws Exception If an error occurs during execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"nananakx-x"},"content":" public void addEvent(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"nananakx-x"},"content":" if (command.contains(\" /from \") \u0026\u0026 command.contains(\" /to \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"nananakx-x"},"content":" // Description starting index \u003d 6","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"nananakx-x"},"content":" String description \u003d command.substring(6, command.indexOf(\" /from \"));","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"nananakx-x"},"content":" // From \" \" to \u0027from\u0027 date is 7","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"nananakx-x"},"content":" String from \u003d command.substring(command.indexOf(\" /from \") + 7,","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"nananakx-x"},"content":" command.indexOf(\" /to \"));","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"nananakx-x"},"content":" // From \" \" to \u0027to\u0027 date is 5","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"nananakx-x"},"content":" String to \u003d command.substring(command.indexOf(\" /to \") + 5);","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"nananakx-x"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"event\");","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"nananakx-x"},"content":" if (from.isEmpty() || to.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"nananakx-x"},"content":" Task newTask \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"nananakx-x"},"content":" ui.showTaskAdded(newTask, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"nananakx-x"},"content":" * Deletes a task from the task list and displays a message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command.","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The list of tasks to which the task will be deleted from.","lastModifiedDate":"2023-09-04"},{"lineNumber":181,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidNumberException If there is an invalid number given.","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"nananakx-x"},"content":" * @throws Exception If an error occurs during execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"nananakx-x"},"content":" public void deleteTask(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":185,"author":{"gitId":"nananakx-x"},"content":" // Number index \u003d 7","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"nananakx-x"},"content":" // Convert substring to int, -1 for index","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"nananakx-x"},"content":" int taskPos \u003d Integer.parseInt(command.substring(7)) - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"nananakx-x"},"content":" if (taskPos \u003e\u003d 0 \u0026\u0026 taskPos \u003c taskList.getSize()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"nananakx-x"},"content":" Task deleted \u003d taskList.getTask(taskPos);","lastModifiedDate":"2023-09-04"},{"lineNumber":190,"author":{"gitId":"nananakx-x"},"content":" taskList.removeTask(taskPos);","lastModifiedDate":"2023-09-04"},{"lineNumber":191,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"nananakx-x"},"content":" ui.showTaskDeleted(deleted, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":194,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidNumberException();","lastModifiedDate":"2023-09-04"},{"lineNumber":196,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":197,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":198,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":200,"author":{"gitId":"nananakx-x"},"content":" * Returns the list of tasks that matches the keyword indicated.","lastModifiedDate":"2023-09-04"},{"lineNumber":201,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":202,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command.","lastModifiedDate":"2023-09-04"},{"lineNumber":203,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The list of tasks to search from.","lastModifiedDate":"2023-09-04"},{"lineNumber":204,"author":{"gitId":"nananakx-x"},"content":" * @return A TaskList of matching tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidDescriptionException If the keyword is empty.","lastModifiedDate":"2023-09-04"},{"lineNumber":206,"author":{"gitId":"nananakx-x"},"content":" * @throws Exception If an error occurs during execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":207,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":208,"author":{"gitId":"nananakx-x"},"content":" public TaskList findMatchingTaskList(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":209,"author":{"gitId":"nananakx-x"},"content":" TaskList matchingTaskList \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":210,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"nananakx-x"},"content":" // Keyword starting index \u003d 5","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"nananakx-x"},"content":" String keyword \u003d command.substring(5);","lastModifiedDate":"2023-09-04"},{"lineNumber":213,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"nananakx-x"},"content":" if (keyword.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":215,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"find\");","lastModifiedDate":"2023-09-04"},{"lineNumber":216,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":217,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":218,"author":{"gitId":"nananakx-x"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":219,"author":{"gitId":"nananakx-x"},"content":" Task taskUnderCheck \u003d taskList.getTask(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":220,"author":{"gitId":"nananakx-x"},"content":" if (taskUnderCheck.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":221,"author":{"gitId":"nananakx-x"},"content":" matchingTaskList.addTask(taskUnderCheck);","lastModifiedDate":"2023-09-04"},{"lineNumber":222,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":223,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":224,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":225,"author":{"gitId":"nananakx-x"},"content":" return matchingTaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":226,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":227,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":228,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":229,"author":{"gitId":"nananakx-x"},"content":" * Displays the list of tasks that matches the keyword indicated.","lastModifiedDate":"2023-09-04"},{"lineNumber":230,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":231,"author":{"gitId":"nananakx-x"},"content":" * @param matchingTaskList A TaskList of matching tasks to display.","lastModifiedDate":"2023-09-04"},{"lineNumber":232,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":233,"author":{"gitId":"nananakx-x"},"content":" public void printMatchingList(TaskList matchingTaskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":234,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":235,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":236,"author":{"gitId":"nananakx-x"},"content":" for (int i \u003d 1; i \u003c\u003d matchingTaskList.getSize(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":237,"author":{"gitId":"nananakx-x"},"content":" // Adding toString() to use the overridden one in duke.task.Task, etc.","lastModifiedDate":"2023-09-04"},{"lineNumber":238,"author":{"gitId":"nananakx-x"},"content":" System.out.println(i + \". \" + matchingTaskList.getTask(i - 1).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":239,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":240,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":241,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":242,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":243,"author":{"gitId":"nananakx-x"},"content":" * Processes the user commands and decides the correct output.","lastModifiedDate":"2023-09-04"},{"lineNumber":244,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":245,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command.","lastModifiedDate":"2023-09-04"},{"lineNumber":246,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The user\u0027s list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":247,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":248,"author":{"gitId":"nananakx-x"},"content":" public void processCommand(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":249,"author":{"gitId":"nananakx-x"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":250,"author":{"gitId":"nananakx-x"},"content":" printList(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":251,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"mark \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":252,"author":{"gitId":"nananakx-x"},"content":" printMark(command, taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":253,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"unmark \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":254,"author":{"gitId":"nananakx-x"},"content":" printUnmark(command, taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":255,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"todo \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":256,"author":{"gitId":"nananakx-x"},"content":" addToDo(command, taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":257,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"deadline \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":258,"author":{"gitId":"nananakx-x"},"content":" addDeadline(command, taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":259,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"event \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":260,"author":{"gitId":"nananakx-x"},"content":" addEvent(command, taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":261,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"delete \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":262,"author":{"gitId":"nananakx-x"},"content":" deleteTask(command, taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":263,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"find \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":264,"author":{"gitId":"nananakx-x"},"content":" printMatchingList(findMatchingTaskList(command, taskList));","lastModifiedDate":"2023-09-04"},{"lineNumber":265,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":266,"author":{"gitId":"nananakx-x"},"content":" if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":267,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"todo\");","lastModifiedDate":"2023-09-04"},{"lineNumber":268,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":269,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"deadline\");","lastModifiedDate":"2023-09-04"},{"lineNumber":270,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":271,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"event\");","lastModifiedDate":"2023-09-04"},{"lineNumber":272,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":273,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"find\");","lastModifiedDate":"2023-09-04"},{"lineNumber":274,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":275,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-09-04"},{"lineNumber":276,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":277,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":278,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":279,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":280,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"nananakx-x":280}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" * This class deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" private String filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" * Constructor with the specified file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" * @param filePath The path to the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" * Creates a data file and its parent directory if they do not exist.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" public void createFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" // Create if it does not exist","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" Files.createDirectories(Paths.get(\"./data/\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" File dataFile \u003d new File(\"./data/duke.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" dataFile.createNewFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Error creating data file.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" * Retrieves the existing task list from the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":" * @return An ArrayList of Task objects read from the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" public static ArrayList\u003cTask\u003e retrieveData() {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":" File file \u003d new File(\"./data/duke.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":" String dataLine \u003d scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":" Task task \u003d dataToTask(dataLine);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"nananakx-x"},"content":" scanner.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"nananakx-x"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Creating a new file.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"nananakx-x"},"content":" return taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"nananakx-x"},"content":" * Saves the task list to the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The ArrayList of Task objects to be saved.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"nananakx-x"},"content":" public static void save(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"nananakx-x"},"content":" FileWriter writer \u003d new FileWriter(\"./data/duke.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"nananakx-x"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"nananakx-x"},"content":" // Write each task with specified format","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"nananakx-x"},"content":" writer.write(taskData(task) + \"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"nananakx-x"},"content":" writer.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"nananakx-x"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Error saving data.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"nananakx-x"},"content":" * Converts a Task object into a data string for storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"nananakx-x"},"content":" * @param task Task to convert.","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"nananakx-x"},"content":" * @return Data string representing the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"nananakx-x"},"content":" public static String taskData(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"nananakx-x"},"content":" String taskType \u003d task instanceof ToDo ? \"T\" : task instanceof Deadline ? \"D\" : \"E\";","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"nananakx-x"},"content":" String status \u003d task.getIsDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"nananakx-x"},"content":" String description \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"nananakx-x"},"content":" StringBuilder data \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"nananakx-x"},"content":" data.append(taskType).append(\" | \").append(status).append(\" | \").append(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"nananakx-x"},"content":" // Add additional information for Deadline and Event tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"nananakx-x"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"nananakx-x"},"content":" LocalDateTime deadlineDateTime \u003d ((Deadline) task).getBy();","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"nananakx-x"},"content":" String formattedDateTime \u003d deadlineDateTime.format(DateTimeFormatter","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"nananakx-x"},"content":" .ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"nananakx-x"},"content":" data.append(\" | \").append(formattedDateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"nananakx-x"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"nananakx-x"},"content":" data.append(\" | \").append(((Event) task).getFrom()).append(\" | \")","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"nananakx-x"},"content":" .append(((Event) task).getTo());","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"nananakx-x"},"content":" return data.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"nananakx-x"},"content":" * Parses a data string and creates a Task from it.","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"nananakx-x"},"content":" * @param data Data string to parse.","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"nananakx-x"},"content":" * @return A Task object parsed from the data string.","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"nananakx-x"},"content":" public static Task dataToTask(String data) {","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"nananakx-x"},"content":" String[] info \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"nananakx-x"},"content":" String taskType \u003d info[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"nananakx-x"},"content":" String status \u003d info[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"nananakx-x"},"content":" String description \u003d info[2];","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"nananakx-x"},"content":" Task task;","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"nananakx-x"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"nananakx-x"},"content":" task \u003d new ToDo(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"nananakx-x"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"nananakx-x"},"content":" task \u003d new Deadline(description, info[3]);","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"nananakx-x"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"nananakx-x"},"content":" task \u003d new Event(description, info[3], info[4]);","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"nananakx-x"},"content":" throw new IllegalArgumentException(\"☹ OOPS!!! Invalid task in data\");","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"nananakx-x"},"content":" if (status.equals(\"1\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"nananakx-x"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"nananakx-x"},"content":" return task;","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"nananakx-x":154}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":" * This class deals with interactions with the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" * Displays a default start message when the program starts.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" public void startMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Hello friend :\u003e My name is John, nice to meet you! \" +","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" \"What do you have to do today?\");","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" * Displays the default end message when the user exits the program.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" public void endMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Bye for now, hope to see you soon.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" * Displays a prompt for the user to reply.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" public void promptReply() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" System.out.print(\"Reply John: \");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" * Displays a message when a task is added to the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" * @param task The task that is added.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" * @param totalTasks The total number of tasks in the list after adding.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" public void showTaskAdded(Task task, int totalTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n \" + task +","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" \"\\nNow you have \" + totalTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" * Displays a message when a task is deleted from the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" * @param task The task that is deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" * @param totalTasks The total number of tasks in the list after deleting.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" public void showTaskDeleted(Task task, int totalTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\\n\" + \" \" + task","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" + \"\\nNow you have \" + totalTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" * Displays a message when a task is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" * @param task The task that is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":" public void showTaskMarked(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n\" + \"[X] \"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":" + task.getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":" * Displays a message when a task is unmarked.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"nananakx-x"},"content":" * @param task The task that is unmarked.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"nananakx-x"},"content":" public void showTaskUnmarked(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\\n\" + \"[ ] \"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"nananakx-x"},"content":" + task.getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"nananakx-x":73}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * This exception is thrown when there is an invalid command.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" * An invalid command is one that is not recognized by the program.","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" * Constructor with an error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":14}},{"path":"src/main/java/duke/exception/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * This exception is thrown when there is an invalid deadline task given.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" * An invalid deadline task is one without a due date/time.","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"public class InvalidDeadlineException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" * Constructor with an error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" public InvalidDeadlineException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" super(\"☹ OOPS!!! You forgot to indicate the due date/time.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":14}},{"path":"src/main/java/duke/exception/InvalidDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * This exception is thrown when there is an invalid task description or when the keyword","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" * is not indicated for \u0027find\u0027.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":" * An invalid task description is one that is empty.","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"public class InvalidDescriptionException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" * Constructor with an error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" public InvalidDescriptionException(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" super(\"☹ OOPS!!! \"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" + (task.equals(\"find\")","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" ? \"You didn\u0027t indicate the keyword.\"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" : \"The description of a \" + task + \" cannot be empty.\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":18}},{"path":"src/main/java/duke/exception/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * This exception is thrown when there is an invalid event task given.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" * An invalid event task is one without a start and/or end date/time.","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"public class InvalidEventException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" * Constructor with an error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" public InvalidEventException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" super(\"☹ OOPS!!! You forgot to indicate the start and/or end date/time.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":14}},{"path":"src/main/java/duke/exception/InvalidNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * This exception is thrown when there is an invalid number indicated after \u0027mark\u0027 and \u0027unmark\u0027.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" * An invalid number is one that is not in the numbering of the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"public class InvalidNumberException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" * Constructor with an error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" public InvalidNumberException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" super(\"☹ OOPS!!! You have indicated an invalid number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"nananakx-x":14}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" * Represents a deadline task that has a description and a due date/time.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" * Constructor with description and due date/time.","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" * @param by The due date/time of the deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" this.by \u003d convertDateTime(by);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" * Converts the string by to type LocalDateTime.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" * @param dateTimeString String by to be converted.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" * @return LocalDateTime by.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" public LocalDateTime convertDateTime(String dateTimeString) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" return LocalDateTime.parse(dateTimeString, formatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" throw new IllegalArgumentException(\"☹ OOPS!!! Invalid date/time format. \" +","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" \"Please use dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" * Formats the LocalDateTime by to desired string.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" * @param by LocalDateTime by to be formatted.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" * @return Formatted string to show due date/time.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" public String formatDateTime(LocalDateTime by) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" // \"a\" represents the AM/PM marker","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" return by.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mm a\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":" * Returns the due date/time of the deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" * @return The due date/time.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" public LocalDateTime getBy() {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" return this.by;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":" * Returns a string representation of the duke.task.Deadline object.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":" * @return A string representation of the duke.task.Deadline object.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"nananakx-x"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"nananakx-x"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"nananakx-x"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatDateTime(by) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":69}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * Represents an event task that has a description, a start date/time, and an end date/time.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" * Constructor with description, start date/time, and end date/time.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" * @param from The start date/time of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" * @param to The end date/time of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" * Returns the start date/time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" * @return The start date/time.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" public String getFrom() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" return this.from;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" * Returns the end date/time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" * @return The end date/time.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" public String getTo() {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" return this.to;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" * Returns a string representation of the duke.task.Event object.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" * @return A string representation of the duke.task.Event object.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":51}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * Represents a basic task that has a description.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" * Constructor with description. isDone is set as false.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" * Returns the status icon representing the completion status of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" * @return The status icon. (\"X\" representing completion)","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" * Marks the task as done by setting isDone to true.","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" * Changes the completion status back to not done. (set isDone as false)","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" * @return The description.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":" return this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" * Returns the completion status of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" * @return The completion status.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":" return this.isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"nananakx-x"},"content":" * Returns a string representation of the duke.task.Task object.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"nananakx-x"},"content":" * @return A string representation of the duke.task.Task object.","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"nananakx-x"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"nananakx-x"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"nananakx-x"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":75}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":" * Represents a list of tasks. It contains the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" * Constructor with no parameter.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" * Constructor with tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" * @param tasks Tasks in the TaskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" * @return Size of list.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" public int getSize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" return tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" * Adds task to the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" * @param task Task to be added to the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" * Removes task from the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" * @param index Index of the task to be removed from the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" public void removeTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" throw new IndexOutOfBoundsException(\"Invalid task index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" * Returns a task in the list which is at a particular index.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":" * @param index Index of the task to be returned.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":" * @return Task in the list at the index indicated.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"nananakx-x"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"nananakx-x"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"nananakx-x"},"content":" throw new IndexOutOfBoundsException(\"Invalid task index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"nananakx-x"},"content":" * Returns tasks in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"nananakx-x"},"content":" * @return Tasks present in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"nananakx-x"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"nananakx-x"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"nananakx-x":81}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * Represents a to-do task that has a description.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" * Constructor with description.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" * Returns a string representation of the duke.task.ToDo object.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" * @return A string representation of the duke.task.ToDo object.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":26}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import duke.exception.InvalidDescriptionException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" private Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" private TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" public void testAddToDo() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" parser.addToDo(\"todo watch videos\", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" assertEquals(1, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" fail(\"Exception should not be thrown.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" public void testAddDeadline() {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" parser.addDeadline(\"deadline assignment /by 12/03/2040 1345\", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" assertEquals(1, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" fail(\"Exception should not be thrown.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" public void testAddEvent() {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" parser.addEvent(\"event meeting /from 6th June /to 9th June\", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" assertEquals(1, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" fail(\"Exception should not be thrown.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" public void testRemoveTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" parser.addToDo(\"todo play!\", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":" parser.deleteTask(\"delete 1\", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":" assertEquals(0, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":" fail(\"Exception should not be thrown.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":" public void testFindMatchingTaskList() throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new ToDo(\"return book\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Deadline(\"book review\", \"07/12/2019 1920\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"meeting\", \"Mon 6pm\", \"10pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"nananakx-x"},"content":" TaskList matchingTaskList \u003d parser.findMatchingTaskList(\"find book\", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"nananakx-x"},"content":" assertEquals(2, matchingTaskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"[T][ ] return book\", matchingTaskList.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"[D][ ] book review (by: 07 Dec 2019 7:20 PM)\",","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"nananakx-x"},"content":" matchingTaskList.getTask(1).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"nananakx-x"},"content":" public void testFindNoMatchingTaskList() throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new ToDo(\"return book\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Deadline(\"book review\", \"07/12/2019 1920\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"meeting\", \"Mon 6pm\", \"10pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"nananakx-x"},"content":" TaskList matchingTaskList \u003d parser.findMatchingTaskList(\"find hello\", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"nananakx-x"},"content":" assertEquals(0, matchingTaskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"nananakx-x"},"content":" public void testFindMatchingTaskListEmptyKeyword() throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new ToDo(\"return book\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Deadline(\"book review\", \"07/12/2019 1920\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"meeting\", \"Mon 6pm\", \"10pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"nananakx-x"},"content":" assertThrows(InvalidDescriptionException.class, () -\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"nananakx-x"},"content":" parser.findMatchingTaskList(\"find \", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"nananakx-x"},"content":" });","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"nananakx-x":95}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" public void testTaskToStringData() {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" Task task \u003d new Deadline(\"math homework\", \"12/12/2002 1700\");","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" String taskString \u003d Storage.taskData(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" String expected \u003d \"D | 0 | math homework | 12/12/2002 1700\";","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" assertEquals(expected, taskString);","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" public void testStringDataToEventTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" String taskString \u003d \"E | 1 | project meeting | Mon 2pm | 6pm\";","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" Task task \u003d Storage.dataToTask(taskString);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" assertEquals(Event.class, task.getClass());","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"project meeting\", task.getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" assertTrue(task.getIsDone());","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"Mon 2pm\", event.getFrom());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"6pm\", event.getTo());","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" public void testStringToDeadlineTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" String taskString \u003d \"D | 0 | assignment 0 | 12/12/2002 1700\";","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" Task task \u003d Storage.dataToTask(taskString);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" assertEquals(Deadline.class, task.getClass());","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"assignment 0\", task.getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" assertTrue(!task.getIsDone());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" assertEquals(LocalDateTime.parse(\"2002-12-12T17:00\"), deadline.getBy());","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nananakx-x":52}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" public void testConvertDateTimeValid() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" Deadline deadline \u003d new Deadline(\"homework\", \"12/09/2080 1718\");","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" LocalDateTime actual \u003d deadline.convertDateTime(\"12/09/2080 1718\");","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" LocalDateTime expected \u003d LocalDateTime.of(2080, 9, 12, 17, 18);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" public void testConvertDateTimeInvalid() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" Deadline deadline \u003d new Deadline(\"homework\", \"12/09/2080 1718\");","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" deadline.convertDateTime(\"hello bye!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" });","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" public void testFormatDateTime() {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" Deadline deadline \u003d new Deadline(\"homework\", \"12/09/2080 1718\");","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2080, 9, 12, 17, 18);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" String actual \u003d deadline.formatDateTime(dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" String expected \u003d \"12 Sep 2080 5:18 PM\"; // Adjust the expected value accordingly","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" public void testDeadlineString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" Task task \u003d new Deadline(\"math homework\", \"12/12/2002 1700\");","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" String expected \u003d \"[D][ ] math homework (by: 12 Dec 2002 5:00 PM)\";","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" assertEquals(expected, task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nananakx-x":41}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" private TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" public void testAddTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new ToDo(\"Test\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"Test2\", \"Mon 12pm\", \"Tues 6pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" assertEquals(2, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" public void testRemoveTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"Test2\", \"Mon 12pm\", \"Tues 6pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" taskList.removeTask(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" assertEquals(0, taskList.getSize());","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" public void testGetTaskValidIndex() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new ToDo(\"Test\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"Test2\", \"Mon 12pm\", \"Tues 6pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Deadline(\"homework\", \"12/09/2080 1718\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"Test\", taskList.getTask(0).getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"Test2\", taskList.getTask(1).getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"homework\", taskList.getTask(2).getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" public void testGetTaskInvalidIndex() {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new ToDo(\"Test\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"Test2\", \"Mon 12pm\", \"Tues 6pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Deadline(\"homework\", \"12/09/2080 1718\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e taskList.getTask(3));","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" public void testGetAllTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new ToDo(\"Test\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"Test2\", \"Mon 12pm\", \"Tues 6pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Deadline(\"homework\", \"12/09/2080 1718\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":" ArrayList\u003cTask\u003e allTasks \u003d taskList.getAllTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" assertNotNull(allTasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"Test\", allTasks.get(0).getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"Test2\", allTasks.get(1).getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"homework\", allTasks.get(2).getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":" assertEquals(3, allTasks.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"nananakx-x":61}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"event video meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"todo join sports club","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"todo read a book","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"deadline return book /by 04/12/2023 1920","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":"deadline return book /by 04/12/2023 1989","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":"unmark 9","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":"unmark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":"no work today!","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":"deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":"hihihi","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":"event party","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":"event party /from 7 /to","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":"deadline math","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":"deadline math /by","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":"delete 8","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":"delete 6","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":"delete 4","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":31}},{"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":"nananakx-x"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-09-03"},{"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":{"nananakx-x":1,"-":20}}] +[{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":" * Represents Duke, a Personal Assistant Chatbot that helps a person to keep track of","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" * various things. The name Duke was chosen as a placeholder name, in honor of Duke,","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" * the Java Mascot. The current name of the Chatbot is John.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":"public class Duke {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" private Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" private Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" * Constructor for a Duke object.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" * Initialises the ui, storage, and taskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" public Duke() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" storage \u003d new Storage(\"./data/duke.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" taskList \u003d new TaskList(storage.retrieveData());","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" * Starts the Chatbot and continuously reads user input, processes commands,","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" * and provides responses until the user exits.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" public void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" storage.createFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" ui.startMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" ui.promptReply();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" ui.endMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" storage.save(taskList.getAllTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" new Parser().processCommand(command, taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":" sc.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" * Our main method for the Chatbot to work. It starts the Chatbot by calling","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":" * the run method.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":" * @param args The command-line arguments.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":" new Duke().run();","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"nananakx-x":64,"-":1}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import duke.exception.InvalidCommandException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import duke.exception.InvalidDeadlineException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"import duke.exception.InvalidDescriptionException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"import duke.exception.InvalidEventException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"import duke.exception.InvalidNumberException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" * This class deals with making sense of the user command.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" private Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" public Parser() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" * Processes the user commands and decides the correct output.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The user\u0027s list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" public void processCommand(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" ui.showList(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"mark \")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" printMark(command, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"unmark \")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" printUnmark(command, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"todo \")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" addToDo(command, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"deadline \")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" addDeadline(command, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"event \")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" addEvent(command, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"delete \")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" deleteTask(command, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"find \")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" ui.showMatchingList(findMatchingTaskList(command, taskList));","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"todo\");","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"deadline\");","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"event\");","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"find\");","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":" * Marks a task as done and displays a message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command to mark a task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The list of tasks to update.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"nananakx-x"},"content":" * @throws Exception If an invalid number is given.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"nananakx-x"},"content":" public void printMark(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"nananakx-x"},"content":" // Space behind is needed!, number index \u003d 5","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"nananakx-x"},"content":" // Convert substring to int, -1 for index","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"nananakx-x"},"content":" int taskPos \u003d Integer.parseInt(command.substring(5)) - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"nananakx-x"},"content":" // Only numbers \u003e\u003d 0 and \u003c total number are valid","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"nananakx-x"},"content":" if (taskPos \u003e\u003d 0 \u0026\u0026 taskPos \u003c taskList.getSize()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"nananakx-x"},"content":" taskList.getTask(taskPos).markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"nananakx-x"},"content":" ui.showTaskMarked(taskList.getTask(taskPos));","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidNumberException();","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"nananakx-x"},"content":" * Unmarks a task as done and displays a message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command to mark a task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The list of tasks to update.","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidNumberException If an invalid number is given.","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"nananakx-x"},"content":" * @throws Exception If an error occurs during execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"nananakx-x"},"content":" public void printUnmark(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"nananakx-x"},"content":" // Number index \u003d 7","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"nananakx-x"},"content":" // Convert substring to int, -1 for index","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"nananakx-x"},"content":" int taskPos \u003d Integer.parseInt(command.substring(7)) - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"nananakx-x"},"content":" // Only numbers \u003e\u003d 0 and \u003c total number are valid","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"nananakx-x"},"content":" if (taskPos \u003e\u003d 0 \u0026\u0026 taskPos \u003c taskList.getSize()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"nananakx-x"},"content":" taskList.getTask(taskPos).unmark();","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"nananakx-x"},"content":" ui.showTaskUnmarked(taskList.getTask(taskPos));","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidNumberException();","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"nananakx-x"},"content":" * Adds a new ToDo task to the task list and displays a message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command.","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The list of tasks to which the task will be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidDescriptionException If the description for the ToDo task is empty.","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"nananakx-x"},"content":" * @throws Exception If an error occurs during execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"nananakx-x"},"content":" public void addToDo(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"nananakx-x"},"content":" // Description starting index \u003d 5","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"nananakx-x"},"content":" String description \u003d command.substring(5);","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"nananakx-x"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"todo\");","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"nananakx-x"},"content":" Task newTask \u003d new ToDo(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"nananakx-x"},"content":" ui.showTaskAdded(newTask, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"nananakx-x"},"content":" * Adds a new Deadline task to the task list and displays a message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command.","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The list of tasks to which the task will be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidDescriptionException If the description for the Deadline task is empty.","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidDeadlineException If there is an invalid deadline task given. (without","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"nananakx-x"},"content":" * a due date/time)","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"nananakx-x"},"content":" * @throws Exception If an error occurs during execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"nananakx-x"},"content":" public void addDeadline(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"nananakx-x"},"content":" // indexOf: searches for the substring and returns the index of the first character","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"nananakx-x"},"content":" if (command.contains(\" /by \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"nananakx-x"},"content":" // Description starting index \u003d 9","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"nananakx-x"},"content":" String description \u003d command.substring(9, command.indexOf(\" /by \"));","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"nananakx-x"},"content":" // From \" \" to the specified date is 5","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"nananakx-x"},"content":" String by \u003d command.substring(command.indexOf(\" /by \") + 5);","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"nananakx-x"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"deadline\");","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"nananakx-x"},"content":" if (by.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"nananakx-x"},"content":" Task newTask \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"nananakx-x"},"content":" ui.showTaskAdded(newTask, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"nananakx-x"},"content":" * Adds a new Event task to the task list and displays a message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command.","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The list of tasks to which the task will be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidDescriptionException If the description for the Deadline task is empty.","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidEventException If there is an invalid event task given. (without a start","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"nananakx-x"},"content":" * and/or end date/time)","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"nananakx-x"},"content":" * @throws Exception If an error occurs during execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"nananakx-x"},"content":" public void addEvent(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"nananakx-x"},"content":" if (command.contains(\" /from \") \u0026\u0026 command.contains(\" /to \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"nananakx-x"},"content":" // Description starting index \u003d 6","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"nananakx-x"},"content":" String description \u003d command.substring(6, command.indexOf(\" /from \"));","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"nananakx-x"},"content":" // From \" \" to \u0027from\u0027 date is 7","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"nananakx-x"},"content":" String from \u003d command.substring(command.indexOf(\" /from \") + 7,","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"nananakx-x"},"content":" command.indexOf(\" /to \"));","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"nananakx-x"},"content":" // From \" \" to \u0027to\u0027 date is 5","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"nananakx-x"},"content":" String to \u003d command.substring(command.indexOf(\" /to \") + 5);","lastModifiedDate":"2023-09-04"},{"lineNumber":181,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"nananakx-x"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"event\");","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":185,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":186,"author":{"gitId":"nananakx-x"},"content":" if (from.isEmpty() || to.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":190,"author":{"gitId":"nananakx-x"},"content":" Task newTask \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-04"},{"lineNumber":191,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"nananakx-x"},"content":" ui.showTaskAdded(newTask, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":194,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":196,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-09-04"},{"lineNumber":197,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":198,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":200,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":201,"author":{"gitId":"nananakx-x"},"content":" * Deletes a task from the task list and displays a message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":202,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":203,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command.","lastModifiedDate":"2023-09-04"},{"lineNumber":204,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The list of tasks to which the task will be deleted from.","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidNumberException If there is an invalid number given.","lastModifiedDate":"2023-09-04"},{"lineNumber":206,"author":{"gitId":"nananakx-x"},"content":" * @throws Exception If an error occurs during execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":207,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":208,"author":{"gitId":"nananakx-x"},"content":" public void deleteTask(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":209,"author":{"gitId":"nananakx-x"},"content":" // Number index \u003d 7","lastModifiedDate":"2023-09-04"},{"lineNumber":210,"author":{"gitId":"nananakx-x"},"content":" // Convert substring to int, -1 for index","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"nananakx-x"},"content":" int taskPos \u003d Integer.parseInt(command.substring(7)) - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"nananakx-x"},"content":" if (taskPos \u003e\u003d 0 \u0026\u0026 taskPos \u003c taskList.getSize()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":213,"author":{"gitId":"nananakx-x"},"content":" Task deleted \u003d taskList.getTask(taskPos);","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"nananakx-x"},"content":" taskList.removeTask(taskPos);","lastModifiedDate":"2023-09-04"},{"lineNumber":215,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":216,"author":{"gitId":"nananakx-x"},"content":" ui.showTaskDeleted(deleted, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":217,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":218,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":219,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidNumberException();","lastModifiedDate":"2023-09-04"},{"lineNumber":220,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":221,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":222,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":223,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":224,"author":{"gitId":"nananakx-x"},"content":" * Returns the list of tasks that matches the keyword indicated.","lastModifiedDate":"2023-09-04"},{"lineNumber":225,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":226,"author":{"gitId":"nananakx-x"},"content":" * @param command The user command.","lastModifiedDate":"2023-09-04"},{"lineNumber":227,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The list of tasks to search from.","lastModifiedDate":"2023-09-04"},{"lineNumber":228,"author":{"gitId":"nananakx-x"},"content":" * @return A TaskList of matching tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":229,"author":{"gitId":"nananakx-x"},"content":" * @throws InvalidDescriptionException If the keyword is empty.","lastModifiedDate":"2023-09-04"},{"lineNumber":230,"author":{"gitId":"nananakx-x"},"content":" * @throws Exception If an error occurs during execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":231,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":232,"author":{"gitId":"nananakx-x"},"content":" public TaskList findMatchingTaskList(String command, TaskList taskList) throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":233,"author":{"gitId":"nananakx-x"},"content":" TaskList matchingTaskList \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":234,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":235,"author":{"gitId":"nananakx-x"},"content":" // Keyword starting index \u003d 5","lastModifiedDate":"2023-09-04"},{"lineNumber":236,"author":{"gitId":"nananakx-x"},"content":" String keyword \u003d command.substring(5);","lastModifiedDate":"2023-09-04"},{"lineNumber":237,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":238,"author":{"gitId":"nananakx-x"},"content":" if (keyword.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":239,"author":{"gitId":"nananakx-x"},"content":" throw new InvalidDescriptionException(\"find\");","lastModifiedDate":"2023-09-04"},{"lineNumber":240,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":241,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":242,"author":{"gitId":"nananakx-x"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":243,"author":{"gitId":"nananakx-x"},"content":" Task taskUnderCheck \u003d taskList.getTask(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":244,"author":{"gitId":"nananakx-x"},"content":" if (taskUnderCheck.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":245,"author":{"gitId":"nananakx-x"},"content":" matchingTaskList.addTask(taskUnderCheck);","lastModifiedDate":"2023-09-04"},{"lineNumber":246,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":247,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":248,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":249,"author":{"gitId":"nananakx-x"},"content":" return matchingTaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":250,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":251,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":252,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"nananakx-x":252}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" * This class deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" private String filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" * Constructor with the specified file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" * @param filePath The path to the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" * Creates a data file and its parent directory if they do not exist.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" public void createFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" // Create if it does not exist","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" Files.createDirectories(Paths.get(\"./data/\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" File dataFile \u003d new File(\"./data/duke.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" dataFile.createNewFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Error creating data file.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" * Retrieves the existing task list from the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":" * @return An ArrayList of Task objects read from the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" public static ArrayList\u003cTask\u003e retrieveData() {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":" File file \u003d new File(\"./data/duke.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":" String dataLine \u003d scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":" Task task \u003d dataToTask(dataLine);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"nananakx-x"},"content":" scanner.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"nananakx-x"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Creating a new file.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"nananakx-x"},"content":" return taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"nananakx-x"},"content":" * Saves the task list to the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The ArrayList of Task objects to be saved.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"nananakx-x"},"content":" public static void save(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"nananakx-x"},"content":" FileWriter writer \u003d new FileWriter(\"./data/duke.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"nananakx-x"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"nananakx-x"},"content":" // Write each task with specified format","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"nananakx-x"},"content":" writer.write(taskData(task) + \"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"nananakx-x"},"content":" writer.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"nananakx-x"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Error saving data.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"nananakx-x"},"content":" * Converts a Task object into a data string for storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"nananakx-x"},"content":" * @param task Task to convert.","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"nananakx-x"},"content":" * @return Data string representing the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"nananakx-x"},"content":" public static String taskData(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"nananakx-x"},"content":" String taskType \u003d task instanceof ToDo ? \"T\" : task instanceof Deadline ? \"D\" : \"E\";","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"nananakx-x"},"content":" String status \u003d task.getIsDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"nananakx-x"},"content":" String description \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"nananakx-x"},"content":" StringBuilder data \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"nananakx-x"},"content":" data.append(taskType).append(\" | \").append(status).append(\" | \").append(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"nananakx-x"},"content":" // Add additional information for Deadline and Event tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"nananakx-x"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"nananakx-x"},"content":" LocalDateTime deadlineDateTime \u003d ((Deadline) task).getBy();","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"nananakx-x"},"content":" String formattedDateTime \u003d deadlineDateTime.format(DateTimeFormatter","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"nananakx-x"},"content":" .ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"nananakx-x"},"content":" data.append(\" | \").append(formattedDateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"nananakx-x"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"nananakx-x"},"content":" data.append(\" | \").append(((Event) task).getFrom()).append(\" | \")","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"nananakx-x"},"content":" .append(((Event) task).getTo());","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"nananakx-x"},"content":" return data.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"nananakx-x"},"content":" * Parses a data string and creates a Task from it.","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"nananakx-x"},"content":" * @param data Data string to parse.","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"nananakx-x"},"content":" * @return A Task object parsed from the data string.","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"nananakx-x"},"content":" public static Task dataToTask(String data) {","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"nananakx-x"},"content":" String[] info \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"nananakx-x"},"content":" String taskType \u003d info[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"nananakx-x"},"content":" String status \u003d info[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"nananakx-x"},"content":" String description \u003d info[2];","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"nananakx-x"},"content":" Task task;","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"nananakx-x"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"nananakx-x"},"content":" task \u003d new ToDo(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"nananakx-x"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"nananakx-x"},"content":" task \u003d new Deadline(description, info[3]);","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"nananakx-x"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"nananakx-x"},"content":" task \u003d new Event(description, info[3], info[4]);","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"nananakx-x"},"content":" throw new IllegalArgumentException(\"☹ OOPS!!! Invalid task in data\");","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"nananakx-x"},"content":" if (status.equals(\"1\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"nananakx-x"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"nananakx-x"},"content":" return task;","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"nananakx-x":154}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":" * This class deals with interactions with the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" * Displays a default start message when the program starts.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" public void startMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Hello friend :\u003e My name is John, nice to meet you! \" +","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" \"What do you have to do today?\");","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" * Displays the default end message when the user exits the program.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" public void endMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Bye for now, hope to see you soon.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" * Displays a prompt for the user to reply.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" public void promptReply() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" System.out.print(\"Reply John: \");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" * Displays a message when a task is added to the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" * @param task The task that is added.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" * @param totalTasks The total number of tasks in the list after adding.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" public void showTaskAdded(Task task, int totalTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n \" + task +","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" \"\\nNow you have \" + totalTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" * Displays a message when a task is deleted from the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" * @param task The task that is deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" * @param totalTasks The total number of tasks in the list after deleting.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" public void showTaskDeleted(Task task, int totalTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\\n\" + \" \" + task","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":" + \"\\nNow you have \" + totalTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":" * Displays a message when a task is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" * @param task The task that is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" public void showTaskMarked(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n\" + \"[X] \"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":" + task.getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"nananakx-x"},"content":" * Displays a message when a task is unmarked.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"nananakx-x"},"content":" * @param task The task that is unmarked.","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"nananakx-x"},"content":" public void showTaskUnmarked(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\\n\" + \"[ ] \"","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"nananakx-x"},"content":" + task.getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"nananakx-x"},"content":" * Displays the user\u0027s task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"nananakx-x"},"content":" * @param taskList The task list to be displayed.","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"nananakx-x"},"content":" public void showList(TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"nananakx-x"},"content":" for (int i \u003d 1; i \u003c\u003d taskList.getSize(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"nananakx-x"},"content":" // Adding toString() to use the overridden one in duke.task.Task, etc.","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"nananakx-x"},"content":" System.out.println(i + \". \" + taskList.getTask(i - 1).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"nananakx-x"},"content":" * Displays the list of matching task from the user\u0027s task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"nananakx-x"},"content":" * @param matchingTaskList The task list to be displayed.","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"nananakx-x"},"content":" public void showMatchingList(TaskList matchingTaskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"nananakx-x"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"nananakx-x"},"content":" for (int i \u003d 1; i \u003c\u003d matchingTaskList.getSize(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"nananakx-x"},"content":" // Adding toString() to use the overridden one in duke.task.Task, etc.","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"nananakx-x"},"content":" System.out.println(i + \". \" + matchingTaskList.getTask(i - 1).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"nananakx-x":103}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * This exception is thrown when there is an invalid command.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" * An invalid command is one that is not recognized by the program.","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" * Constructor with an error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":14}},{"path":"src/main/java/duke/exception/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * This exception is thrown when there is an invalid deadline task given.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" * An invalid deadline task is one without a due date/time.","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"public class InvalidDeadlineException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" * Constructor with an error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" public InvalidDeadlineException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" super(\"☹ OOPS!!! You forgot to indicate the due date/time.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":14}},{"path":"src/main/java/duke/exception/InvalidDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * This exception is thrown when there is an invalid task description or when the keyword","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" * is not indicated for \u0027find\u0027.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":" * An invalid task description is one that is empty.","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"public class InvalidDescriptionException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" * Constructor with an error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" public InvalidDescriptionException(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" super(\"☹ OOPS!!! \"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" + (task.equals(\"find\")","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" ? \"You didn\u0027t indicate the keyword.\"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" : \"The description of a \" + task + \" cannot be empty.\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":18}},{"path":"src/main/java/duke/exception/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * This exception is thrown when there is an invalid event task given.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" * An invalid event task is one without a start and/or end date/time.","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"public class InvalidEventException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" * Constructor with an error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" public InvalidEventException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" super(\"☹ OOPS!!! You forgot to indicate the start and/or end date/time.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":14}},{"path":"src/main/java/duke/exception/InvalidNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * This exception is thrown when there is an invalid number indicated after \u0027mark\u0027 and \u0027unmark\u0027.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" * An invalid number is one that is not in the numbering of the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"public class InvalidNumberException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" * Constructor with an error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" public InvalidNumberException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" super(\"☹ OOPS!!! You have indicated an invalid number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"nananakx-x":14}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" * Represents a deadline task that has a description and a due date/time.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" * Constructor with description and due date/time.","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" * @param by The due date/time of the deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" this.by \u003d convertDateTime(by);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" * Converts the string by to type LocalDateTime.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" * @param dateTimeString String by to be converted.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" * @return LocalDateTime by.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" public LocalDateTime convertDateTime(String dateTimeString) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" return LocalDateTime.parse(dateTimeString, formatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" throw new IllegalArgumentException(\"☹ OOPS!!! Invalid date/time format. \" +","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" \"Please use dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" * Formats the LocalDateTime by to desired string.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" * @param by LocalDateTime by to be formatted.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" * @return Formatted string to show due date/time.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" public String formatDateTime(LocalDateTime by) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" // \"a\" represents the AM/PM marker","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" return by.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mm a\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":" * Returns the due date/time of the deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" * @return The due date/time.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" public LocalDateTime getBy() {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" return this.by;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":" * Returns a string representation of the duke.task.Deadline object.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":" * @return A string representation of the duke.task.Deadline object.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"nananakx-x"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"nananakx-x"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"nananakx-x"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatDateTime(by) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":69}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * Represents an event task that has a description, a start date/time, and an end date/time.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" * Constructor with description, start date/time, and end date/time.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" * @param from The start date/time of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" * @param to The end date/time of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" * Returns the start date/time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" * @return The start date/time.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" public String getFrom() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" return this.from;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" * Returns the end date/time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" * @return The end date/time.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" public String getTo() {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" return this.to;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" * Returns a string representation of the duke.task.Event object.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" * @return A string representation of the duke.task.Event object.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":51}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * Represents a basic task that has a description.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" * Constructor with description. isDone is set as false.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" * Returns the status icon representing the completion status of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" * @return The status icon. (\"X\" representing completion)","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" * Marks the task as done by setting isDone to true.","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" * Changes the completion status back to not done. (set isDone as false)","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" * @return The description.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":" return this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" * Returns the completion status of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" * @return The completion status.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":" return this.isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"nananakx-x"},"content":" * Returns a string representation of the duke.task.Task object.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"nananakx-x"},"content":" * @return A string representation of the duke.task.Task object.","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"nananakx-x"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"nananakx-x"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"nananakx-x"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":75}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":" * Represents a list of tasks. It contains the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" * Constructor with no parameter.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" * Constructor with tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" * @param tasks Tasks in the TaskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" * @return Size of list.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" public int getSize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" return tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" * Adds task to the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" * @param task Task to be added to the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" * Removes task from the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" * @param index Index of the task to be removed from the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" public void removeTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" throw new IndexOutOfBoundsException(\"Invalid task index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" * Returns a task in the list which is at a particular index.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":" * @param index Index of the task to be returned.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":" * @return Task in the list at the index indicated.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"nananakx-x"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"nananakx-x"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"nananakx-x"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"nananakx-x"},"content":" throw new IndexOutOfBoundsException(\"Invalid task index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"nananakx-x"},"content":" * Returns tasks in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"nananakx-x"},"content":" * @return Tasks present in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"nananakx-x"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"nananakx-x"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"nananakx-x":81}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":" * Represents a to-do task that has a description.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":" * Constructor with description.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" * Returns a string representation of the duke.task.ToDo object.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" * @return A string representation of the duke.task.ToDo object.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":26}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import duke.exception.InvalidDescriptionException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" private Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" private TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" public void testAddToDo() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" parser.addToDo(\"todo watch videos\", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" assertEquals(1, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" fail(\"Exception should not be thrown.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" public void testAddDeadline() {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" parser.addDeadline(\"deadline assignment /by 12/03/2040 1345\", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" assertEquals(1, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" fail(\"Exception should not be thrown.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" public void testAddEvent() {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" parser.addEvent(\"event meeting /from 6th June /to 9th June\", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" assertEquals(1, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" fail(\"Exception should not be thrown.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" public void testRemoveTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" parser.addToDo(\"todo play!\", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":" parser.deleteTask(\"delete 1\", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":" assertEquals(0, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":" fail(\"Exception should not be thrown.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":" public void testFindMatchingTaskList() throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new ToDo(\"return book\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Deadline(\"book review\", \"07/12/2019 1920\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"meeting\", \"Mon 6pm\", \"10pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"nananakx-x"},"content":" TaskList matchingTaskList \u003d parser.findMatchingTaskList(\"find book\", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"nananakx-x"},"content":" assertEquals(2, matchingTaskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"[T][ ] return book\", matchingTaskList.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"[D][ ] book review (by: 07 Dec 2019 7:20 PM)\",","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"nananakx-x"},"content":" matchingTaskList.getTask(1).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"nananakx-x"},"content":" public void testFindNoMatchingTaskList() throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new ToDo(\"return book\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Deadline(\"book review\", \"07/12/2019 1920\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"meeting\", \"Mon 6pm\", \"10pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"nananakx-x"},"content":" TaskList matchingTaskList \u003d parser.findMatchingTaskList(\"find hello\", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"nananakx-x"},"content":" assertEquals(0, matchingTaskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"nananakx-x"},"content":" public void testFindMatchingTaskListEmptyKeyword() throws Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new ToDo(\"return book\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Deadline(\"book review\", \"07/12/2019 1920\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"meeting\", \"Mon 6pm\", \"10pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"nananakx-x"},"content":" assertThrows(InvalidDescriptionException.class, () -\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"nananakx-x"},"content":" parser.findMatchingTaskList(\"find \", taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"nananakx-x"},"content":" });","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"nananakx-x":95}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" public void testTaskToStringData() {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" Task task \u003d new Deadline(\"math homework\", \"12/12/2002 1700\");","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" String taskString \u003d Storage.taskData(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" String expected \u003d \"D | 0 | math homework | 12/12/2002 1700\";","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" assertEquals(expected, taskString);","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" public void testStringDataToEventTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" String taskString \u003d \"E | 1 | project meeting | Mon 2pm | 6pm\";","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" Task task \u003d Storage.dataToTask(taskString);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" assertEquals(Event.class, task.getClass());","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"project meeting\", task.getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" assertTrue(task.getIsDone());","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"Mon 2pm\", event.getFrom());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"6pm\", event.getTo());","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" public void testStringToDeadlineTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" String taskString \u003d \"D | 0 | assignment 0 | 12/12/2002 1700\";","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" Task task \u003d Storage.dataToTask(taskString);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":" assertEquals(Deadline.class, task.getClass());","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"assignment 0\", task.getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" assertTrue(!task.getIsDone());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" assertEquals(LocalDateTime.parse(\"2002-12-12T17:00\"), deadline.getBy());","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nananakx-x":52}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" public void testConvertDateTimeValid() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":" Deadline deadline \u003d new Deadline(\"homework\", \"12/09/2080 1718\");","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" LocalDateTime actual \u003d deadline.convertDateTime(\"12/09/2080 1718\");","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" LocalDateTime expected \u003d LocalDateTime.of(2080, 9, 12, 17, 18);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":" public void testConvertDateTimeInvalid() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" Deadline deadline \u003d new Deadline(\"homework\", \"12/09/2080 1718\");","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" deadline.convertDateTime(\"hello bye!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" });","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" public void testFormatDateTime() {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" Deadline deadline \u003d new Deadline(\"homework\", \"12/09/2080 1718\");","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2080, 9, 12, 17, 18);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" String actual \u003d deadline.formatDateTime(dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" String expected \u003d \"12 Sep 2080 5:18 PM\"; // Adjust the expected value accordingly","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" public void testDeadlineString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":" Task task \u003d new Deadline(\"math homework\", \"12/12/2002 1700\");","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" String expected \u003d \"[D][ ] math homework (by: 12 Dec 2002 5:00 PM)\";","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" assertEquals(expected, task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nananakx-x":41}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":" private TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":" public void testAddTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new ToDo(\"Test\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"Test2\", \"Mon 12pm\", \"Tues 6pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":" assertEquals(2, taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":" public void testRemoveTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"Test2\", \"Mon 12pm\", \"Tues 6pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":" taskList.removeTask(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":" assertEquals(0, taskList.getSize());","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":" public void testGetTaskValidIndex() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new ToDo(\"Test\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"Test2\", \"Mon 12pm\", \"Tues 6pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Deadline(\"homework\", \"12/09/2080 1718\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"Test\", taskList.getTask(0).getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"Test2\", taskList.getTask(1).getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"homework\", taskList.getTask(2).getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nananakx-x"},"content":" public void testGetTaskInvalidIndex() {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new ToDo(\"Test\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"Test2\", \"Mon 12pm\", \"Tues 6pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Deadline(\"homework\", \"12/09/2080 1718\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"nananakx-x"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e taskList.getTask(3));","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"nananakx-x"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"nananakx-x"},"content":" public void testGetAllTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new ToDo(\"Test\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Event(\"Test2\", \"Mon 12pm\", \"Tues 6pm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"nananakx-x"},"content":" taskList.addTask(new Deadline(\"homework\", \"12/09/2080 1718\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nananakx-x"},"content":" ArrayList\u003cTask\u003e allTasks \u003d taskList.getAllTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nananakx-x"},"content":" assertNotNull(allTasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"Test\", allTasks.get(0).getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"Test2\", allTasks.get(1).getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"nananakx-x"},"content":" assertEquals(\"homework\", allTasks.get(2).getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nananakx-x"},"content":" assertEquals(3, allTasks.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"nananakx-x"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nananakx-x"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nananakx-x"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"nananakx-x":61}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nananakx-x"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"nananakx-x"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"nananakx-x"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nananakx-x"},"content":"event video meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nananakx-x"},"content":"todo join sports club","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nananakx-x"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nananakx-x"},"content":"todo read a book","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nananakx-x"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nananakx-x"},"content":"deadline return book /by 04/12/2023 1920","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"nananakx-x"},"content":"deadline return book /by 04/12/2023 1989","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"nananakx-x"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nananakx-x"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nananakx-x"},"content":"unmark 9","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nananakx-x"},"content":"unmark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nananakx-x"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nananakx-x"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nananakx-x"},"content":"no work today!","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nananakx-x"},"content":"deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nananakx-x"},"content":"hihihi","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nananakx-x"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nananakx-x"},"content":"event party","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"nananakx-x"},"content":"event party /from 7 /to","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"nananakx-x"},"content":"deadline math","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"nananakx-x"},"content":"deadline math /by","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"nananakx-x"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"nananakx-x"},"content":"delete 8","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"nananakx-x"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"nananakx-x"},"content":"delete 6","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"nananakx-x"},"content":"delete 4","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"nananakx-x"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"nananakx-x"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nananakx-x":31}},{"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":"nananakx-x"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-09-03"},{"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":{"nananakx-x":1,"-":20}}] diff --git a/nananakx-x_ip_master/commits.json b/nananakx-x_ip_master/commits.json index cf69bd4c..ba91733a 100644 --- a/nananakx-x_ip_master/commits.json +++ b/nananakx-x_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"nananakx-x":[{"date":"2023-08-24","commitResults":[{"hash":"f2f34cd198af8a35c7c484ace536f05f0f3e0106","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"e53ff2b413a2bef5b7be22a54a51eb3d0e2a58a1","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}},{"hash":"278e0a4844e8e4f4665ffbb91c065b922fd50fcc","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}},{"hash":"f58b1cdfc2cd228e592a998311ded8f14cf58788","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":6}}},{"hash":"196e076f9e255b4a7ddc7cd076f5b36d71014e50","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":121,"deletions":46}}},{"hash":"335034ae8ebdcebed56b375f6577c0d1634e5918","isMergeCommit":false,"messageTitle":"Level 5 minimal","messageBody":"","tags":["Level-5-minimal"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":69}}},{"hash":"64ab8e82fc76ee5d6db52a6fde4f5d6847fadb12","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":1},"java":{"insertions":63,"deletions":27}}},{"hash":"e0d4d7040f545e973e24752630c1156b70d0dc03","isMergeCommit":false,"messageTitle":"A-TextUiTesting v2","messageBody":"","tags":["A-TextUiTesting2"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":1},"java":{"insertions":33,"deletions":19}}},{"hash":"b7f2f5a935209da5b33901c97e2d11ac6f410724","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":12}}}]},{"date":"2023-09-01","commitResults":[{"hash":"4199ef28df426f4a7e2158e5be310ce29e699449","isMergeCommit":false,"messageTitle":"Add InvalidNumberException","messageBody":"","tags":["InvalidNumberException"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}}]},{"date":"2023-09-02","commitResults":[{"hash":"449d322594e2bbc604a32f9ef339269e4fea7712","isMergeCommit":false,"messageTitle":"Split code in main to different methods","messageBody":"","tags":["Main-Methods"],"fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":117}}},{"hash":"e99263d2c7604d193e8a0c13512f9571716bb324","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":2}}},{"hash":"50cc69101c049047b7801fdaa572d364e77c946d","isMergeCommit":true,"messageTitle":"Level 7. Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"c7764ce4c1016a31a4c02be343a2ff2cfbf9828e","isMergeCommit":false,"messageTitle":"Level 8. Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":30,"deletions":5}}},{"hash":"8492e4873d7edc26092a1034288dea5b48a5d13f","isMergeCommit":true,"messageTitle":"Level 8. Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"939a54deb988d06039f570d9ec4b94413f0617de","isMergeCommit":false,"messageTitle":"A-MoreOOP: Use More OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":276,"deletions":159}}},{"hash":"5a08c1fd0c74079d580d1cc75002b2cc87d89079","isMergeCommit":true,"messageTitle":"A-MoreOOP: Use More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"fa037a08882eca89b8eed2097e7b8e3a6f2066c2","isMergeCommit":false,"messageTitle":"A-Packages: Organize into Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":10},"bat":{"insertions":1,"deletions":1}}},{"hash":"f222ca8ea50131c27f3bb358e7682ad0dee4faf4","isMergeCommit":true,"messageTitle":"A-Packages: Organize into Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"d42701cc2af619061b105e5ba69f8662fd6b34fc","isMergeCommit":true,"messageTitle":"Merge add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"93c521513ab6ffc47552c364f36b414723a01c6c","isMergeCommit":false,"messageTitle":"A-Gradle: Use Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"27270928557fc8051c7f51e84dd9966c5dd371a0","isMergeCommit":false,"messageTitle":"A-JUnit: Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":143,"deletions":0}}},{"hash":"bce0f9fe6fd35735998468340bf878edcfd57af3","isMergeCommit":false,"messageTitle":"A-JavaDoc: JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":263,"deletions":60}}},{"hash":"82cfdf9b08346d0b976acdbf00800c6dfb6a46ce","isMergeCommit":true,"messageTitle":"A-JavaDoc: JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"4dc054ed63db79086bb0661aba49cf835717396f","isMergeCommit":false,"messageTitle":"A-CodingStandard: Follow the Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":27}}},{"hash":"40f4f625d23eb7f580182d2aef43a71c3993c584","isMergeCommit":false,"messageTitle":"Level-9: Find","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":46,"deletions":3}}},{"hash":"8c99c59e993c32477831922b37910adadab6bb8e","isMergeCommit":true,"messageTitle":"A-CodingStandard: Follow the Coding Standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"0a5b9c23e750d413d7f058f1f9471055b5593e75","isMergeCommit":false,"messageTitle":"Level-9v2: Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":5}}},{"hash":"0f110d8b6b8bb2f6247c7a49dabfe473ebdbb43e","isMergeCommit":false,"messageTitle":"Level 9v3. Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"85432fcd3f4b58b3db0f840d7560ca0fdc6f540a","isMergeCommit":false,"messageTitle":"Level 9v4. Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"b0a32fcfe497d047ef2528843b6455190d6f368e","isMergeCommit":true,"messageTitle":"Level 9. Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"2b13636e1048211efdfb1b62178cda9c574dbdc3","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","tags":["More-OOP"],"fileTypesAndContributionMap":{"java":{"insertions":517,"deletions":392}}}]}]},"authorFileTypeContributionMap":{"nananakx-x":{"java":1196,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":31}},"authorContributionVariance":{"nananakx-x":123885.11},"authorDisplayNameMap":{"nananakx-x":"CS2103T-T13-4 TAN ..ETTE"}} +{"authorDailyContributionsMap":{"nananakx-x":[{"date":"2023-08-24","commitResults":[{"hash":"f2f34cd198af8a35c7c484ace536f05f0f3e0106","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"e53ff2b413a2bef5b7be22a54a51eb3d0e2a58a1","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}},{"hash":"278e0a4844e8e4f4665ffbb91c065b922fd50fcc","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}},{"hash":"f58b1cdfc2cd228e592a998311ded8f14cf58788","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":6}}},{"hash":"196e076f9e255b4a7ddc7cd076f5b36d71014e50","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":121,"deletions":46}}},{"hash":"335034ae8ebdcebed56b375f6577c0d1634e5918","isMergeCommit":false,"messageTitle":"Level 5 minimal","messageBody":"","tags":["Level-5-minimal"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":69}}},{"hash":"64ab8e82fc76ee5d6db52a6fde4f5d6847fadb12","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":1},"java":{"insertions":63,"deletions":27}}},{"hash":"e0d4d7040f545e973e24752630c1156b70d0dc03","isMergeCommit":false,"messageTitle":"A-TextUiTesting v2","messageBody":"","tags":["A-TextUiTesting2"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":1},"java":{"insertions":33,"deletions":19}}},{"hash":"b7f2f5a935209da5b33901c97e2d11ac6f410724","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":12}}}]},{"date":"2023-09-01","commitResults":[{"hash":"4199ef28df426f4a7e2158e5be310ce29e699449","isMergeCommit":false,"messageTitle":"Add InvalidNumberException","messageBody":"","tags":["InvalidNumberException"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}}]},{"date":"2023-09-02","commitResults":[{"hash":"449d322594e2bbc604a32f9ef339269e4fea7712","isMergeCommit":false,"messageTitle":"Split code in main to different methods","messageBody":"","tags":["Main-Methods"],"fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":117}}},{"hash":"e99263d2c7604d193e8a0c13512f9571716bb324","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":2}}},{"hash":"50cc69101c049047b7801fdaa572d364e77c946d","isMergeCommit":true,"messageTitle":"Level 7. Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"c7764ce4c1016a31a4c02be343a2ff2cfbf9828e","isMergeCommit":false,"messageTitle":"Level 8. Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":30,"deletions":5}}},{"hash":"8492e4873d7edc26092a1034288dea5b48a5d13f","isMergeCommit":true,"messageTitle":"Level 8. Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"939a54deb988d06039f570d9ec4b94413f0617de","isMergeCommit":false,"messageTitle":"A-MoreOOP: Use More OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":276,"deletions":159}}},{"hash":"5a08c1fd0c74079d580d1cc75002b2cc87d89079","isMergeCommit":true,"messageTitle":"A-MoreOOP: Use More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"fa037a08882eca89b8eed2097e7b8e3a6f2066c2","isMergeCommit":false,"messageTitle":"A-Packages: Organize into Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":10},"bat":{"insertions":1,"deletions":1}}},{"hash":"f222ca8ea50131c27f3bb358e7682ad0dee4faf4","isMergeCommit":true,"messageTitle":"A-Packages: Organize into Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"d42701cc2af619061b105e5ba69f8662fd6b34fc","isMergeCommit":true,"messageTitle":"Merge add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"93c521513ab6ffc47552c364f36b414723a01c6c","isMergeCommit":false,"messageTitle":"A-Gradle: Use Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"27270928557fc8051c7f51e84dd9966c5dd371a0","isMergeCommit":false,"messageTitle":"A-JUnit: Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":143,"deletions":0}}},{"hash":"bce0f9fe6fd35735998468340bf878edcfd57af3","isMergeCommit":false,"messageTitle":"A-JavaDoc: JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":263,"deletions":60}}},{"hash":"82cfdf9b08346d0b976acdbf00800c6dfb6a46ce","isMergeCommit":true,"messageTitle":"A-JavaDoc: JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"4dc054ed63db79086bb0661aba49cf835717396f","isMergeCommit":false,"messageTitle":"A-CodingStandard: Follow the Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":27}}},{"hash":"40f4f625d23eb7f580182d2aef43a71c3993c584","isMergeCommit":false,"messageTitle":"Level-9: Find","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":46,"deletions":3}}},{"hash":"8c99c59e993c32477831922b37910adadab6bb8e","isMergeCommit":true,"messageTitle":"A-CodingStandard: Follow the Coding Standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"0a5b9c23e750d413d7f058f1f9471055b5593e75","isMergeCommit":false,"messageTitle":"Level-9v2: Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":5}}},{"hash":"0f110d8b6b8bb2f6247c7a49dabfe473ebdbb43e","isMergeCommit":false,"messageTitle":"Level 9v3. Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"85432fcd3f4b58b3db0f840d7560ca0fdc6f540a","isMergeCommit":false,"messageTitle":"Level 9v4. Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"b0a32fcfe497d047ef2528843b6455190d6f368e","isMergeCommit":true,"messageTitle":"Level 9. Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"2b13636e1048211efdfb1b62178cda9c574dbdc3","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","tags":["More-OOP"],"fileTypesAndContributionMap":{"java":{"insertions":517,"deletions":392}}}]},{"date":"2023-09-05","commitResults":[{"hash":"bd46420a0f174a610dde6c110f43186339b2cf9a","isMergeCommit":false,"messageTitle":"Add more methods to Ui","messageBody":"","tags":["Ui-methods"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":60}}}]}]},"authorFileTypeContributionMap":{"nananakx-x":{"java":1198,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":31}},"authorContributionVariance":{"nananakx-x":117512.04},"authorDisplayNameMap":{"nananakx-x":"CS2103T-T13-4 TAN ..ETTE"}} diff --git a/nikele2001_ip_master/authorship.json b/nikele2001_ip_master/authorship.json index ad9731cd..35c83e1d 100644 --- a/nikele2001_ip_master/authorship.json +++ b/nikele2001_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"# DukePro","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"\u003e “Your mind is for having ideas, not holding them.” – David Allen ([source](https://boulderbugle.com/quotes-185mla85))","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"DukePro frees your mind of having to remember things you need to do. It\u0027s,","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"- text-based","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"- easy to learn","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"- ~~FAST~~ *SUPER* FAST to use","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"All you need to do is,","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"1. download it from here.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"2. double-click it.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"3. add your tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"4. let it manage your tasks for you 😉","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":"And it is **FREE**!","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":"Features:","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":"- [x] Managing tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":"- [ ] Managing deadlines (coming soon)","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":"- [ ] Reminders (coming soon)","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":"If you are a Java programmer, you can use it to practise Java too. Here\u0027s the `main` method:","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":"public class Main {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"nikele2001":23,"-":7}},{"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":"nikele2001"},"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":"-"},"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":"nikele2001"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" getDestinationDirectory().set(new File(projectDir, \"./src\")) // to specify jar file location","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"nikele2001":7,"-":41}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"D | 0 | book | 2019-10-10","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"E | 1 | bookk | 2019-10-10 | 2019-10-10","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"T | 0 | read book1","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"D | 0 | read another book | 2020-10-10","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"T | 0 | abc","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"T | 1 | read abcd","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"T | 1 | read dcba","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"nikele2001":8}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" * A class that represents the whole program","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"public class Duke {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" private Storage storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" private Ui ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" * A constructor for the Duke program","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" * @param filePath","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" * A method to start the program","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" public void run() {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" this.ui.greeting();","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" String userInput \u003d ui.readCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" // basic user input processing","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" Command c \u003d Parser.parse(userInput);","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" c.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" } finally {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" ui.printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" ui.ending();","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":55}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":"import duke.exception.UnknownTaskTypeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" * A class that deals with making sense of the user commands","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * A method that returns an integer which represents the type of command user","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * inputted.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand string that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" * @return integer based on the type of command user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" public static int getCommand(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" fullCommand \u003d fullCommand.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" boolean isList \u003d fullCommand.equals(\"list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" boolean isMark \u003d Pattern.compile(\"^mark\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" boolean isUnmark \u003d Pattern.compile(\"^unmark\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" boolean isTodo \u003d Pattern.compile(\"^todo\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" boolean isDeadline \u003d Pattern.compile(\"^deadline\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" boolean isEvent \u003d Pattern.compile(\"^event\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" boolean isDelete \u003d Pattern.compile(\"^delete\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" boolean isExit \u003d Pattern.compile(\"^bye\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" boolean isFind \u003d Pattern.compile(\"^find\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" boolean isValidTask \u003d isTodo || isDeadline || isEvent;","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" return isList","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" ? 0","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" : isMark","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" ? 1","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" : isUnmark","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" ? 2","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" : isValidTask","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" ? 3","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" : isDelete","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" ? 4","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" : isFind","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" ? 5","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" : isExit","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" ? 6","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" : 7;","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" * A method that returns an integer based on the type of task user wants to add","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand string that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" * @return integer based on the type of task user wants to add","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" public static int getTaskType(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" boolean isTodo \u003d Pattern.compile(\"^todo\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":" boolean isDeadline \u003d Pattern.compile(\"^deadline\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" // boolean isEvent \u003d Pattern.compile(\"^event\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" return isTodo ? 0 : isDeadline ? 1 : 2;","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" * A method that gets the index of a task that user specified in command, if any","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand string that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"nikele2001"},"content":" * @return index that user specified","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"nikele2001"},"content":" public static int getIndex(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"nikele2001"},"content":" // how to check if string is parseable without parsing it?","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"nikele2001"},"content":" return Integer.parseInt(fullCommand.split(\" \")[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"nikele2001"},"content":" * A method that returns the keyword that user is searching for when user uses the find command","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand string that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"nikele2001"},"content":" * @return string that user wants to search with regards to tasks\u0027 descriptions","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"nikele2001"},"content":" public static String getKeyString(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"nikele2001"},"content":" return fullCommand.split(\" \", 2)[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"nikele2001"},"content":" * A method to parse command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand string that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"nikele2001"},"content":" * @return A Command object representing the command user gives","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException when user input does not represent any particular","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"nikele2001"},"content":" * command","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"nikele2001"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"nikele2001"},"content":" int taskType \u003d Parser.getCommand(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"nikele2001"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"nikele2001"},"content":" case 0: {","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"nikele2001"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"nikele2001"},"content":" case 1: {","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(\"mark \").matcher(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"nikele2001"},"content":" // return error","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"nikele2001"},"content":" int index \u003d Parser.getIndex(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"nikele2001"},"content":" return new MarkCommand(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"nikele2001"},"content":" case 2: {","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(\"unmark \").matcher(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"nikele2001"},"content":" // return error","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"nikele2001"},"content":" int index \u003d Parser.getIndex(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"nikele2001"},"content":" return new UnmarkCommand(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"nikele2001"},"content":" case 3: {","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"nikele2001"},"content":" switch (Parser.getTaskType(fullCommand)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"nikele2001"},"content":" case 0: {","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"nikele2001"},"content":" return new AddCommand().new TodoCommand(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"nikele2001"},"content":" case 1: {","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"nikele2001"},"content":" return new AddCommand().new DeadlineCommand(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"nikele2001"},"content":" case 2: {","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"nikele2001"},"content":" return new AddCommand().new EventCommand(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"nikele2001"},"content":" case 4: {","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(\"delete \").matcher(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"nikele2001"},"content":" // return error","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"nikele2001"},"content":" int index \u003d Parser.getIndex(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"nikele2001"},"content":" return new DeleteCommand(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"nikele2001"},"content":" case 5: {","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(\"find \").matcher(fullCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"nikele2001"},"content":" // return error","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"nikele2001"},"content":" String keyString \u003d Parser.getKeyString(fullCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"nikele2001"},"content":" return new FindCommand(keyString);","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"nikele2001"},"content":" case 6: {","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"nikele2001"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":149,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"nikele2001"},"content":" default: {","lastModifiedDate":"2023-08-26"},{"lineNumber":151,"author":{"gitId":"nikele2001"},"content":" throw new UnknownTaskTypeException();","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":156}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"import duke.exception.UnknownTaskTypeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" * A class that deals with loading tasks from the file and saving tasks in the file","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" private String filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * A constructor method for the Storage object","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * @param filePath string representation of file path to database","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" * A method that returns a Task ArrayList based on stored data. ArrayList ","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" * generated is then used to initialise TaskList object","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" * @return ArrayList\u003cTask\u003e based on stored data","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" public ArrayList\u003cTask\u003e load() throws Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" Scanner dataSc \u003d new Scanner(f);","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" while (dataSc.hasNextLine()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" String[] task \u003d dataSc.nextLine().trim().split(\"\\\\|\");","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" task[0] \u003d task[0].trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" int taskType \u003d task[0].equals(\"T\") ? 0 : task[0].equals(\"D\") ? 1 : 2;","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" case 0: {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" String dataString \u003d \"todo \" + task[2].trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" arr.add(Todo.of(dataString));","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" case 1: {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" String dataString \u003d \"deadline \" + task[2].trim() + \" /by \" + task[3].trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" arr.add(Deadline.of(dataString));","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" case 2: {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" String dataString \u003d \"event \" + task[2].trim() + \" /from \" + task[3].trim() + \" /to \"","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" + task[4].trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" arr.add(Event.of(dataString));","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" default: {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":" throw new UnknownTaskTypeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" if (task[1].trim().equals(\"1\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":" arr.get(arr.size() - 1).markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"nikele2001"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"nikele2001"},"content":" arr.get(arr.size() - 1).markAsNotDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"nikele2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"nikele2001"},"content":" System.out.println(\"file is corrupted! dieee\");","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"nikele2001"},"content":" dataSc.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"nikele2001"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"nikele2001"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"nikele2001"},"content":" return arr;","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"nikele2001"},"content":" * A method to update stored data based on latest user input on the program","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"nikele2001"},"content":" * @param arr active TaskList object of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"nikele2001"},"content":" public void update(TaskList arr) {","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"nikele2001"},"content":" FileOutputStream object \u003d new FileOutputStream(this.filePath, false);","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"nikele2001"},"content":" for (char c : arr.storage().toCharArray()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"nikele2001"},"content":" object.write(c);","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"nikele2001"},"content":" object.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"nikele2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"nikele2001"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":102}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.exception.IndexOutOfBoundsException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" * A class that represents a list that stores tasks inputted by user","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"public class TaskList {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" protected ArrayList\u003cTask\u003e taskArr;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" * A constructor for the TaskList object","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" public TaskList() {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" this.taskArr \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * A constructor for the TaskList object","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * @param arr ArrayList of Task objects that TaskList object generated contains","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" public TaskList(ArrayList\u003cTask\u003e arr) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" this.taskArr \u003d arr;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" * A method that returns task object at given index of TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" * @param index index of Task object","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" * @return specified Task object","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException when index is out of range","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" public Task getTask(int index) throws DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" return this.taskArr.get(index);","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" throw new IndexOutOfBoundsException();","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" * A method that returns length of TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" * @return length of TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" public int length() {","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" return this.taskArr.size();","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" * A method that marks specified Task object as done","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" * @params index index of Task object","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException when index is out of range","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" public void markTaskAsDone(int index) throws DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" this.getTask(index).markAsDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" * A method that unmarks specified Task object as done","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" * @param index index of Task object","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException when index is out of range","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" public void markTaskAsNotDone(int index) throws DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" this.getTask(index).markAsNotDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of a Task object","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"nikele2001"},"content":" * at specified index","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"nikele2001"},"content":" * @param index task at given index of TaskList object","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the Task object","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"nikele2001"},"content":" public String taskToString(int index) {","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"nikele2001"},"content":" return this.taskArr.get(index).toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"nikele2001"},"content":" * A method that returns a string representation of the number of","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"nikele2001"},"content":" * tasks in a TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the number of tasks in the TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"nikele2001"},"content":" public String numTasksToString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"nikele2001"},"content":" if (this.length() \u003d\u003d 1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"nikele2001"},"content":" return \" task\";","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"nikele2001"},"content":" return \" tasks\";","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":93,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"nikele2001"},"content":" * A method to to add a task to the TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"nikele2001"},"content":" * @param task task object to be added","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"nikele2001"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-22"},{"lineNumber":98,"author":{"gitId":"nikele2001"},"content":" this.taskArr.add(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":100,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":101,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"nikele2001"},"content":" * A method to add a task to the TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"nikele2001"},"content":" * @param index index of Task object that user wants to delete","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"nikele2001"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"nikele2001"},"content":" this.taskArr.remove(index);","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":108,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":109,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"nikele2001"},"content":" * A method to generate a string representing the TaskList in a format that can","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"nikele2001"},"content":" * be stored in the .txt file","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"nikele2001"},"content":" * String is passed to the Storage object to be processed","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"nikele2001"},"content":" * @return string representation of TaskList to be stored","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"nikele2001"},"content":" public String storage() {","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"nikele2001"},"content":" String out \u003d \"\";","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"nikele2001"},"content":" for (Task task : this.taskArr) {","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"nikele2001"},"content":" out +\u003d task.toBeStored();","lastModifiedDate":"2023-08-25"},{"lineNumber":119,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":120,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-08-25"},{"lineNumber":121,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":122,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"nikele2001"},"content":" * A method that takes in a string and returns tasklist containing","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"nikele2001"},"content":" * all tasks such that inputted string is a substring of the tasks\u0027 description","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"nikele2001"},"content":" * @param keyString string that user wants to compare tasks\u0027 descriptions against","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"nikele2001"},"content":" * @return TaskList object containing all desired tasks with descriptions being","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"nikele2001"},"content":" * superstring of inputted string","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"nikele2001"},"content":" public TaskList filter(String keyString) {","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"nikele2001"},"content":" ArrayList\u003cTask\u003e out \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"nikele2001"},"content":" for (Task task : this.taskArr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"nikele2001"},"content":" if (task.isKey(keyString)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"nikele2001"},"content":" out.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"nikele2001"},"content":" return new TaskList(out);","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"nikele2001":139}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" * A class that handles all the user interactions of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"public class Ui {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" private String lnspace \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" private final Scanner sc;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" public Ui() {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" * A method that prints greeting when program starts","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" * @return string representing greeting","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" public String greeting() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" String greeting \u003d lnspace + \"\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" + \"Hello! I\u0027m Lorem\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" + lnspace + \"\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" System.out.println(greeting);","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" return greeting;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" * A method that prints ending when program terminates","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" * @return string representing ending","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" public String ending() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" String ending \u003d \"Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" + lnspace;","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" System.out.println(ending);","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" this.sc.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" return ending;","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" * A method that prints a straight line","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" * @return string representing straight line","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" public String printLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" System.out.println(lnspace);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" return lnspace;","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" * A method that prints error message when existing data file is not found","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" * @return string representing error message","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" public String showLoadingError() {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" String out \u003d \"Existing data not found. Creating new data file tasks.txt found in ./data/ folder.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" System.out.println(out);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" * A method that prints the error message specified","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" * @param message error message that user wants to print","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" * @return string that user inputted as argument","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":" public String showError(String message) {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" return message;","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" * A method that reads the next command that user inputted","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":" * @returns string that user inputted","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"nikele2001"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"nikele2001"},"content":" return this.sc.nextLine().trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"nikele2001"},"content":" * A method that prints message during task addition","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"nikele2001"},"content":" * @param arr TaskList object that task object is added to","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"nikele2001"},"content":" public void addTask(TaskList arr) {","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"nikele2001"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"nikele2001"},"content":" System.out.println(arr.taskToString(arr.length() - 1));","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"nikele2001"},"content":" System.out.println(\"Now you have \" + (arr.length()) + arr.numTasksToString() + \" in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"nikele2001"},"content":" * A method that prints message during task marking","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"nikele2001"},"content":" * @param index index of Task object that user marked in specified TaskList object","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"nikele2001"},"content":" * @param arr TaskList object that contains Task object that user marked","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"nikele2001"},"content":" public void markTask(int index, TaskList arr) {","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"nikele2001"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"nikele2001"},"content":" System.out.println(arr.taskToString(index));","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"nikele2001"},"content":" * A method that prints message during task unmarking","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"nikele2001"},"content":" * @param index index of Task object that user unmarked in specified TaskList object","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"nikele2001"},"content":" * @param arr TaskList object that contains Task object that user unmarked","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"nikele2001"},"content":" public void unmarkTask(int index, TaskList arr) {","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"nikele2001"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"nikele2001"},"content":" System.out.println(arr.taskToString(index));","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"nikele2001"},"content":" * A method that prints message when user wants a list of tasks in TaskList object","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"nikele2001"},"content":" * @param arr TaskList object that contains existing Task objects","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"nikele2001"},"content":" * @return string that is printed representing list of tasks in specified","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"nikele2001"},"content":" * TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"nikele2001"},"content":" public String list(TaskList arr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"nikele2001"},"content":" String out \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"nikele2001"},"content":" for (int i \u003d 0; i \u003c arr.length(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"nikele2001"},"content":" out \u003d out + (i + 1) + \". \" + arr.taskToString(i) + \"\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"nikele2001"},"content":" System.out.println(out);","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"nikele2001"},"content":" * A method that finds all existing tasks that contains specified substring and lists it ","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"nikele2001"},"content":" * @param arr taskList object that contains existing Task objects","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"nikele2001"},"content":" * @param keyString string that user wants to search for","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"nikele2001"},"content":" * @return string that lists all tasks with descriptions containing specified substring","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"nikele2001"},"content":" public String find(TaskList arr, String keyString) {","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"nikele2001"},"content":" String out \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"nikele2001"},"content":" TaskList outTaskList \u003d arr.filter(keyString);","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"nikele2001"},"content":" if (outTaskList.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"nikele2001"},"content":" out \u003d \"There are no matching tasks in the list.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"nikele2001"},"content":" System.out.println(out);","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"nikele2001"},"content":" for (int i \u003d 0; i \u003c outTaskList.length(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"nikele2001"},"content":" out \u003d out + (i + 1) + \". \" + outTaskList.taskToString(i) + \"\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"nikele2001"},"content":" System.out.println(out);","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"nikele2001"},"content":" * A method that prints message when user deletes a task in TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"nikele2001"},"content":" * @param arr TaskList where deleted Task is contained in","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"nikele2001"},"content":" * @param index index of Task object that was deleted","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"nikele2001"},"content":" public void deleteTask(TaskList arr, int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":151,"author":{"gitId":"nikele2001"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"nikele2001"},"content":" System.out.println(arr.taskToString(index));","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"nikele2001"},"content":" System.out.println(\"Now you have \" + (arr.length() - 1) + arr.numTasksToString() + \" in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":155}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" * A class that represents all task addition commands that user can give","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" private Task task;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" public AddCommand() {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * A method that executes the command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * @params tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" * @params ui UI interface that is used to print messages to the terminak","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" * @params storage Storage object that houses database of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" tasks.addTask(this.task);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" ui.addTask(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to add a Todo task","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" public class TodoCommand extends AddCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" * Constructor for TodoCommand object","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand command that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException when command is unable to be processed properly","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" public TodoCommand(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" super.task \u003d Todo.of(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to add a Deadline task","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" public class DeadlineCommand extends AddCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" * Constructor for DeadlineCommand object","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand command that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException when command is unable to be processed properly","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" public DeadlineCommand(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" super.task \u003d Deadline.of(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to add an Event task","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"nikele2001"},"content":" public class EventCommand extends AddCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"nikele2001"},"content":" * Constructor for EventCommand object","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand command that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException when command is unable to be processed properly","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"nikele2001"},"content":" public EventCommand(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"nikele2001"},"content":" super.task \u003d Event.of(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"nikele2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"nikele2001"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":88}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * An abstract class that represents all commands that user can possibly make","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" * All commands user can make are subtypes of this class","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" * An abstract method that executes the command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" * @params tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" * @params ui UI interface that is used to print messages to the terminak","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" * @params storage Storage object that houses database of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * A method that returns true when command is to exit program","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" * @return boolean based on whether user wants to exit program","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" return this.isExit;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":31}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to delete a task","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" private int index;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" * A method that executes the command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" * @params tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" * @params ui UI interface that is used to print messages to the terminal","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" * @params storage Storage object that houses database of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" ui.deleteTask(tasks, index);","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" tasks.delete(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":30}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to exit the program","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public ExitCommand() {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" * A method that executes the command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" * @params tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" * @params ui UI interface that is used to print messages to the terminal","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * @params storage Storage object that houses database of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":28}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to find tasks based on specified keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" private String keyString;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" public FindCommand(String keyString) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" this.keyString \u003d keyString;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" * A method that executes the command that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" * @param tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" * @param ui UI interface that is used to print messages to the terminal","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" * @param storage Storage object that houses database of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" @Override ","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" ui.find(tasks, this.keyString);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nikele2001":26}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to list all existing tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" * A method that executes the command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" * @params tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" * @params ui UI interface that is used to print messages to the terminal","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" * @params storage Storage object that houses database of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException exception thrown if database cannot be interpreted correctly","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" ui.list(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":23}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to mark a task","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" private int index;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" * A method that executes the command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" * @params tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" * @params ui UI interface that is used to print messages to the terminak","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" * @params storage Storage object that houses database of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException exception thrown if marking task is not able to be done, possibly due to erroneous indexing","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" tasks.markTaskAsDone(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" ui.markTask(index, tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":35}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to unmark a task","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" private int index;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" * A method that executes the command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" * @params tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" * @params ui UI interface that is used to print messages to the terminal","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" * @params storage Storage object that houses database of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException exception thrown if unmarking task is not able to be done, ","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * possibly due to erroneous indexing","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" tasks.markTaskAsNotDone(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" ui.unmarkTask(index, tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":36}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown by the program (other than FileNotFoundException)","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * @param message Error message to be printed onto the console","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":14}},{"path":"src/main/java/duke/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown when user wants to add tasks but did not input description","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"public class EmptyDescriptionException extends MissingInformationException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" public EmptyDescriptionException(String taskType) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" super(\"☹ OOPS!!! The description of a \" + taskType + \" cannot be empty.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":13}},{"path":"src/main/java/duke/exception/IndexOutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown when user is trying to access tasks in the program, ","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" * but provided index is out of bounds","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public class IndexOutOfBoundsException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public IndexOutOfBoundsException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(\"☹ OOPS!!! Index provided is invalid.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":14}},{"path":"src/main/java/duke/exception/InvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown by the program when ","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" * dates provided when adding tasks is of the wrong format","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public class InvalidDateException extends DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public InvalidDateException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(\"☹ OOPS!!! Date format given is invalid. Please input date in the following format: yyyy-mm-dd\");","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"nikele2001":14}},{"path":"src/main/java/duke/exception/MissingDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown by the program when user wants to add","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" * a Deadline object but did not provide a date to denote the deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public class MissingDeadlineException extends MissingInformationException {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public MissingDeadlineException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(\"☹ OOPS!!! Deadline is required for task to be created. Denote deadline with a /by.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":14}},{"path":"src/main/java/duke/exception/MissingEndTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown by the program when user wants to add an Event","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" * object but did not input an end date","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public class MissingEndTimeException extends MissingInformationException {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public MissingEndTimeException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(\"☹ OOPS!!! end time is required for task to be created. Denote end time with a /to.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":14}},{"path":"src/main/java/duke/exception/MissingInformationException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown by the program when information is expected","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" * in accordance to user commands, but not provided","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public abstract class MissingInformationException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public MissingInformationException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":15}},{"path":"src/main/java/duke/exception/MissingStartTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown by the program when user wants to add an Event","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" * object but did not input a start date","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public class MissingStartTimeException extends MissingInformationException {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public MissingStartTimeException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(\"☹ OOPS!!! Start time is required for task to be created. Denote start time with a /from.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":14}},{"path":"src/main/java/duke/exception/UnknownTaskTypeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown by the program when user inputs a command that","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" * is not expected","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public class UnknownTaskTypeException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public UnknownTaskTypeException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":14}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"import duke.exception.MissingDeadlineException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"import duke.exception.MissingInformationException;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" * A class that represents the Deadline class. It is ","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" * a subtype of the abstract Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" protected LocalDate deadline;","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" * A constructor of the Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" * @param description Description of deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * @param deadline deadline of Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" public Deadline(String description, LocalDate deadline) {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" * Factory method of Deadline class.","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" * String input is guaranteed to start with \"deadline\"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" * @param input user input from terminal.","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" * @return a Deadline object given the input string.","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" * @throws MissingInformationException due to possibly an empty","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" * description of the Deadline task or a missing /by deadline for","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" * the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" public static Deadline of(String input) throws MissingInformationException {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(\"deadline \").matcher(input);","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" matcher.find();","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" String info \u003d input.substring(matcher.end()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" matcher \u003d Pattern.compile(\" /by \").matcher(info);","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" throw new MissingDeadlineException();","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" String description \u003d info.substring(0, matcher.start()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" String deadline \u003d info.substring(matcher.end()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" LocalDate deadlineDate \u003d LocalDate.parse(deadline);","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" return new Deadline(description, deadlineDate);","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of a Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" + \")\";","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of a Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the Deadline object to be stored in the database","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":" public String toBeStored() {","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":" String marked \u003d this.isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":" return \"D | \" + marked + \" | \" + this.getDescription() + \" | \" + this.deadline + \"\\n\";","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"nikele2001":72}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"import duke.exception.MissingEndTimeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"import duke.exception.MissingInformationException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"import duke.exception.MissingStartTimeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" * A class that represents the Event class. It is ","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" * a subtype of the abstract Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" protected LocalDate start;","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" protected LocalDate end;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * A constructor of the Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" * @param description Description of Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" * @param start start date of Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" * @param end end date of Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" public Event(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" * Factory method of Event class.","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" * String input is guaranteed to start with \"event\"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" * @param input user input from terminal.","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" * @return a Event object given the input string.","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" * @throws MissingInformationException due to possibly an empty description of the ","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" * Event task or a missing /from start time or a missing /to end time for the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" public static Event of(String input) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(\"event \").matcher(input);","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" matcher.find();","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" String info \u003d input.substring(matcher.end()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" matcher \u003d Pattern.compile(\" /from \").matcher(info);","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" throw new MissingStartTimeException();","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" String description \u003d info.substring(0, matcher.start()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" String tmp \u003d info.substring(matcher.end()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" matcher \u003d Pattern.compile(\" /to \").matcher(tmp);","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" throw new MissingEndTimeException();","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" String start \u003d tmp.substring(0, matcher.start()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" String end \u003d tmp.substring(matcher.end()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" LocalDate startDate \u003d LocalDate.parse(start);","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" LocalDate endDate \u003d LocalDate.parse(end);","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" return new Event(description, startDate, endDate);","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of an Event object.","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the Event object.","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.start.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"nikele2001"},"content":" + \" to: \" + this.end.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"nikele2001"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of a Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the Deadline object to be stored in the database","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"nikele2001"},"content":" public String toBeStored() {","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"nikele2001"},"content":" String marked \u003d this.isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"nikele2001"},"content":" return \"E | \" + marked + \" | \" + this.getDescription() + \" | \" + this.start + \" | \" + this.end + \"\\n\";","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"nikele2001":85}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":" * An abstract class that is the supertype of all ","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" * tasks that program accepts (Todo, Deadline, Event).","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" protected boolean isDone \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" * Constructor for the Task object","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" * @param description Description of Task object","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * A method to return the description of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" * @return description of the task entered by the user.","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" return this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" * A method that retrieves the marked status of a task.","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" * @return the status of the task based on whether it is marked or not.","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" return this.isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" * A method that marks task as done.","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" * A method that marks task as not done","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of a task","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" * A method that returns whether the Task object has a description such that","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" * inputted keyString is a substring of the description","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":" * @param keyString string to check against task description","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":" public boolean isKey(String keyString) {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(keyString).matcher(this.getDescription());","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"nikele2001"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"nikele2001"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"nikele2001"},"content":" * An abstract method that returns string representation of Task object to be stored","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"nikele2001"},"content":" * @return String to be stored in the database","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"nikele2001"},"content":" public abstract String toBeStored();","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"nikele2001":84}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"import duke.exception.MissingInformationException;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" * A class that represents the Event class. It is ","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" * a subtype of the abstract Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" * Constructor of the Todo object","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" * @param description description of Todo object","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" * A factory method of Todo class.","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" * String input is guaranteed to start with \"todo\"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" * @param input user input from terminal.","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" * @return a Todo object given the input string.","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" * @throws MissingInformationException due to possibly an empty","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" * description of the todo task.","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" public static Todo of(String input) throws MissingInformationException {","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" input \u003d input.trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" if (input.length() \u003c\u003d 0) {","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" throw new EmptyDescriptionException(\"todo\");","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(\"todo \").matcher(input);","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" matcher.find();","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" String description \u003d input.substring(matcher.end()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" return new Todo(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" throw new EmptyDescriptionException(\"todo\");","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of a Todo object.","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the Todo object.","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of a Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the Deadline object to be stored in the database","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" public String toBeStored() {","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" String marked \u003d this.isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" return \"T | \" + marked + \" | \" + this.getDescription() + \"\\n\";","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"nikele2001":65}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke; //same package as the class being tested","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" public void emptyTaskListLengthTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" TaskList a \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" TaskList b \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" assertEquals(a.length(), b.length());","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" public void emptyTaskListTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" Task task \u003d Todo.of(\"todo read book\");","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" TaskList a \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" TaskList b \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" a.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" b.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" assertEquals(a.getTask(0), b.getTask(0));","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"nikele2001":33}},{"path":"src/test/java/duke/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke; //same package as the class being tested","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public class UiTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" public void greetingTest() {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" String lnspace \u003d ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" assertEquals(lnspace + \"\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" + \"Hello! I\u0027m Lorem\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" + lnspace + \"\\n\", ui.greeting());","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" public void endingTest() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" String lnspace \u003d ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" assertEquals(\"Bye. Hope to see you again soon!\\n\" + lnspace, ui.ending());","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"nikele2001":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"todo read book","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":1}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"# DukePro","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"\u003e “Your mind is for having ideas, not holding them.” – David Allen ([source](https://boulderbugle.com/quotes-185mla85))","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"DukePro frees your mind of having to remember things you need to do. It\u0027s,","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"- text-based","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"- easy to learn","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"- ~~FAST~~ *SUPER* FAST to use","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"All you need to do is,","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"1. download it from here.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"2. double-click it.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"3. add your tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"4. let it manage your tasks for you 😉","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":"And it is **FREE**!","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":"Features:","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":"- [x] Managing tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":"- [ ] Managing deadlines (coming soon)","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":"- [ ] Reminders (coming soon)","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":"If you are a Java programmer, you can use it to practise Java too. Here\u0027s the `main` method:","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":"public class Main {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"nikele2001":23,"-":7}},{"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":"nikele2001"},"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":"nikele2001"},"content":" ","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"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":"nikele2001"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-04"},{"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":"nikele2001"},"content":" getDestinationDirectory().set(new File(projectDir, \"./src\")) // to specify jar file location","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-02"},{"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":{"nikele2001":22,"-":41}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"D | 0 | book | 2019-10-10","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"E | 1 | bookk | 2019-10-10 | 2019-10-10","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"T | 0 | read book1","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"D | 0 | read another book | 2020-10-10","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"T | 0 | abc","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"T | 1 | read abcd","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"T | 1 | read dcba","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"nikele2001":8}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"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":"nikele2001"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nikele2001":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" * A class that represents the whole program","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"public class Duke {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" private Storage storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" private Ui ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" * A constructor for the Duke program","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" * @param filePath the path to database of the program","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" * A method to start the program","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" public void run() {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" this.ui.greeting();","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" String userInput \u003d ui.readCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" // basic user input processing","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" Command c \u003d Parser.parse(userInput);","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" c.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" } finally {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" ui.printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" ui.ending();","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" * A method that gets response from user and returns program\u0027s response","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" * @param input string that user inputted","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" * @return string to be displayed on GUI based on user\u0027s command","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" return c.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" * Method to start the duke program","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":" * @param args list of arguments passed","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":73}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" * A method to launch the application","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" * @param args list of arguments inputted","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nikele2001":16}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" private Duke duke \u003d new Duke(\"data/tasks.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" * A method to start the program","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nikele2001":35}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" private Duke duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaComputer.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" * A method that initialises and displays the elements when a user first starts and opens the program","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" String greeting \u003d \"Hello! I\u0027m Lorem\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" + \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" DialogBox.getDukeDialog(greeting, dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" * A method to set Duke class for fxmlLoader in Main class","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" * @param d duke object to be set","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"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":51,"author":{"gitId":"nikele2001"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nikele2001":64}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":"import duke.exception.UnknownTaskTypeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" * A class that deals with making sense of the user commands","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * A method that returns an integer which represents the type of command user","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * inputted.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand string that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" * @return integer based on the type of command user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" public static int getCommand(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" fullCommand \u003d fullCommand.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" boolean isList \u003d fullCommand.equals(\"list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" boolean isMark \u003d Pattern.compile(\"^mark\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" boolean isUnmark \u003d Pattern.compile(\"^unmark\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" boolean isTodo \u003d Pattern.compile(\"^todo\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" boolean isDeadline \u003d Pattern.compile(\"^deadline\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" boolean isEvent \u003d Pattern.compile(\"^event\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" boolean isDelete \u003d Pattern.compile(\"^delete\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" boolean isExit \u003d Pattern.compile(\"^bye\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" boolean isFind \u003d Pattern.compile(\"^find\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" boolean isValidTask \u003d isTodo || isDeadline || isEvent;","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" return isList","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" ? 0","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" : isMark","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" ? 1","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" : isUnmark","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" ? 2","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" : isValidTask","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" ? 3","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" : isDelete","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" ? 4","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" : isFind","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" ? 5","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" : isExit","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" ? 6","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" : 7;","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" * A method that returns an integer based on the type of task user wants to add","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand string that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" * @return integer based on the type of task user wants to add","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" public static int getTaskType(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" boolean isTodo \u003d Pattern.compile(\"^todo\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":" boolean isDeadline \u003d Pattern.compile(\"^deadline\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" // boolean isEvent \u003d Pattern.compile(\"^event\").matcher(fullCommand).find();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" return isTodo ? 0 : isDeadline ? 1 : 2;","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" * A method that gets the index of a task that user specified in command, if any","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand string that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"nikele2001"},"content":" * @return index that user specified","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"nikele2001"},"content":" public static int getIndex(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"nikele2001"},"content":" // how to check if string is parseable without parsing it?","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"nikele2001"},"content":" return Integer.parseInt(fullCommand.split(\" \")[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"nikele2001"},"content":" * A method that returns the keyword that user is searching for when user uses the find command","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand string that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"nikele2001"},"content":" * @return string that user wants to search with regards to tasks\u0027 descriptions","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"nikele2001"},"content":" public static String getKeyString(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"nikele2001"},"content":" return fullCommand.split(\" \", 2)[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"nikele2001"},"content":" * A method to parse command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand string that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"nikele2001"},"content":" * @return A Command object representing the command user gives","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException when user input does not represent any particular","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"nikele2001"},"content":" * command","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"nikele2001"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"nikele2001"},"content":" int taskType \u003d Parser.getCommand(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"nikele2001"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"nikele2001"},"content":" case 0: {","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"nikele2001"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"nikele2001"},"content":" case 1: {","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(\"mark \").matcher(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"nikele2001"},"content":" // return error","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"nikele2001"},"content":" int index \u003d Parser.getIndex(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"nikele2001"},"content":" return new MarkCommand(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"nikele2001"},"content":" case 2: {","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(\"unmark \").matcher(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"nikele2001"},"content":" // return error","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"nikele2001"},"content":" int index \u003d Parser.getIndex(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"nikele2001"},"content":" return new UnmarkCommand(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"nikele2001"},"content":" case 3: {","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"nikele2001"},"content":" switch (Parser.getTaskType(fullCommand)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"nikele2001"},"content":" case 0: {","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"nikele2001"},"content":" return new AddCommand().new TodoCommand(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"nikele2001"},"content":" case 1: {","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"nikele2001"},"content":" return new AddCommand().new DeadlineCommand(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"nikele2001"},"content":" case 2: {","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"nikele2001"},"content":" return new AddCommand().new EventCommand(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"nikele2001"},"content":" case 4: {","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(\"delete \").matcher(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"nikele2001"},"content":" // return error","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"nikele2001"},"content":" int index \u003d Parser.getIndex(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"nikele2001"},"content":" return new DeleteCommand(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"nikele2001"},"content":" case 5: {","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(\"find \").matcher(fullCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"nikele2001"},"content":" // return error","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"nikele2001"},"content":" String keyString \u003d Parser.getKeyString(fullCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"nikele2001"},"content":" return new FindCommand(keyString);","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"nikele2001"},"content":" case 6: {","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"nikele2001"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":149,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"nikele2001"},"content":" default: {","lastModifiedDate":"2023-08-26"},{"lineNumber":151,"author":{"gitId":"nikele2001"},"content":" throw new UnknownTaskTypeException();","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":156}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"import duke.exception.UnknownTaskTypeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" * A class that deals with loading tasks from the file and saving tasks in the file","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" private String filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * A constructor method for the Storage object","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * @param filePath string representation of file path to database","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" * A method that returns a Task ArrayList based on stored data. ArrayList ","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" * generated is then used to initialise TaskList object","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" * @return ArrayList\u003cTask\u003e based on stored data","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" public ArrayList\u003cTask\u003e load() throws Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" Scanner dataSc \u003d new Scanner(f);","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" while (dataSc.hasNextLine()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" String[] task \u003d dataSc.nextLine().trim().split(\"\\\\|\");","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" task[0] \u003d task[0].trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" int taskType \u003d task[0].equals(\"T\") ? 0 : task[0].equals(\"D\") ? 1 : 2;","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" case 0: {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" String dataString \u003d \"todo \" + task[2].trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" arr.add(Todo.of(dataString));","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" case 1: {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" String dataString \u003d \"deadline \" + task[2].trim() + \" /by \" + task[3].trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" arr.add(Deadline.of(dataString));","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" case 2: {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" String dataString \u003d \"event \" + task[2].trim() + \" /from \" + task[3].trim() + \" /to \"","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" + task[4].trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" arr.add(Event.of(dataString));","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" default: {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":" throw new UnknownTaskTypeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" if (task[1].trim().equals(\"1\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":" arr.get(arr.size() - 1).markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"nikele2001"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"nikele2001"},"content":" arr.get(arr.size() - 1).markAsNotDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"nikele2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"nikele2001"},"content":" System.out.println(\"file is corrupted! dieee\");","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"nikele2001"},"content":" dataSc.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"nikele2001"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"nikele2001"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"nikele2001"},"content":" return arr;","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"nikele2001"},"content":" * A method to update stored data based on latest user input on the program","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"nikele2001"},"content":" * @param arr active TaskList object of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"nikele2001"},"content":" public void update(TaskList arr) {","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"nikele2001"},"content":" FileOutputStream object \u003d new FileOutputStream(this.filePath, false);","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"nikele2001"},"content":" for (char c : arr.storage().toCharArray()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"nikele2001"},"content":" object.write(c);","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"nikele2001"},"content":" object.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"nikele2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"nikele2001"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":102}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.exception.IndexOutOfBoundsException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" * A class that represents a list that stores tasks inputted by user","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"public class TaskList {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" protected ArrayList\u003cTask\u003e taskArr;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" * A constructor for the TaskList object","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" public TaskList() {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" this.taskArr \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * A constructor for the TaskList object","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * @param arr ArrayList of Task objects that TaskList object generated contains","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" public TaskList(ArrayList\u003cTask\u003e arr) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" this.taskArr \u003d arr;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" * A method that returns task object at given index of TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" * @param index index of Task object","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" * @return specified Task object","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException when index is out of range","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" public Task getTask(int index) throws DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" return this.taskArr.get(index);","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" throw new IndexOutOfBoundsException();","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" * A method that returns length of TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" * @return length of TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" public int length() {","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" return this.taskArr.size();","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" * A method that marks specified Task object as done","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" * @params index index of Task object","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException when index is out of range","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" public void markTaskAsDone(int index) throws DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" this.getTask(index).markAsDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" * A method that unmarks specified Task object as done","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" * @param index index of Task object","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException when index is out of range","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" public void markTaskAsNotDone(int index) throws DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" this.getTask(index).markAsNotDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of a Task object","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"nikele2001"},"content":" * at specified index","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"nikele2001"},"content":" * @param index task at given index of TaskList object","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the Task object","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"nikele2001"},"content":" public String taskToString(int index) {","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"nikele2001"},"content":" return this.taskArr.get(index).toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"nikele2001"},"content":" * A method that returns a string representation of the number of","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"nikele2001"},"content":" * tasks in a TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the number of tasks in the TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"nikele2001"},"content":" public String numTasksToString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"nikele2001"},"content":" if (this.length() \u003d\u003d 1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"nikele2001"},"content":" return \" task\";","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"nikele2001"},"content":" return \" tasks\";","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":93,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"nikele2001"},"content":" * A method to to add a task to the TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"nikele2001"},"content":" * @param task task object to be added","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"nikele2001"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-22"},{"lineNumber":98,"author":{"gitId":"nikele2001"},"content":" this.taskArr.add(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":100,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":101,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"nikele2001"},"content":" * A method to add a task to the TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"nikele2001"},"content":" * @param index index of Task object that user wants to delete","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"nikele2001"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"nikele2001"},"content":" this.taskArr.remove(index);","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":108,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":109,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"nikele2001"},"content":" * A method to generate a string representing the TaskList in a format that can","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"nikele2001"},"content":" * be stored in the .txt file","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"nikele2001"},"content":" * String is passed to the Storage object to be processed","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"nikele2001"},"content":" * @return string representation of TaskList to be stored","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"nikele2001"},"content":" public String storage() {","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"nikele2001"},"content":" String out \u003d \"\";","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"nikele2001"},"content":" for (Task task : this.taskArr) {","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"nikele2001"},"content":" out +\u003d task.toBeStored();","lastModifiedDate":"2023-08-25"},{"lineNumber":119,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":120,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-08-25"},{"lineNumber":121,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":122,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"nikele2001"},"content":" * A method that takes in a string and returns tasklist containing","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"nikele2001"},"content":" * all tasks such that inputted string is a substring of the tasks\u0027 description","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"nikele2001"},"content":" * @param keyString string that user wants to compare tasks\u0027 descriptions against","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"nikele2001"},"content":" * @return TaskList object containing all desired tasks with descriptions being","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"nikele2001"},"content":" * superstring of inputted string","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"nikele2001"},"content":" public TaskList filter(String keyString) {","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"nikele2001"},"content":" ArrayList\u003cTask\u003e out \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"nikele2001"},"content":" for (Task task : this.taskArr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"nikele2001"},"content":" if (task.isKey(keyString)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"nikele2001"},"content":" out.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"nikele2001"},"content":" return new TaskList(out);","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"nikele2001":139}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" * A class that handles all the user interactions of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"public class Ui {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" private String lnspace \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" private final Scanner sc;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" * Constructor for Ui objects","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" public Ui() {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" * A method that prints greeting when program starts","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" * @return string representing greeting","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" public String greeting() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" String greeting \u003d lnspace + \"\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" + \"Hello! I\u0027m Lorem\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" + lnspace + \"\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" System.out.println(greeting);","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" return greeting;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" * A method that prints ending when program terminates","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" * @return string representing ending","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" public String ending() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" String ending \u003d \"Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" + lnspace;","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" System.out.println(ending);","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" this.sc.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" return ending;","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" * A method that prints a straight line","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" * @return string representing straight line","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" public String printLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" System.out.println(lnspace);","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" return lnspace;","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" * A method that prints error message when existing data file is not found","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" * @return string representing error message","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" public String showLoadingError() {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" String out \u003d \"Existing data not found. Creating new data file tasks.txt found in ./data/ folder.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" System.out.println(out);","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" * A method that prints the error message specified","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":" * @param message error message that user wants to print","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" * @return string that user inputted as argument","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":" public String showError(String message) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":" return message;","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"nikele2001"},"content":" * A method that reads the next command that user inputted","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"nikele2001"},"content":" * @return string that user inputted","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"nikele2001"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"nikele2001"},"content":" return this.sc.nextLine().trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"nikele2001"},"content":" * A method that prints message during task addition","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"nikele2001"},"content":" * @param arr TaskList object that task object is added to","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"nikele2001"},"content":" * @return string representing task addition","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"nikele2001"},"content":" public String addTask(TaskList arr) {","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"nikele2001"},"content":" String out \u003d \"Got it. I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"nikele2001"},"content":" out +\u003d arr.taskToString(arr.length() - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"nikele2001"},"content":" out +\u003d \"\\nNow you have \" + (arr.length()) + arr.numTasksToString() + \" in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"nikele2001"},"content":" System.out.println(out);","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"nikele2001"},"content":" * A method that prints message during task marking","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"nikele2001"},"content":" * @param index index of Task object that user marked in specified TaskList object","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"nikele2001"},"content":" * @param arr TaskList object that contains Task object that user marked","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"nikele2001"},"content":" * @return string representing task marking","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"nikele2001"},"content":" public String markTask(int index, TaskList arr) {","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"nikele2001"},"content":" String out \u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"nikele2001"},"content":" out +\u003d arr.taskToString(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"nikele2001"},"content":" System.out.println(out);","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"nikele2001"},"content":" * A method that prints message during task unmarking","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"nikele2001"},"content":" * @param index index of Task object that user unmarked in specified TaskList object","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"nikele2001"},"content":" * @param arr TaskList object that contains Task object that user unmarked","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"nikele2001"},"content":" * @return string representing task unmarking","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"nikele2001"},"content":" public String unmarkTask(int index, TaskList arr) {","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"nikele2001"},"content":" String out \u003d \"Nice! I\u0027ve marked this task as not done yet:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"nikele2001"},"content":" out +\u003d arr.taskToString(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"nikele2001"},"content":" System.out.println(out);","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"nikele2001"},"content":" * A method that prints message when user wants a list of tasks in TaskList object","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"nikele2001"},"content":" * @param arr TaskList object that contains existing Task objects","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"nikele2001"},"content":" * @return string that is printed representing list of tasks in specified","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"nikele2001"},"content":" * TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"nikele2001"},"content":" public String list(TaskList arr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"nikele2001"},"content":" String out \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"nikele2001"},"content":" for (int i \u003d 0; i \u003c arr.length(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"nikele2001"},"content":" out \u003d out + (i + 1) + \". \" + arr.taskToString(i) + \"\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"nikele2001"},"content":" System.out.println(out);","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"nikele2001"},"content":" * A method that finds all existing tasks that contains specified substring and lists it ","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"nikele2001"},"content":" * @param arr taskList object that contains existing Task objects","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"nikele2001"},"content":" * @param keyString string that user wants to search for","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"nikele2001"},"content":" * @return string that lists all tasks with descriptions containing specified substring","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"nikele2001"},"content":" public String find(TaskList arr, String keyString) {","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"nikele2001"},"content":" String out \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"nikele2001"},"content":" TaskList outTaskList \u003d arr.filter(keyString);","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"nikele2001"},"content":" if (outTaskList.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"nikele2001"},"content":" out \u003d \"There are no matching tasks in the list.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"nikele2001"},"content":" System.out.println(out);","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"nikele2001"},"content":" for (int i \u003d 0; i \u003c outTaskList.length(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"nikele2001"},"content":" out \u003d out + (i + 1) + \". \" + outTaskList.taskToString(i) + \"\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":153,"author":{"gitId":"nikele2001"},"content":" System.out.println(out);","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"nikele2001"},"content":" * A method that prints message when user deletes a task in TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"nikele2001"},"content":" * @param arr TaskList where deleted Task is contained in","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"nikele2001"},"content":" * @param index index of Task object that was deleted","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"nikele2001"},"content":" * @return string representing task deletion","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"nikele2001"},"content":" public String deleteTask(TaskList arr, int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"nikele2001"},"content":" String out \u003d \"Noted. I\u0027ve removed this task:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"nikele2001"},"content":" out +\u003d arr.taskToString(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"nikele2001"},"content":" out +\u003d \"\\nNow you have \" + (arr.length() - 1) + arr.numTasksToString() + \" in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"nikele2001"},"content":" System.out.println(out);","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":170,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":170}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" * A class that represents all task addition commands that user can give","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" private Task task;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" public AddCommand() {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * A method that executes the command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * @params tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" * @params ui UI interface that is used to print messages to the terminak","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" * @params storage Storage object that houses database of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" tasks.addTask(this.task);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" String out \u003d ui.addTask(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to add a Todo task","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" public class TodoCommand extends AddCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" * Constructor for TodoCommand object","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand command that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException when command is unable to be processed properly","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" public TodoCommand(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" super.task \u003d Todo.of(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to add a Deadline task","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" public class DeadlineCommand extends AddCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" * Constructor for DeadlineCommand object","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand command that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException when command is unable to be processed properly","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" public DeadlineCommand(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":" super.task \u003d Deadline.of(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to add an Event task","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"nikele2001"},"content":" public class EventCommand extends AddCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"nikele2001"},"content":" * Constructor for EventCommand object","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"nikele2001"},"content":" * @param fullCommand command that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException when command is unable to be processed properly","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"nikele2001"},"content":" public EventCommand(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"nikele2001"},"content":" super.task \u003d Event.of(fullCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"nikele2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"nikele2001"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":89}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * An abstract class that represents all commands that user can possibly make","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" * All commands user can make are subtypes of this class","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" * An abstract method that executes the command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" * @params tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" * @params ui UI interface that is used to print messages to the terminak","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" * @params storage Storage object that houses database of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * A method that returns true when command is to exit program","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" * @return boolean based on whether user wants to exit program","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" return this.isExit;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":31}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to delete a task","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" private int index;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" * A method that executes the command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" * @params tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" * @params ui UI interface that is used to print messages to the terminal","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" * @params storage Storage object that houses database of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" String out \u003d ui.deleteTask(tasks, index);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" tasks.delete(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":31}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to exit the program","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public ExitCommand() {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" * A method that executes the command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" * @params tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" * @params ui UI interface that is used to print messages to the terminal","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * @params storage Storage object that houses database of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" return \"Bye. Hope to see you again soon!\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":28}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to find tasks based on specified keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" private String keyString;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" public FindCommand(String keyString) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" this.keyString \u003d keyString;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" * A method that executes the command that user gave","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" * @param tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" * @param ui UI interface that is used to print messages to the terminal","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" * @param storage Storage object that houses database of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" @Override ","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" return ui.find(tasks, this.keyString);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"nikele2001":26}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to list all existing tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" * A method that executes the command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" * @params tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" * @params ui UI interface that is used to print messages to the terminal","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" * @params storage Storage object that houses database of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException exception thrown if database cannot be interpreted correctly","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" return ui.list(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":23}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to mark a task","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" private int index;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" * A method that executes the command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" * @params tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" * @params ui UI interface that is used to print messages to the terminak","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" * @params storage Storage object that houses database of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException exception thrown if marking task is not able to be done, possibly due to erroneous indexing","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" tasks.markTaskAsDone(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" String out \u003d ui.markTask(index, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":36}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * A class that represents the user command to unmark a task","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" private int index;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" * A method that executes the command that user gave","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" * @params tasks TaskList containing all existing Task objects","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" * @params ui UI interface that is used to print messages to the terminal","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" * @params storage Storage object that houses database of the program","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * @throws DukeException exception thrown if unmarking task is not able to be done, ","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * possibly due to erroneous indexing","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" tasks.markTaskAsNotDone(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" String out \u003d ui.unmarkTask(index, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" return out;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"nikele2001":37}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown by the program (other than FileNotFoundException)","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * @param message Error message to be printed onto the console","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":14}},{"path":"src/main/java/duke/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown when user wants to add tasks but did not input description","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"public class EmptyDescriptionException extends MissingInformationException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" public EmptyDescriptionException(String taskType) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" super(\"☹ OOPS!!! The description of a \" + taskType + \" cannot be empty.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":13}},{"path":"src/main/java/duke/exception/IndexOutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown when user is trying to access tasks in the program, ","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" * but provided index is out of bounds","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public class IndexOutOfBoundsException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public IndexOutOfBoundsException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(\"☹ OOPS!!! Index provided is invalid.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":14}},{"path":"src/main/java/duke/exception/InvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown by the program when ","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" * dates provided when adding tasks is of the wrong format","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public class InvalidDateException extends DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public InvalidDateException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(\"☹ OOPS!!! Date format given is invalid. Please input date in the following format: yyyy-mm-dd\");","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"nikele2001":14}},{"path":"src/main/java/duke/exception/MissingDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown by the program when user wants to add","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" * a Deadline object but did not provide a date to denote the deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public class MissingDeadlineException extends MissingInformationException {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public MissingDeadlineException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(\"☹ OOPS!!! Deadline is required for task to be created. Denote deadline with a /by.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":14}},{"path":"src/main/java/duke/exception/MissingEndTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown by the program when user wants to add an Event","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" * object but did not input an end date","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public class MissingEndTimeException extends MissingInformationException {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public MissingEndTimeException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(\"☹ OOPS!!! end time is required for task to be created. Denote end time with a /to.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":14}},{"path":"src/main/java/duke/exception/MissingInformationException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown by the program when information is expected","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" * in accordance to user commands, but not provided","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public abstract class MissingInformationException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public MissingInformationException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":15}},{"path":"src/main/java/duke/exception/MissingStartTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown by the program when user wants to add an Event","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" * object but did not input a start date","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public class MissingStartTimeException extends MissingInformationException {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public MissingStartTimeException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(\"☹ OOPS!!! Start time is required for task to be created. Denote start time with a /from.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":14}},{"path":"src/main/java/duke/exception/UnknownTaskTypeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":" * A class that represents all exceptions thrown by the program when user inputs a command that","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":" * is not expected","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public class UnknownTaskTypeException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" * Constructor for exception","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" public UnknownTaskTypeException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":14}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"import duke.exception.MissingDeadlineException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"import duke.exception.MissingInformationException;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" * A class that represents the Deadline class. It is ","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" * a subtype of the abstract Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" protected LocalDate deadline;","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" * A constructor of the Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" * @param description Description of deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" * @param deadline deadline of Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" public Deadline(String description, LocalDate deadline) {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" * Factory method of Deadline class.","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" * String input is guaranteed to start with \"deadline\"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" * @param input user input from terminal.","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" * @return a Deadline object given the input string.","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" * @throws MissingInformationException due to possibly an empty","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" * description of the Deadline task or a missing /by deadline for","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" * the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" public static Deadline of(String input) throws MissingInformationException {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(\"deadline \").matcher(input);","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" matcher.find();","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" String info \u003d input.substring(matcher.end()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" matcher \u003d Pattern.compile(\" /by \").matcher(info);","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" throw new MissingDeadlineException();","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" String description \u003d info.substring(0, matcher.start()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" String deadline \u003d info.substring(matcher.end()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" LocalDate deadlineDate \u003d LocalDate.parse(deadline);","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" return new Deadline(description, deadlineDate);","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of a Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" + \")\";","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of a Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the Deadline object to be stored in the database","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":" public String toBeStored() {","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":" String marked \u003d this.isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":" return \"D | \" + marked + \" | \" + this.getDescription() + \" | \" + this.deadline + \"\\n\";","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"nikele2001":72}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"import duke.exception.MissingEndTimeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"import duke.exception.MissingInformationException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"import duke.exception.MissingStartTimeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" * A class that represents the Event class. It is ","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" * a subtype of the abstract Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" protected LocalDate start;","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" protected LocalDate end;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * A constructor of the Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" * @param description Description of Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" * @param start start date of Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" * @param end end date of Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" public Event(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" * Factory method of Event class.","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" * String input is guaranteed to start with \"event\"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" * @param input user input from terminal.","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" * @return a Event object given the input string.","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" * @throws MissingInformationException due to possibly an empty description of the ","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" * Event task or a missing /from start time or a missing /to end time for the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" public static Event of(String input) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(\"event \").matcher(input);","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" matcher.find();","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" String info \u003d input.substring(matcher.end()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" matcher \u003d Pattern.compile(\" /from \").matcher(info);","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" throw new MissingStartTimeException();","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" String description \u003d info.substring(0, matcher.start()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" String tmp \u003d info.substring(matcher.end()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" matcher \u003d Pattern.compile(\" /to \").matcher(tmp);","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" throw new MissingEndTimeException();","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" String start \u003d tmp.substring(0, matcher.start()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" String end \u003d tmp.substring(matcher.end()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" LocalDate startDate \u003d LocalDate.parse(start);","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" LocalDate endDate \u003d LocalDate.parse(end);","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" return new Event(description, startDate, endDate);","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of an Event object.","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the Event object.","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.start.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"nikele2001"},"content":" + \" to: \" + this.end.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"nikele2001"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of a Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the Deadline object to be stored in the database","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"nikele2001"},"content":" public String toBeStored() {","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"nikele2001"},"content":" String marked \u003d this.isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"nikele2001"},"content":" return \"E | \" + marked + \" | \" + this.getDescription() + \" | \" + this.start + \" | \" + this.end + \"\\n\";","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"nikele2001":85}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":" * An abstract class that is the supertype of all ","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":" * tasks that program accepts (Todo, Deadline, Event).","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" protected boolean isDone \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" * Constructor for the Task object","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" * @param description Description of Task object","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" * A method to return the description of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" * @return description of the task entered by the user.","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" return this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" * A method that retrieves the marked status of a task.","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" * @return the status of the task based on whether it is marked or not.","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" return this.isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" * A method that marks task as done.","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" * A method that marks task as not done","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of a task","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"nikele2001"},"content":" * A method that returns whether the Task object has a description such that","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"nikele2001"},"content":" * inputted keyString is a substring of the description","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"nikele2001"},"content":" * @param keyString string to check against task description","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"nikele2001"},"content":" public boolean isKey(String keyString) {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(keyString).matcher(this.getDescription());","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"nikele2001"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"nikele2001"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"nikele2001"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"nikele2001"},"content":" * An abstract method that returns string representation of Task object to be stored","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"nikele2001"},"content":" * @return String to be stored in the database","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"nikele2001"},"content":" public abstract String toBeStored();","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"nikele2001":84}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"import duke.exception.MissingInformationException;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" * A class that represents the Event class. It is ","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" * a subtype of the abstract Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" * Constructor of the Todo object","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" * @param description description of Todo object","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" * A factory method of Todo class.","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" * String input is guaranteed to start with \"todo\"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" * @param input user input from terminal.","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" * @return a Todo object given the input string.","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" * @throws MissingInformationException due to possibly an empty","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" * description of the todo task.","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" public static Todo of(String input) throws MissingInformationException {","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":" input \u003d input.trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nikele2001"},"content":" if (input.length() \u003c\u003d 0) {","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"nikele2001"},"content":" throw new EmptyDescriptionException(\"todo\");","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nikele2001"},"content":" Matcher matcher \u003d Pattern.compile(\"todo \").matcher(input);","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nikele2001"},"content":" matcher.find();","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"nikele2001"},"content":" String description \u003d input.substring(matcher.end()).trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nikele2001"},"content":" return new Todo(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"nikele2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nikele2001"},"content":" throw new EmptyDescriptionException(\"todo\");","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of a Todo object.","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the Todo object.","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"nikele2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"nikele2001"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"nikele2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"nikele2001"},"content":" * A method that returns the string representation of a Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"nikele2001"},"content":" * @return string representation of the Deadline object to be stored in the database","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"nikele2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"nikele2001"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"nikele2001"},"content":" public String toBeStored() {","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"nikele2001"},"content":" String marked \u003d this.isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"nikele2001"},"content":" return \"T | \" + marked + \" | \" + this.getDescription() + \"\\n\";","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"nikele2001":65}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"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":"nikele2001"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"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":12,"author":{"gitId":"nikele2001"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nikele2001":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"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-04"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"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":12,"author":{"gitId":"nikele2001"},"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":13,"author":{"gitId":"nikele2001"},"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":14,"author":{"gitId":"nikele2001"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nikele2001":19}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke; //same package as the class being tested","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" public void emptyTaskListLengthTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" TaskList a \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" TaskList b \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" assertEquals(a.length(), b.length());","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" public void emptyTaskListTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":" Task task \u003d Todo.of(\"todo read book\");","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" TaskList a \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" TaskList b \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":" a.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"nikele2001"},"content":" b.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"nikele2001"},"content":" assertEquals(a.getTask(0), b.getTask(0));","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"nikele2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"nikele2001"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"nikele2001":33}},{"path":"src/test/java/duke/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"package duke; //same package as the class being tested","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"nikele2001"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"nikele2001"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"nikele2001"},"content":"public class UiTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"nikele2001"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"nikele2001"},"content":" public void greetingTest() {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"nikele2001"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"nikele2001"},"content":" String lnspace \u003d ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"nikele2001"},"content":" assertEquals(lnspace + \"\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"nikele2001"},"content":" + \"Hello! I\u0027m Lorem\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"nikele2001"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"nikele2001"},"content":" + lnspace + \"\\n\", ui.greeting());","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"nikele2001"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"nikele2001"},"content":" public void endingTest() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"nikele2001"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"nikele2001"},"content":" String lnspace \u003d ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nikele2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"nikele2001"},"content":" assertEquals(\"Bye. Hope to see you again soon!\\n\" + lnspace, ui.ending());","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"nikele2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"nikele2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"nikele2001":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nikele2001"},"content":"todo read book","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nikele2001":1}}] diff --git a/nikele2001_ip_master/commits.json b/nikele2001_ip_master/commits.json index 80746e3a..bb3efd02 100644 --- a/nikele2001_ip_master/commits.json +++ b/nikele2001_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"nikele2001":[{"date":"2023-08-22","commitResults":[{"hash":"e6146b9d29ca7be68b90ee98aa4a7539c620bd83","isMergeCommit":false,"messageTitle":"completed level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"3ddce8728dd2d61e79567dfd07898c2c84e7005c","isMergeCommit":false,"messageTitle":"completed level 1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":1}}},{"hash":"048f0e7d73fdcb7011feb97ea7205e806af67c3e","isMergeCommit":false,"messageTitle":"amended level 1 submission","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":11}}},{"hash":"4821b45b5a1a2b70fa011f34ce343983cc7edf7a","isMergeCommit":false,"messageTitle":"completed level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":7}}},{"hash":"67cb95f2de3d80b52a379594741822f1aedf4423","isMergeCommit":false,"messageTitle":"completed level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":10}}},{"hash":"54f2cadc2ec5c7cbf673fe1c06b3d90e12eac23a","isMergeCommit":false,"messageTitle":"completed level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":132,"deletions":12}}}]},{"date":"2023-08-23","commitResults":[{"hash":"82300b6e8fb64d1183f2cd22f4b8f1bfef547f72","isMergeCommit":false,"messageTitle":"completed level A-TextUiTesting, Level 5 and Level 6","messageBody":"","tags":["Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":243,"deletions":128}}}]},{"date":"2023-08-24","commitResults":[{"hash":"28efae7f5204c3b26161919f4b879098b69e9237","isMergeCommit":false,"messageTitle":"completed A-Enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":64}}},{"hash":"34b6e1ea4392cca904918ab62e58a8eb86cdf753","isMergeCommit":false,"messageTitle":"added some documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":13}}},{"hash":"02ad00296f7afb5cf3be21bcf75f831bc59cfaee","isMergeCommit":false,"messageTitle":"added more documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"40676e0f1dfb6fea6ab19bddd8d0eb3f699dc087","isMergeCommit":false,"messageTitle":"fixed some bugs with regards to missing matcher.find() statements","messageBody":"","tags":["Level-6","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"d3300e412c95fce0db20d70a390034fa9d12b686","isMergeCommit":false,"messageTitle":"implemented Level-7 on level 7 branch","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":102,"deletions":16}}},{"hash":"25d442054a1ffb7f086e08611ef1f7b9ec0635fb","isMergeCommit":false,"messageTitle":"completed Level-8 on level 8 branch","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":35,"deletions":14}}}]},{"date":"2023-08-26","commitResults":[{"hash":"255c9fc15865135ca78ee38cc4795246806a115e","isMergeCommit":false,"messageTitle":"completed A-MoreOOP","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":6},"java":{"insertions":512,"deletions":227}}}]},{"date":"2023-08-27","commitResults":[{"hash":"43dc32f302146dcc27d61d3d9861a6e0c34260b3","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-MoreOOP\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"582daba0132aea1721f2d440fe39b26f11a1ead9","isMergeCommit":false,"messageTitle":"completed A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"86a65baa60d5212885953a64bcbb39fbc87fde87","isMergeCommit":false,"messageTitle":"completed A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":6}}},{"hash":"1b9fb7290cbd9fb5bd15ee1f346266aed6cfff6d","isMergeCommit":false,"messageTitle":"added more tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":5}}},{"hash":"33c0e849e1febfbf630d8e2ef739aea62f31ba30","isMergeCommit":true,"messageTitle":"Merge pull request #1 from nikele2001/A-JUnit","messageBody":"added more tests","fileTypesAndContributionMap":{}},{"hash":"3f365d5b6adfe3e7285918429860911680b338b2","isMergeCommit":false,"messageTitle":"completed A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e0a0ef1a8140249c9711108289ebb6446c0e4342","isMergeCommit":false,"messageTitle":"completed A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":274,"deletions":13}}},{"hash":"bb59be95efd0d457d9b3f0b3520c1194ec271aa3","isMergeCommit":false,"messageTitle":"complete A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":11}}},{"hash":"41467645aaf30915d388d342357b204c410f46fd","isMergeCommit":false,"messageTitle":"complete Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":2}}},{"hash":"b8b26b32572517f09f77cff0231a00e5cd408ccf","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"94173d5396ae4adb14547093e35d58a8bdc24516","isMergeCommit":false,"messageTitle":"merge A-JavaDoc and Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":20}}},{"hash":"72cc2d7df23c83813f2490ae0b7037a5d00a4f4b","isMergeCommit":false,"messageTitle":"fix bug regarding deletion of last task in tasklist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":3}}},{"hash":"cb0fa2b1620e69919146c30880ee5ae9061053e6","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"262fe18861209e686be50f4f0243b8860cd00918","isMergeCommit":false,"messageTitle":"fix a bug that does not process find commands correctly in parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}}]},{"date":"2023-09-01","commitResults":[{"hash":"3ae88c97041c4db45d8b4a1180e02a09d4aa6f49","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":25,"deletions":20}}}]},{"date":"2023-09-02","commitResults":[{"hash":"97c5416c905b49dab78f228b7836ff669d2f01e1","isMergeCommit":false,"messageTitle":"complete A-CheckStyle","messageBody":"","tags":["Level-9","A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":376,"deletions":296}}}]},{"date":"2023-09-04","commitResults":[{"hash":"99d042e0159c2d46e539d938d409da1ce74271d4","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"nikele2001":{"java":1395,"md":23,"fxml":0,"sh":0,"bat":0,"gradle":7,"txt":9}},"authorContributionVariance":{"nikele2001":56981.133},"authorDisplayNameMap":{"nikele2001":"CS2103T-F12-1 NICH.. JIE"}} +{"authorDailyContributionsMap":{"nikele2001":[{"date":"2023-08-22","commitResults":[{"hash":"e6146b9d29ca7be68b90ee98aa4a7539c620bd83","isMergeCommit":false,"messageTitle":"completed level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"3ddce8728dd2d61e79567dfd07898c2c84e7005c","isMergeCommit":false,"messageTitle":"completed level 1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":1}}},{"hash":"048f0e7d73fdcb7011feb97ea7205e806af67c3e","isMergeCommit":false,"messageTitle":"amended level 1 submission","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":11}}},{"hash":"4821b45b5a1a2b70fa011f34ce343983cc7edf7a","isMergeCommit":false,"messageTitle":"completed level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":7}}},{"hash":"67cb95f2de3d80b52a379594741822f1aedf4423","isMergeCommit":false,"messageTitle":"completed level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":10}}},{"hash":"54f2cadc2ec5c7cbf673fe1c06b3d90e12eac23a","isMergeCommit":false,"messageTitle":"completed level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":132,"deletions":12}}}]},{"date":"2023-08-23","commitResults":[{"hash":"82300b6e8fb64d1183f2cd22f4b8f1bfef547f72","isMergeCommit":false,"messageTitle":"completed level A-TextUiTesting, Level 5 and Level 6","messageBody":"","tags":["Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":243,"deletions":128}}}]},{"date":"2023-08-24","commitResults":[{"hash":"28efae7f5204c3b26161919f4b879098b69e9237","isMergeCommit":false,"messageTitle":"completed A-Enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":64}}},{"hash":"34b6e1ea4392cca904918ab62e58a8eb86cdf753","isMergeCommit":false,"messageTitle":"added some documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":13}}},{"hash":"02ad00296f7afb5cf3be21bcf75f831bc59cfaee","isMergeCommit":false,"messageTitle":"added more documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"40676e0f1dfb6fea6ab19bddd8d0eb3f699dc087","isMergeCommit":false,"messageTitle":"fixed some bugs with regards to missing matcher.find() statements","messageBody":"","tags":["Level-6","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"d3300e412c95fce0db20d70a390034fa9d12b686","isMergeCommit":false,"messageTitle":"implemented Level-7 on level 7 branch","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":102,"deletions":16}}},{"hash":"25d442054a1ffb7f086e08611ef1f7b9ec0635fb","isMergeCommit":false,"messageTitle":"completed Level-8 on level 8 branch","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":35,"deletions":14}}}]},{"date":"2023-08-26","commitResults":[{"hash":"255c9fc15865135ca78ee38cc4795246806a115e","isMergeCommit":false,"messageTitle":"completed A-MoreOOP","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":6},"java":{"insertions":512,"deletions":227}}}]},{"date":"2023-08-27","commitResults":[{"hash":"43dc32f302146dcc27d61d3d9861a6e0c34260b3","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-MoreOOP\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"582daba0132aea1721f2d440fe39b26f11a1ead9","isMergeCommit":false,"messageTitle":"completed A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"86a65baa60d5212885953a64bcbb39fbc87fde87","isMergeCommit":false,"messageTitle":"completed A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":6}}},{"hash":"1b9fb7290cbd9fb5bd15ee1f346266aed6cfff6d","isMergeCommit":false,"messageTitle":"added more tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":5}}},{"hash":"33c0e849e1febfbf630d8e2ef739aea62f31ba30","isMergeCommit":true,"messageTitle":"Merge pull request #1 from nikele2001/A-JUnit","messageBody":"added more tests","fileTypesAndContributionMap":{}},{"hash":"3f365d5b6adfe3e7285918429860911680b338b2","isMergeCommit":false,"messageTitle":"completed A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e0a0ef1a8140249c9711108289ebb6446c0e4342","isMergeCommit":false,"messageTitle":"completed A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":274,"deletions":13}}},{"hash":"bb59be95efd0d457d9b3f0b3520c1194ec271aa3","isMergeCommit":false,"messageTitle":"complete A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":11}}},{"hash":"41467645aaf30915d388d342357b204c410f46fd","isMergeCommit":false,"messageTitle":"complete Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":2}}},{"hash":"b8b26b32572517f09f77cff0231a00e5cd408ccf","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"94173d5396ae4adb14547093e35d58a8bdc24516","isMergeCommit":false,"messageTitle":"merge A-JavaDoc and Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":20}}},{"hash":"72cc2d7df23c83813f2490ae0b7037a5d00a4f4b","isMergeCommit":false,"messageTitle":"fix bug regarding deletion of last task in tasklist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":3}}},{"hash":"cb0fa2b1620e69919146c30880ee5ae9061053e6","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"262fe18861209e686be50f4f0243b8860cd00918","isMergeCommit":false,"messageTitle":"fix a bug that does not process find commands correctly in parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}}]},{"date":"2023-09-01","commitResults":[{"hash":"3ae88c97041c4db45d8b4a1180e02a09d4aa6f49","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":25,"deletions":20}}}]},{"date":"2023-09-02","commitResults":[{"hash":"97c5416c905b49dab78f228b7836ff669d2f01e1","isMergeCommit":false,"messageTitle":"complete A-CheckStyle","messageBody":"","tags":["Level-9","A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":376,"deletions":296}}}]},{"date":"2023-09-04","commitResults":[{"hash":"99d042e0159c2d46e539d938d409da1ce74271d4","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":0}}},{"hash":"a57d393be62296aaadcaf8d6864b518fceba9355","isMergeCommit":false,"messageTitle":"complete Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":244,"deletions":31}}},{"hash":"fd7ceb0b4635117049d2d89c4a87506e89d14331","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/nikele2001/ip","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"nikele2001":{"java":1608,"md":23,"fxml":35,"sh":0,"bat":0,"gradle":22,"txt":9}},"authorContributionVariance":{"nikele2001":56227.223},"authorDisplayNameMap":{"nikele2001":"CS2103T-F12-1 NICH.. JIE"}} diff --git a/nixonwidjaja_ip_master/authorship.json b/nixonwidjaja_ip_master/authorship.json index b00ddf8c..a9fb8449 100644 --- a/nixonwidjaja_ip_master/authorship.json +++ b/nixonwidjaja_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"# AdaBot","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"\u003e \"Adapt. Improvise. Overcome.\" - Tom Cruise","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"AdaBot frees your mind of having to remember things you need to do. It\u0027s,","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"* text-based","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"* easy to learn","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"* ~~FAST~~ SUPER FAST to use","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"All you need to do is,","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"1. Add your tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":"2. Let it manage your tasks for you 😉","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"And it is **FREE!**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":"Features:","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":"- [x] Managing tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":"- [x] Managing deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":"- [ ] Reminders (coming soon)","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":"##","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":"If you Java programmer, you can use it to practice Java too. Here\u0027s the ```main``` method in ```Duke.java```:","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":"```java","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" new Duke().run();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"nixonwidjaja":22,"-":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 \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":"nixonwidjaja"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"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":{"nixonwidjaja":1,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" * The backbone of the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"public class Duke {","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" public Duke() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":" * Runs the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" tasks \u003d storage.read();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":" ui.printError(e.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":" Scanner input \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":" ui.hello();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":" String response \u003d \"\";","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" while (input.hasNextLine()) {","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":" response \u003d input.nextLine();","lastModifiedDate":"2023-08-19"},{"lineNumber":47,"author":{"gitId":"nixonwidjaja"},"content":" List\u003cString\u003e queryList \u003d Parser.convertToList(response);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.get(0).equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nixonwidjaja"},"content":" break;","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"nixonwidjaja"},"content":" } ","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"nixonwidjaja"},"content":" switch (queryList.get(0)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nixonwidjaja"},"content":" case \"list\":","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"nixonwidjaja"},"content":" ui.list(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nixonwidjaja"},"content":" break;","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"nixonwidjaja"},"content":" case \"date\":","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.size() \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Please specify date with the following format: YYYY-MM-DD\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nixonwidjaja"},"content":" ui.date(tasks, queryList.get(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nixonwidjaja"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nixonwidjaja"},"content":" case \"mark\":","lastModifiedDate":"2023-08-19"},{"lineNumber":63,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":64,"author":{"gitId":"nixonwidjaja"},"content":" int index \u003d Integer.parseInt(queryList.get(1)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nixonwidjaja"},"content":" ui.mark(tasks, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nixonwidjaja"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":67,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(e);","lastModifiedDate":"2023-08-19"},{"lineNumber":68,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":69,"author":{"gitId":"nixonwidjaja"},"content":" break;","lastModifiedDate":"2023-08-19"},{"lineNumber":70,"author":{"gitId":"nixonwidjaja"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-19"},{"lineNumber":71,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":72,"author":{"gitId":"nixonwidjaja"},"content":" int index \u003d Integer.parseInt(queryList.get(1)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nixonwidjaja"},"content":" ui.unmark(tasks, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nixonwidjaja"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":75,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(e);","lastModifiedDate":"2023-08-19"},{"lineNumber":76,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":77,"author":{"gitId":"nixonwidjaja"},"content":" break;","lastModifiedDate":"2023-08-19"},{"lineNumber":78,"author":{"gitId":"nixonwidjaja"},"content":" case \"delete\":","lastModifiedDate":"2023-08-19"},{"lineNumber":79,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":80,"author":{"gitId":"nixonwidjaja"},"content":" int index \u003d Integer.parseInt(queryList.get(1)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nixonwidjaja"},"content":" ui.deleteTask(tasks, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nixonwidjaja"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":83,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(e);","lastModifiedDate":"2023-08-19"},{"lineNumber":84,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":85,"author":{"gitId":"nixonwidjaja"},"content":" break;","lastModifiedDate":"2023-08-19"},{"lineNumber":86,"author":{"gitId":"nixonwidjaja"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-19"},{"lineNumber":87,"author":{"gitId":"nixonwidjaja"},"content":" ui.addTask(tasks, Parser.parseUserDeadline(queryList));","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nixonwidjaja"},"content":" break;","lastModifiedDate":"2023-08-19"},{"lineNumber":89,"author":{"gitId":"nixonwidjaja"},"content":" case \"event\":","lastModifiedDate":"2023-08-19"},{"lineNumber":90,"author":{"gitId":"nixonwidjaja"},"content":" ui.addTask(tasks, Parser.parseUserEvent(queryList));","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nixonwidjaja"},"content":" break;","lastModifiedDate":"2023-08-19"},{"lineNumber":92,"author":{"gitId":"nixonwidjaja"},"content":" case \"todo\":","lastModifiedDate":"2023-08-19"},{"lineNumber":93,"author":{"gitId":"nixonwidjaja"},"content":" ui.addTask(tasks, Parser.parseUserToDo(queryList));","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"nixonwidjaja"},"content":" break;","lastModifiedDate":"2023-08-19"},{"lineNumber":95,"author":{"gitId":"nixonwidjaja"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"nixonwidjaja"},"content":" String keyword \u003d Parser.parseUserFind(queryList);","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nixonwidjaja"},"content":" ui.find(tasks, keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"nixonwidjaja"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"nixonwidjaja"},"content":" default:","lastModifiedDate":"2023-08-19"},{"lineNumber":100,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-19"},{"lineNumber":101,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":102,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":103,"author":{"gitId":"nixonwidjaja"},"content":" ui.printError(e.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":105,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":106,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"nixonwidjaja"},"content":" storage.write(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"nixonwidjaja"},"content":" ui.printError(e.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"nixonwidjaja"},"content":" ui.bye();","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"nixonwidjaja"},"content":" input.close();","lastModifiedDate":"2023-08-19"},{"lineNumber":115,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":116,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"nixonwidjaja"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"nixonwidjaja"},"content":" new Duke().run();","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"nixonwidjaja":120}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":" * Specialized exception for Duke project.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":" super(message);","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" public DukeException(String message, Throwable cause) {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" super(message, cause);","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" public DukeException(Throwable cause) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" super(cause);","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" return super.getMessage();","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"nixonwidjaja":23}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" * Provides static methods to parse user queries and data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" private static String emptyDeadlineDate \u003d \"Please specify deadline date using /by\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" \"e.g. deadline report /by 2023-12-31\";","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" private static String emptyEventDate \u003d \"Please specify event start and end dates using /from and /to\\n\" + ","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" \"e.g. event holiday /from 2023-06-01 /to 2023-06-30\";","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" private static String invalidDate \u003d \"Please provide date with the following format: YYYY-MM-DD\";","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" private static String invalidEndDate \u003d \"Your end date is before start date\";","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" * Converts a String date from YYYY-MM-DD to d MMM yyyy format.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" * @param dateStr String date of YYYY-MM-DD format","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" * @return String date of d MMM yyyy format","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":" public static String convertToDMY(String dateStr) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" LocalDate date \u003d LocalDate.parse(dateStr);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":" return date.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(invalidDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" * Converts any string separated by white spaces to List\u003cString\u003e.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":" * @param s string separated by white spaces","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":" * @return List\u003cString\u003e ","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":" public static List\u003cString\u003e convertToList(String s) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":" String[] queries \u003d s.trim().split(\"\\\\s+\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" List\u003cString\u003e queryList \u003d Arrays.asList(queries);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":" return queryList;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nixonwidjaja"},"content":" * Parses each line of String in data file into Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nixonwidjaja"},"content":" * @param s Line of String in data file","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nixonwidjaja"},"content":" * @return Task","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if String cannot be parsed due to invalid ","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nixonwidjaja"},"content":" * format or invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nixonwidjaja"},"content":" public static Task parseFile(String s) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nixonwidjaja"},"content":" String[] q \u003d s.trim().split(\",\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nixonwidjaja"},"content":" switch (q[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nixonwidjaja"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nixonwidjaja"},"content":" return new Deadline(q[1], q[2].equals(\"X\"), LocalDate.parse(q[3]));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nixonwidjaja"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nixonwidjaja"},"content":" return new Event(q[1], q[2].equals(\"X\"), LocalDate.parse(q[3]), LocalDate.parse(q[4]));","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nixonwidjaja"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nixonwidjaja"},"content":" return new ToDo(q[1], q[2].equals(\"X\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Error parsing date in file\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Error parsing file data\");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"nixonwidjaja"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nixonwidjaja"},"content":" * Parses user query of deadline into a Deadline instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nixonwidjaja"},"content":" * @param queryList User query list","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nixonwidjaja"},"content":" * @return Deadline instance","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if no deadline description, invalid format, or invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nixonwidjaja"},"content":" public static Deadline parseUserDeadline(List\u003cString\u003e queryList) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.size() \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nixonwidjaja"},"content":" String name \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nixonwidjaja"},"content":" String deadlineString \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nixonwidjaja"},"content":" int byIndex \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nixonwidjaja"},"content":" for (int i \u003d 1; i \u003c queryList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.get(i).equals(\"/by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nixonwidjaja"},"content":" byIndex \u003d i;","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nixonwidjaja"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nixonwidjaja"},"content":" if (byIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nixonwidjaja"},"content":" name +\u003d i \u003e 1 ? \" \" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"nixonwidjaja"},"content":" name +\u003d queryList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"nixonwidjaja"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nixonwidjaja"},"content":" deadlineString +\u003d i \u003e byIndex + 1 ? \" \" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"nixonwidjaja"},"content":" deadlineString +\u003d queryList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"nixonwidjaja"},"content":" if (deadlineString.equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(emptyDeadlineDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"nixonwidjaja"},"content":" LocalDate deadline \u003d LocalDate.parse(deadlineString);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nixonwidjaja"},"content":" return new Deadline(name, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(invalidDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nixonwidjaja"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"nixonwidjaja"},"content":" * Parses user query of event into an Event instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nixonwidjaja"},"content":" * @param queryList User query list","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nixonwidjaja"},"content":" * @return Event instance","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if no event description, invalid format, or invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nixonwidjaja"},"content":" public static Event parseUserEvent(List\u003cString\u003e queryList) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.size() \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"The description of a event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"nixonwidjaja"},"content":" String name \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"nixonwidjaja"},"content":" String fromStr \u003d \"\", toStr \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"nixonwidjaja"},"content":" int fromIndex \u003d -1, toIndex \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"nixonwidjaja"},"content":" for (int i \u003d 1; i \u003c queryList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.get(i).equals(\"/from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"nixonwidjaja"},"content":" fromIndex \u003d i;","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"nixonwidjaja"},"content":" toIndex \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"nixonwidjaja"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.get(i).equals(\"/to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"nixonwidjaja"},"content":" toIndex \u003d i;","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"nixonwidjaja"},"content":" fromIndex \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"nixonwidjaja"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"nixonwidjaja"},"content":" if (fromIndex \u003d\u003d -1 \u0026\u0026 toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"nixonwidjaja"},"content":" name +\u003d i \u003e 1 ? \" \" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"nixonwidjaja"},"content":" name +\u003d queryList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"nixonwidjaja"},"content":" } else if (fromIndex \u003e -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"nixonwidjaja"},"content":" fromStr +\u003d i \u003e fromIndex + 1 ? \" \" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"nixonwidjaja"},"content":" fromStr +\u003d queryList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"nixonwidjaja"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"nixonwidjaja"},"content":" toStr +\u003d i \u003e toIndex + 1 ? \" \" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"nixonwidjaja"},"content":" toStr +\u003d queryList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"nixonwidjaja"},"content":" if (fromStr.equals(\"\") || toStr.equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(emptyEventDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"nixonwidjaja"},"content":" LocalDate from \u003d LocalDate.parse(fromStr);","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"nixonwidjaja"},"content":" LocalDate to \u003d LocalDate.parse(toStr);","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"nixonwidjaja"},"content":" if (from.compareTo(to) \u003e 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(invalidEndDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"nixonwidjaja"},"content":" return new Event(name, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(invalidDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"nixonwidjaja"},"content":" * Parses user query of todo into an ToDo instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"nixonwidjaja"},"content":" * @param queryList User query list","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"nixonwidjaja"},"content":" * @return ToDo instance","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if no todo description","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"nixonwidjaja"},"content":" public static ToDo parseUserToDo(List\u003cString\u003e queryList) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.size() \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"nixonwidjaja"},"content":" String name \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"nixonwidjaja"},"content":" for (int i \u003d 1; i \u003c queryList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"nixonwidjaja"},"content":" name +\u003d i \u003e 1 ? \" \" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"nixonwidjaja"},"content":" name +\u003d queryList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"nixonwidjaja"},"content":" return new ToDo(name);","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"nixonwidjaja"},"content":" * Parses user query list of Find command.","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"nixonwidjaja"},"content":" * @param queryList User query list","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"nixonwidjaja"},"content":" * @return Keyword of what user searches","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if no keywoard given","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"nixonwidjaja"},"content":" public static String parseUserFind(List\u003cString\u003e queryList) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.size() \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"What are you trying to find?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"nixonwidjaja"},"content":" String keyword \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"nixonwidjaja"},"content":" for (int i \u003d 1; i \u003c queryList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"nixonwidjaja"},"content":" keyword +\u003d i \u003e 1 ? \" \" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"nixonwidjaja"},"content":" keyword +\u003d queryList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"nixonwidjaja"},"content":" return keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nixonwidjaja":195}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" * Handles read and write to file data.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" private String home;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" private Path path;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" public Storage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" this.home \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" this.path \u003d Paths.get(home, \"data\", \"duke.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" this.filePath \u003d this.path.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" this.home \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":" this.path \u003d Paths.get(home, filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":" * Reads from the specified file.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":" * @return TaskList instance containing all tasks in file","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if error reading file","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":" public TaskList read() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":" if (Files.exists(this.path)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nixonwidjaja"},"content":" while (s.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nixonwidjaja"},"content":" String nextLine \u003d s.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nixonwidjaja"},"content":" if (nextLine.equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nixonwidjaja"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nixonwidjaja"},"content":" tasks.add(Parser.parseFile(nextLine));","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nixonwidjaja"},"content":" s.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nixonwidjaja"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Error reading file\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nixonwidjaja"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nixonwidjaja"},"content":" * Writes to the specified file.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nixonwidjaja"},"content":" * @param textToAdd All tasks exported to text format","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if error writing to file","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nixonwidjaja"},"content":" private void writeToFile(String textToAdd) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nixonwidjaja"},"content":" Path folder \u003d this.path.getParent();","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nixonwidjaja"},"content":" if (!Files.exists(folder)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nixonwidjaja"},"content":" Files.createDirectories(folder);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"nixonwidjaja"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"nixonwidjaja"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"nixonwidjaja"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"nixonwidjaja"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"nixonwidjaja"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Error writing to file\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nixonwidjaja"},"content":" * Takes TaskList of the program and exports it to text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if error writing to file","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nixonwidjaja"},"content":" public void write(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nixonwidjaja"},"content":" String data \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nixonwidjaja"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"nixonwidjaja"},"content":" data +\u003d tasks.get(i).exportToText();","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"nixonwidjaja"},"content":" if (i \u003c tasks.size() - 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nixonwidjaja"},"content":" data +\u003d System.lineSeparator();","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"nixonwidjaja"},"content":" writeToFile(data);","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nixonwidjaja":100}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" * Represents a deadline inherits from a Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" private static String invalidDate \u003d \"Please provide date with the following format: YYYY-MM-DD\";","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" public Deadline(String name, LocalDate deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" public Deadline(String name, boolean isDone, LocalDate deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" * Checks if a deadline is on specified String date","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" * @param String date","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":" * @return boolean whether a deadline is on specified String date","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":" public boolean isToday(String dateStr) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" LocalDate date \u003d LocalDate.parse(dateStr);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" return this.deadline.compareTo(date) \u003d\u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(invalidDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), ","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":" this.deadline.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"nixonwidjaja"},"content":" public String exportToText() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"nixonwidjaja"},"content":" return String.format(\"deadline,\u003e%s,\u003e%s\", super.exportToText(), this.deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"nixonwidjaja":51}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" * Represents an event inherits from a Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" private static String invalidDate \u003d \"Please provide dates with the following format: YYYY-MM-DD\";","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" public Event(String name, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" public Event(String name, boolean isDone, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":" * Checks if an event is happening on specified String date","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" * @param String date","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":" * @return boolean whether an event is happening on specified String date","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" public boolean isToday(String dateStr) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":" LocalDate date \u003d LocalDate.parse(dateStr);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":" return this.from.compareTo(date) \u003c\u003d 0 \u0026\u0026 date.compareTo(to) \u003c\u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(invalidDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":" return String.format(\"[E]%s (%s - %s)\", super.toString(), ","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nixonwidjaja"},"content":" this.from.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\")), ","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nixonwidjaja"},"content":" this.to.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"nixonwidjaja"},"content":" public String exportToText() {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"nixonwidjaja"},"content":" return String.format(\"event,\u003e%s,\u003e%s,\u003e%s\", super.exportToText(), this.from, this.to);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"nixonwidjaja":55}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":" * Represents a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" private String name;","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" public Task(String name, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" public void markDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" public void unmarkDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":" public boolean isToday(String dateStr) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" public boolean contains(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" return this.name.contains(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":" return String.format(\"[%s] %s\", this.isDone ? \"X\" : \" \", this.name);","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":" public String exportToText() {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":" return String.format(\"%s,\u003e%s\", this.name, this.isDone ? \"X\" : \"O\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"nixonwidjaja":46}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":" * Represents a list of Tasks inherits from ArrayList of Task to contain user tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" super(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" * Marks task of specified index as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" * @param index Specified index","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" * @return Task marked as done","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid task index","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" public Task markDone(int index) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" if (index \u003c 0 || index \u003e\u003d super.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Invalid task index\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":" super.get(index).markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":" return super.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" * Marks task of specified index as undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" * @param index Specified index","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" * @return Task marked as undone","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid task index","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" public Task unmarkDone(int index) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":" if (index \u003c 0 || index \u003e\u003d super.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Invalid task index\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":" super.get(index).unmarkDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":" return super.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nixonwidjaja":46}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":" * Represents a ToDo inherits from a Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" public ToDo(String name, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" public String exportToText() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" return String.format(\"todo,\u003e%s\", super.exportToText());","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"nixonwidjaja":24}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" * Represents the client facing UI to handle inputs and displays.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" * Adds task to TaskList and displays added task info to user.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" * @param task Task to be added","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" public void addTask(TaskList tasks, Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" print(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\" %s\\n\", task.toString()));","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\"Now you have %d tasks in the list.\", tasks.size()));","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" * Displays bye message.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" public void bye() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":" * Displays all tasks from TaskList that exist on specified date.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" * @param date Date given by user","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":" public void date(TaskList tasks, String date) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":" int idx \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" String dmy \u003d Parser.convertToDMY(date);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":" if (task.isToday(date)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":" if (idx \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\"Here are the tasks on %s:\", dmy));","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\"%d.%s\", ++idx, task.toString()));","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nixonwidjaja"},"content":" if (idx \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\"There is no task on %s.\", dmy));","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nixonwidjaja"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nixonwidjaja"},"content":" * Removes task from TaskList and displays removed task info to user.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nixonwidjaja"},"content":" * @param index Index of task removed","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid task index","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nixonwidjaja"},"content":" public void deleteTask(TaskList tasks, int index) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nixonwidjaja"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Invalid task index\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nixonwidjaja"},"content":" Task task \u003d tasks.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nixonwidjaja"},"content":" print(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\" %s\\n\", task.toString()));","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\"Now you have %d tasks in the list.\", tasks.size()));","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nixonwidjaja"},"content":" * Displays all tasks in TaskList that matches specified keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nixonwidjaja"},"content":" * @param keyword String of specified keyword","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nixonwidjaja"},"content":" public void find(TaskList tasks, String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nixonwidjaja"},"content":" int idx \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"nixonwidjaja"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"nixonwidjaja"},"content":" if (task.contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"nixonwidjaja"},"content":" if (idx \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"nixonwidjaja"},"content":" print(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\"%d.%s\", ++idx, task.toString()));","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nixonwidjaja"},"content":" if (idx \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nixonwidjaja"},"content":" print(\"There is no matching task with: \" + keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nixonwidjaja"},"content":" * Displays hello message.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nixonwidjaja"},"content":" public void hello() {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"nixonwidjaja"},"content":" print(\"Hello! I\u0027m AdaBot.\\nWhat do you want to do today?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nixonwidjaja"},"content":" * Displays all tasks in TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nixonwidjaja"},"content":" public void list(TaskList tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nixonwidjaja"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"nixonwidjaja"},"content":" print(\"There is no task in your list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"nixonwidjaja"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"nixonwidjaja"},"content":" print(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"nixonwidjaja"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\"%d.%s\", i + 1, tasks.get(i).toString()));","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nixonwidjaja"},"content":" * Marks specified task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nixonwidjaja"},"content":" * @param index Index of specified task","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid index task","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nixonwidjaja"},"content":" public void mark(TaskList tasks, int index) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"nixonwidjaja"},"content":" Task task \u003d tasks.markDone(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"nixonwidjaja"},"content":" print(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"nixonwidjaja"},"content":" print(\" \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"nixonwidjaja"},"content":" } ","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"nixonwidjaja"},"content":" public void print(String s) {","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"nixonwidjaja"},"content":" System.out.println(s);","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"nixonwidjaja"},"content":" public void printError(String s) {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"nixonwidjaja"},"content":" System.out.println(\"OOPS!!! \" + s);","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nixonwidjaja"},"content":" * Marks specified task as undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nixonwidjaja"},"content":" * @param index Index of specified task","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid index task","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"nixonwidjaja"},"content":" public void unmark(TaskList tasks, int index) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"nixonwidjaja"},"content":" Task task \u003d tasks.unmarkDone(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"nixonwidjaja"},"content":" print(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"nixonwidjaja"},"content":" print(\" \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nixonwidjaja":142}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" private String emptyDeadlineDate \u003d \"Please specify deadline date using /by\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" \"e.g. deadline report /by 2023-12-31\";","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" private String emptyEventDate \u003d \"Please specify event start and end dates using /from and /to\\n\" + ","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" \"e.g. event holiday /from 2023-06-01 /to 2023-06-30\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" private String invalidDate \u003d \"Please provide date with the following format: YYYY-MM-DD\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" private String invalidEndDate \u003d \"Your end date is before start date\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" public void convertToDMY_correctDate_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" assertEquals(\"12 Dec 2023\", Parser.convertToDMY(\"2023-12-12\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" public void convertToDMY_invalidDate_fail() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":" Parser.convertToDMY(\"lol\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" assertEquals(invalidDate, e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nixonwidjaja":36}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" private ToDo task \u003d new ToDo(\"task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" public void createToDo_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" assertEquals(\"[T][ ] task\", task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" public void markToDo_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" task.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" assertEquals(\"[T][X] task\", task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nixonwidjaja":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"todo todo1 ","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"todo do cs2103","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"todo","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"deadline return book /by 2023-08-29","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"deadline","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"mark 2","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"mark 4","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":"mark 0","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":"unmark 100","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"unmark 2","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":"delete -1","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":"delete 10","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":"delete 3","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"nixonwidjaja":19}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"# AdaBot","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"\u003e \"Adapt. Improvise. Overcome.\" - Tom Cruise","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"AdaBot frees your mind of having to remember things you need to do. It\u0027s,","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"* text-based","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"* easy to learn","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"* ~~FAST~~ SUPER FAST to use","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"All you need to do is,","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"1. Add your tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":"2. Let it manage your tasks for you 😉","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"And it is **FREE!**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":"Features:","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":"- [x] Managing tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":"- [x] Managing deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":"- [ ] Reminders (coming soon)","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":"##","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":"If you Java programmer, you can use it to practice Java too. Here\u0027s the ```main``` method in ```Duke.java```:","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":"```java","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" new Duke().run();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"nixonwidjaja":22,"-":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 \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":"nixonwidjaja"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"nixonwidjaja":6,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" * The backbone of the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"public class Duke {","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" * Constructor for Duke.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" public Duke() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":" * Constructor for Duke with specified filePath.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":" * @param filePath","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" * Runs the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":" tasks \u003d storage.read();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" ui.printError(e.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"nixonwidjaja"},"content":" Scanner input \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"nixonwidjaja"},"content":" ui.hello();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"nixonwidjaja"},"content":" while (input.hasNextLine()) {","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"nixonwidjaja"},"content":" String response \u003d input.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nixonwidjaja"},"content":" Command command \u003d Parser.parse(response);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"nixonwidjaja"},"content":" command.execute(tasks, ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nixonwidjaja"},"content":" if (command.isExit()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"nixonwidjaja"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":60,"author":{"gitId":"nixonwidjaja"},"content":" ui.printError(e.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":62,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":63,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"nixonwidjaja"},"content":" storage.write(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"nixonwidjaja"},"content":" ui.printError(e.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"nixonwidjaja"},"content":" input.close();","lastModifiedDate":"2023-08-19"},{"lineNumber":71,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":72,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nixonwidjaja"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nixonwidjaja"},"content":" new Duke().run();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"nixonwidjaja":76}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":" * Specialized exception for Duke project.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":" super(message);","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" public DukeException(String message, Throwable cause) {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" super(message, cause);","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" public DukeException(Throwable cause) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" super(cause);","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" return super.getMessage();","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"nixonwidjaja":23}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":" * This command functions to add task to a task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" private Task task;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" public void execute(TaskList tasks, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" ui.addTask(tasks, task);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nixonwidjaja":22}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":" * This command functions to terminate the program.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" public void execute(TaskList tasks, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" ui.bye();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nixonwidjaja":18}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":" * This abstract class represents command and becomes the parent","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" * of all commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" * Returns a boolean to state whether the program terminates on command.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" * @return boolean whether the program terminates on command.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" * All command classes implement this execute function.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" * @param ui","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" public abstract void execute(TaskList tasks, Ui ui) throws DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nixonwidjaja":27}},{"path":"src/main/java/duke/command/DateCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" * This command functions to return all tasks that happen on specified date.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"public class DateCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" private String date;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" public DateCommand(String date) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" public void execute(TaskList tasks, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" TaskList tasksToday \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" if (task.isToday(date)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" tasksToday.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" ui.find(tasksToday, date);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nixonwidjaja":28}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" * This command functions to delete a task at specified index.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" private int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" public void execute(TaskList tasks, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Invalid task index\");","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" Task task \u003d tasks.remove(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" ui.deleteTask(tasks, task);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nixonwidjaja":26}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":" * This command functions to find a task that contains a specified keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" private String keyword;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" public void execute(TaskList tasks, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" TaskList tasksWithKeyword \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" if (task.contains(keyword)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" tasksWithKeyword.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" ui.find(tasksWithKeyword, keyword);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nixonwidjaja":27}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":" * This command functions to list all saved tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" public void execute(TaskList tasks, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" ui.list(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nixonwidjaja":14}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" * This command functions to mark a task at specified index.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" private int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" public void execute(TaskList tasks, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" Task task \u003d tasks.markDone(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" ui.mark(tasks, task);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nixonwidjaja":23}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" * This command functions to unmark a task at specified index.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" private int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" public void execute(TaskList tasks, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" Task task \u003d tasks.unmarkDone(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" ui.unmark(tasks, task);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"nixonwidjaja":23}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":"import duke.command.DateCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" * Provides static methods to parse user queries and data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" private static String emptyDeadlineDate \u003d \"Please specify deadline date using /by\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":" + \"e.g. deadline report /by 2023-12-31\";","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":" private static String emptyEventDate \u003d \"Please specify event start and end dates using /from and /to\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" + \"e.g. event holiday /from 2023-06-01 /to 2023-06-30\";","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":" private static String invalidDate \u003d \"Please provide date with the following format: YYYY-MM-DD\";","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" private static String invalidEndDate \u003d \"Your end date is before start date\";","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" * Converts a String date from YYYY-MM-DD to d MMM yyyy format.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":" * @param dateStr String date of YYYY-MM-DD format","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":" * @return String date of d MMM yyyy format","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":" public static String convertToDmy(String dateStr) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":" LocalDate date \u003d LocalDate.parse(dateStr);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":" return date.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(invalidDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nixonwidjaja"},"content":" * Converts any string separated by white spaces to List of String.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nixonwidjaja"},"content":" * @param s String separated by white spaces","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"nixonwidjaja"},"content":" * @return List of String","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nixonwidjaja"},"content":" private static List\u003cString\u003e convertToList(String s) {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"nixonwidjaja"},"content":" String[] queries \u003d s.trim().split(\"\\\\s+\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nixonwidjaja"},"content":" List\u003cString\u003e queryList \u003d Arrays.asList(queries);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nixonwidjaja"},"content":" return queryList;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nixonwidjaja"},"content":" * Parses each line of String in data file into Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nixonwidjaja"},"content":" * @param s Line of String in data file","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nixonwidjaja"},"content":" * @return Task","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if String cannot be parsed due to invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nixonwidjaja"},"content":" * format or invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nixonwidjaja"},"content":" public static Task parseFile(String s) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nixonwidjaja"},"content":" String[] q \u003d s.trim().split(\",\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nixonwidjaja"},"content":" switch (q[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"nixonwidjaja"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nixonwidjaja"},"content":" return new Deadline(q[1], q[2].equals(\"X\"), LocalDate.parse(q[3]));","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nixonwidjaja"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nixonwidjaja"},"content":" return new Event(q[1], q[2].equals(\"X\"), LocalDate.parse(q[3]), LocalDate.parse(q[4]));","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"nixonwidjaja"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"nixonwidjaja"},"content":" return new ToDo(q[1], q[2].equals(\"X\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"nixonwidjaja"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Error parsing file data\");","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Error parsing date in file\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nixonwidjaja"},"content":" * Parses user query of deadline into a Deadline instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nixonwidjaja"},"content":" * @param queryList User query list","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nixonwidjaja"},"content":" * @return Deadline instance","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if no deadline description, invalid format, or invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nixonwidjaja"},"content":" private static Deadline parseUserDeadline(List\u003cString\u003e queryList) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.size() \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"nixonwidjaja"},"content":" String name \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nixonwidjaja"},"content":" String deadlineString \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"nixonwidjaja"},"content":" int byIndex \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"nixonwidjaja"},"content":" for (int i \u003d 1; i \u003c queryList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.get(i).equals(\"/by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nixonwidjaja"},"content":" byIndex \u003d i;","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"nixonwidjaja"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nixonwidjaja"},"content":" if (byIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"nixonwidjaja"},"content":" name +\u003d i \u003e 1 ? \" \" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"nixonwidjaja"},"content":" name +\u003d queryList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nixonwidjaja"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nixonwidjaja"},"content":" deadlineString +\u003d i \u003e byIndex + 1 ? \" \" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nixonwidjaja"},"content":" deadlineString +\u003d queryList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"nixonwidjaja"},"content":" if (deadlineString.equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(emptyDeadlineDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"nixonwidjaja"},"content":" LocalDate deadline \u003d LocalDate.parse(deadlineString);","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"nixonwidjaja"},"content":" return new Deadline(name, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(invalidDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nixonwidjaja"},"content":" * Parses user query of event into an Event instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nixonwidjaja"},"content":" * @param queryList User query list","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nixonwidjaja"},"content":" * @return Event instance","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if no event description, invalid format, or invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nixonwidjaja"},"content":" private static Event parseUserEvent(List\u003cString\u003e queryList) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.size() \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"The description of a event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"nixonwidjaja"},"content":" String name \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"nixonwidjaja"},"content":" String fromStr \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"nixonwidjaja"},"content":" String toStr \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"nixonwidjaja"},"content":" int fromIndex \u003d -1;","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"nixonwidjaja"},"content":" int toIndex \u003d -1;","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"nixonwidjaja"},"content":" for (int i \u003d 1; i \u003c queryList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.get(i).equals(\"/from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"nixonwidjaja"},"content":" fromIndex \u003d i;","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"nixonwidjaja"},"content":" toIndex \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"nixonwidjaja"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.get(i).equals(\"/to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"nixonwidjaja"},"content":" toIndex \u003d i;","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"nixonwidjaja"},"content":" fromIndex \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"nixonwidjaja"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"nixonwidjaja"},"content":" if (fromIndex \u003d\u003d -1 \u0026\u0026 toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"nixonwidjaja"},"content":" name +\u003d i \u003e 1 ? \" \" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"nixonwidjaja"},"content":" name +\u003d queryList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"nixonwidjaja"},"content":" } else if (fromIndex \u003e -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"nixonwidjaja"},"content":" fromStr +\u003d i \u003e fromIndex + 1 ? \" \" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"nixonwidjaja"},"content":" fromStr +\u003d queryList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"nixonwidjaja"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"nixonwidjaja"},"content":" toStr +\u003d i \u003e toIndex + 1 ? \" \" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"nixonwidjaja"},"content":" toStr +\u003d queryList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"nixonwidjaja"},"content":" if (fromStr.equals(\"\") || toStr.equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(emptyEventDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"nixonwidjaja"},"content":" LocalDate from \u003d LocalDate.parse(fromStr);","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"nixonwidjaja"},"content":" LocalDate to \u003d LocalDate.parse(toStr);","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"nixonwidjaja"},"content":" if (from.compareTo(to) \u003e 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(invalidEndDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"nixonwidjaja"},"content":" return new Event(name, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(invalidDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"nixonwidjaja"},"content":" * Parses user query of todo into an ToDo instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"nixonwidjaja"},"content":" * @param queryList User query list","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"nixonwidjaja"},"content":" * @return ToDo instance","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if no todo description","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"nixonwidjaja"},"content":" public static ToDo parseUserToDo(List\u003cString\u003e queryList) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.size() \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"nixonwidjaja"},"content":" String name \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"nixonwidjaja"},"content":" for (int i \u003d 1; i \u003c queryList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"nixonwidjaja"},"content":" name +\u003d i \u003e 1 ? \" \" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"nixonwidjaja"},"content":" name +\u003d queryList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"nixonwidjaja"},"content":" return new ToDo(name);","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"nixonwidjaja"},"content":" * Parses user query list of Find command.","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"nixonwidjaja"},"content":" * @param queryList User query list","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"nixonwidjaja"},"content":" * @return Keyword of what user searches","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if no keywoard given","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"nixonwidjaja"},"content":" public static String parseUserFind(List\u003cString\u003e queryList) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.size() \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"What are you trying to find?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"nixonwidjaja"},"content":" String keyword \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"nixonwidjaja"},"content":" for (int i \u003d 1; i \u003c queryList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"nixonwidjaja"},"content":" keyword +\u003d i \u003e 1 ? \" \" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"nixonwidjaja"},"content":" keyword +\u003d queryList.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"nixonwidjaja"},"content":" return keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"nixonwidjaja"},"content":" * Parses user input and returns the corresponding command.","lastModifiedDate":"2023-09-04"},{"lineNumber":213,"author":{"gitId":"nixonwidjaja"},"content":" * @param input","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"nixonwidjaja"},"content":" * @return Command to execute","lastModifiedDate":"2023-09-04"},{"lineNumber":215,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid user input","lastModifiedDate":"2023-09-04"},{"lineNumber":216,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":217,"author":{"gitId":"nixonwidjaja"},"content":" public static Command parse(String input) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":218,"author":{"gitId":"nixonwidjaja"},"content":" List\u003cString\u003e queryList \u003d convertToList(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":219,"author":{"gitId":"nixonwidjaja"},"content":" switch (queryList.get(0)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":220,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":221,"author":{"gitId":"nixonwidjaja"},"content":" case \"bye\":","lastModifiedDate":"2023-09-04"},{"lineNumber":222,"author":{"gitId":"nixonwidjaja"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":223,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":224,"author":{"gitId":"nixonwidjaja"},"content":" case \"date\":","lastModifiedDate":"2023-09-04"},{"lineNumber":225,"author":{"gitId":"nixonwidjaja"},"content":" if (queryList.size() \u003c 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":226,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Please specify date with the following format: YYYY-MM-DD\");","lastModifiedDate":"2023-09-04"},{"lineNumber":227,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":228,"author":{"gitId":"nixonwidjaja"},"content":" return new DateCommand(queryList.get(1));","lastModifiedDate":"2023-09-04"},{"lineNumber":229,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":230,"author":{"gitId":"nixonwidjaja"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-04"},{"lineNumber":231,"author":{"gitId":"nixonwidjaja"},"content":" return new AddCommand(parseUserDeadline(queryList));","lastModifiedDate":"2023-09-04"},{"lineNumber":232,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":233,"author":{"gitId":"nixonwidjaja"},"content":" case \"delete\":","lastModifiedDate":"2023-09-04"},{"lineNumber":234,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":235,"author":{"gitId":"nixonwidjaja"},"content":" int index \u003d Integer.parseInt(queryList.get(1)) - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":236,"author":{"gitId":"nixonwidjaja"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":237,"author":{"gitId":"nixonwidjaja"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":238,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":239,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":240,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":241,"author":{"gitId":"nixonwidjaja"},"content":" case \"event\":","lastModifiedDate":"2023-09-04"},{"lineNumber":242,"author":{"gitId":"nixonwidjaja"},"content":" return new AddCommand(parseUserEvent(queryList));","lastModifiedDate":"2023-09-04"},{"lineNumber":243,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":244,"author":{"gitId":"nixonwidjaja"},"content":" case \"find\":","lastModifiedDate":"2023-09-04"},{"lineNumber":245,"author":{"gitId":"nixonwidjaja"},"content":" String keyword \u003d Parser.parseUserFind(queryList);","lastModifiedDate":"2023-09-04"},{"lineNumber":246,"author":{"gitId":"nixonwidjaja"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-09-04"},{"lineNumber":247,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":248,"author":{"gitId":"nixonwidjaja"},"content":" case \"list\":","lastModifiedDate":"2023-09-04"},{"lineNumber":249,"author":{"gitId":"nixonwidjaja"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":250,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":251,"author":{"gitId":"nixonwidjaja"},"content":" case \"mark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":252,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":253,"author":{"gitId":"nixonwidjaja"},"content":" int index \u003d Integer.parseInt(queryList.get(1)) - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":254,"author":{"gitId":"nixonwidjaja"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":255,"author":{"gitId":"nixonwidjaja"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":256,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Please specify the index of which task you would like to mark.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":257,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":258,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":259,"author":{"gitId":"nixonwidjaja"},"content":" case \"todo\":","lastModifiedDate":"2023-09-04"},{"lineNumber":260,"author":{"gitId":"nixonwidjaja"},"content":" return new AddCommand(parseUserToDo(queryList));","lastModifiedDate":"2023-09-04"},{"lineNumber":261,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":262,"author":{"gitId":"nixonwidjaja"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":263,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":264,"author":{"gitId":"nixonwidjaja"},"content":" int index \u003d Integer.parseInt(queryList.get(1)) - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":265,"author":{"gitId":"nixonwidjaja"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":266,"author":{"gitId":"nixonwidjaja"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":267,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Please specify the index of which task you would like to unmark.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":268,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":269,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":270,"author":{"gitId":"nixonwidjaja"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":271,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-04"},{"lineNumber":272,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":273,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":274,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nixonwidjaja":274}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" * Handles read and write to file data.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" private String home;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" private Path path;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" * Constructor for storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" public Storage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" this.home \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":" this.path \u003d Paths.get(home, \"data\", \"duke.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":" this.filePath \u003d this.path.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" * Constructor for storage with specified filePath.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" * @param filePath","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":" this.home \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" this.path \u003d Paths.get(home, filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":" * Reads from the specified file.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" * @return TaskList instance containing all tasks in file","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if error reading file","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nixonwidjaja"},"content":" public TaskList read() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nixonwidjaja"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nixonwidjaja"},"content":" if (Files.exists(this.path)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nixonwidjaja"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nixonwidjaja"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nixonwidjaja"},"content":" while (s.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nixonwidjaja"},"content":" String nextLine \u003d s.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nixonwidjaja"},"content":" if (nextLine.equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nixonwidjaja"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nixonwidjaja"},"content":" tasks.add(Parser.parseFile(nextLine));","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nixonwidjaja"},"content":" s.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nixonwidjaja"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Error reading file\");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nixonwidjaja"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nixonwidjaja"},"content":" * Writes to the specified file.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nixonwidjaja"},"content":" * @param textToAdd All tasks exported to text format","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if error writing to file","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nixonwidjaja"},"content":" private void writeToFile(String textToAdd) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nixonwidjaja"},"content":" Path folder \u003d this.path.getParent();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"nixonwidjaja"},"content":" if (!Files.exists(folder)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"nixonwidjaja"},"content":" Files.createDirectories(folder);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"nixonwidjaja"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nixonwidjaja"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nixonwidjaja"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nixonwidjaja"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nixonwidjaja"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Error writing to file\");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nixonwidjaja"},"content":" * Takes TaskList of the program and exports it to text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if error writing to file","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nixonwidjaja"},"content":" public void write(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nixonwidjaja"},"content":" String data \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"nixonwidjaja"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"nixonwidjaja"},"content":" data +\u003d tasks.get(i).exportToText();","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nixonwidjaja"},"content":" if (i \u003c tasks.size() - 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"nixonwidjaja"},"content":" data +\u003d System.lineSeparator();","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"nixonwidjaja"},"content":" writeToFile(data);","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nixonwidjaja":107}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" * Represents a deadline inherits from a Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" private static String invalidDate \u003d \"Please provide date with the following format: YYYY-MM-DD\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" * Constructor for Deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" * @param name","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" * @param deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" public Deadline(String name, LocalDate deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" * Constructor for Deadline with specified isDone.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" * @param name","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":" * @param isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":" * @param deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":" public Deadline(String name, boolean isDone, LocalDate deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":" * Checks if a deadline is on specified String date","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" * @param dateStr date in String format","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":" * @return boolean whether a deadline is on specified String date","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":" public boolean isToday(String dateStr) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" LocalDate date \u003d LocalDate.parse(dateStr);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":" return this.deadline.compareTo(date) \u003d\u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(invalidDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"nixonwidjaja"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"nixonwidjaja"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(),","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"nixonwidjaja"},"content":" this.deadline.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":57,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"nixonwidjaja"},"content":" public String exportToText() {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"nixonwidjaja"},"content":" return String.format(\"deadline,\u003e%s,\u003e%s\", super.exportToText(), this.deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"nixonwidjaja":62}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" * Represents an event inherits from a Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" private static String invalidDate \u003d \"Please provide dates with the following format: YYYY-MM-DD\";","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" * Constructor for Event.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" * @param name","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" * @param from","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" * @param to","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" public Event(String name, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":" * Constructor for Event with specified isDone.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" * @param name","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":" * @param isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" * @param from","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" * @param to","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" public Event(String name, boolean isDone, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":" * Checks if an event is happening on specified String date","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":" * @param dateStr date in String format","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" * @return boolean whether an event is happening on specified String date","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nixonwidjaja"},"content":" public boolean isToday(String dateStr) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nixonwidjaja"},"content":" LocalDate date \u003d LocalDate.parse(dateStr);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nixonwidjaja"},"content":" return this.from.compareTo(date) \u003c\u003d 0 \u0026\u0026 date.compareTo(to) \u003c\u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(invalidDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":58,"author":{"gitId":"nixonwidjaja"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"nixonwidjaja"},"content":" return String.format(\"[E]%s (%s - %s)\", super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nixonwidjaja"},"content":" this.from.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\")),","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nixonwidjaja"},"content":" this.to.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":63,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"nixonwidjaja"},"content":" public String exportToText() {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"nixonwidjaja"},"content":" return String.format(\"event,\u003e%s,\u003e%s,\u003e%s\", super.exportToText(), this.from, this.to);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"nixonwidjaja":68}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":" * Represents a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" private String name;","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" * Constructor for Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" * @param name","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" * Constructor for Task with specified isDone.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" * @param name","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" * @param isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" public Task(String name, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" public void markDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" public void unmarkDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" public boolean isToday(String dateStr) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":" public boolean contains(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":" return this.name.contains(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"nixonwidjaja"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"nixonwidjaja"},"content":" return String.format(\"[%s] %s\", this.isDone ? \"X\" : \" \", this.name);","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"nixonwidjaja"},"content":" public String exportToText() {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"nixonwidjaja"},"content":" return String.format(\"%s,\u003e%s\", this.name, this.isDone ? \"X\" : \"O\");","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"nixonwidjaja":55}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":" * Represents a list of Tasks inherits from ArrayList of Task to contain user tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" super(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" * Marks task of specified index as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" * @param index Specified index","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" * @return Task marked as done","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid task index","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" public Task markDone(int index) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" if (index \u003c 0 || index \u003e\u003d super.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Invalid task index\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":" super.get(index).markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":" return super.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" * Marks task of specified index as undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" * @param index Specified index","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" * @return Task marked as undone","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid task index","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" public Task unmarkDone(int index) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":" if (index \u003c 0 || index \u003e\u003d super.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":" throw new DukeException(\"Invalid task index\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":" super.get(index).unmarkDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":" return super.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nixonwidjaja":46}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":" * Represents a ToDo inherits from a Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" public ToDo(String name, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" public String exportToText() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" return String.format(\"todo,\u003e%s\", super.exportToText());","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"nixonwidjaja":24}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" * Represents the client facing UI to handle inputs and displays.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" * Adds task to TaskList and displays added task info to user.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" * @param task Task to be added","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" public void addTask(TaskList tasks, Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" print(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\" %s\\n\", task.toString()));","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\"Now you have %d tasks in the list.\", tasks.size()));","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" * Displays bye message.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":" public void bye() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" * Displays all tasks from TaskList that exist on specified date.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" * @param date Date given by user","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" * @throws DukeException if invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":" public void date(TaskList tasks, String date) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nixonwidjaja"},"content":" String dmy \u003d Parser.convertToDmy(date);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"nixonwidjaja"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\"There is no task on %s.\", dmy));","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nixonwidjaja"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\"Here are the tasks on %s:\", dmy));","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"nixonwidjaja"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\"%d.%s\", i + 1, tasks.get(i).toString()));","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nixonwidjaja"},"content":" * Removes task from TaskList and displays removed task info to user.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nixonwidjaja"},"content":" * @param task task to be removed","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nixonwidjaja"},"content":" public void deleteTask(TaskList tasks, Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"nixonwidjaja"},"content":" print(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\" %s\\n\", task.toString()));","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\"Now you have %d tasks in the list.\", tasks.size()));","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nixonwidjaja"},"content":" * Displays all tasks in TaskList that matches specified keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nixonwidjaja"},"content":" * @param keyword String of specified keyword","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nixonwidjaja"},"content":" public void find(TaskList tasks, String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nixonwidjaja"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"nixonwidjaja"},"content":" print(\"There is no matching task with: \" + keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nixonwidjaja"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"nixonwidjaja"},"content":" print(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"nixonwidjaja"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\"%d.%s\", i + 1, tasks.get(i).toString()));","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nixonwidjaja"},"content":" * Displays hello message.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nixonwidjaja"},"content":" public void hello() {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"nixonwidjaja"},"content":" print(\"Hello! I\u0027m AdaBot.\\nWhat do you want to do today?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nixonwidjaja"},"content":" * Displays all tasks in TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nixonwidjaja"},"content":" public void list(TaskList tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nixonwidjaja"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nixonwidjaja"},"content":" print(\"There is no task in your list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nixonwidjaja"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nixonwidjaja"},"content":" print(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nixonwidjaja"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"nixonwidjaja"},"content":" print(String.format(\"%d.%s\", i + 1, tasks.get(i).toString()));","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nixonwidjaja"},"content":" * Marks specified task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nixonwidjaja"},"content":" * @param task task to be marked","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nixonwidjaja"},"content":" public void mark(TaskList tasks, Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"nixonwidjaja"},"content":" print(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nixonwidjaja"},"content":" print(\" \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nixonwidjaja"},"content":" public void print(String s) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nixonwidjaja"},"content":" System.out.println(s);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nixonwidjaja"},"content":" public void printError(String s) {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"nixonwidjaja"},"content":" System.out.println(\"OOPS!!! \" + s);","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"nixonwidjaja"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nixonwidjaja"},"content":" * Marks specified task as undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nixonwidjaja"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nixonwidjaja"},"content":" * @param task task to be unmarked","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"nixonwidjaja"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nixonwidjaja"},"content":" public void unmark(TaskList tasks, Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"nixonwidjaja"},"content":" print(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"nixonwidjaja"},"content":" print(\" \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nixonwidjaja":124}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" private String emptyDeadlineDate \u003d \"Please specify deadline date using /by\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" + \"e.g. deadline report /by 2023-12-31\";","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":" private String emptyEventDate \u003d \"Please specify event start and end dates using /from and /to\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" + \"e.g. event holiday /from 2023-06-01 /to 2023-06-30\";","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" private String invalidDate \u003d \"Please provide date with the following format: YYYY-MM-DD\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" private String invalidEndDate \u003d \"Your end date is before start date\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":" public void convertToDmy_correctDate_success() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nixonwidjaja"},"content":" assertEquals(\"12 Dec 2023\", Parser.convertToDmy(\"2023-12-12\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nixonwidjaja"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nixonwidjaja"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nixonwidjaja"},"content":" public void convertToDmy_invalidDate_fail() {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nixonwidjaja"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nixonwidjaja"},"content":" Parser.convertToDmy(\"lol\");","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nixonwidjaja"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nixonwidjaja"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nixonwidjaja"},"content":" assertEquals(invalidDate, e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nixonwidjaja":36}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":" private ToDo task \u003d new ToDo(\"task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":" public void createToDo_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":" assertEquals(\"[T][ ] task\", task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":" public void markToDo_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":" task.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":" assertEquals(\"[T][X] task\", task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nixonwidjaja":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nixonwidjaja"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"nixonwidjaja"},"content":"todo todo1 ","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"nixonwidjaja"},"content":"todo do cs2103","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"nixonwidjaja"},"content":"todo","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"nixonwidjaja"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"nixonwidjaja"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"nixonwidjaja"},"content":"deadline return book /by 2023-08-29","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"nixonwidjaja"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"nixonwidjaja"},"content":"deadline","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"nixonwidjaja"},"content":"mark 2","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"nixonwidjaja"},"content":"mark 4","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"nixonwidjaja"},"content":"mark 0","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"nixonwidjaja"},"content":"unmark 100","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"nixonwidjaja"},"content":"unmark 2","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"nixonwidjaja"},"content":"delete -1","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"nixonwidjaja"},"content":"delete 10","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"nixonwidjaja"},"content":"delete 3","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"nixonwidjaja"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"nixonwidjaja"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"nixonwidjaja":19}}] diff --git a/nixonwidjaja_ip_master/commits.json b/nixonwidjaja_ip_master/commits.json index 8b29e1d5..13bfb5df 100644 --- a/nixonwidjaja_ip_master/commits.json +++ b/nixonwidjaja_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"nixonwidjaja":[{"date":"2023-08-19","commitResults":[{"hash":"2401621fc74ca2115f1b0e915778d736a49ff6a9","isMergeCommit":false,"messageTitle":"Rename, add greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":10}}},{"hash":"2033d7c691219dfbabcde88a2d22af03c03d9673","isMergeCommit":false,"messageTitle":"Add echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":3}}},{"hash":"d1c250a00e94683e1e98fa12c4995da8cbef7ff7","isMergeCommit":false,"messageTitle":"Add tasks and list command","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}},{"hash":"2d184017cb70c32f3d84b6cc9dc29fa92778c045","isMergeCommit":false,"messageTitle":"Add Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":5}}},{"hash":"60ba3e45cf1767fa48e8d2f17e897e65b02e0e87","isMergeCommit":false,"messageTitle":"Add todo, events, deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":10}}},{"hash":"8328fbcd4ca662938f1972223d6590f7d6b78869","isMergeCommit":false,"messageTitle":"Add DukeException and handle errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":32}}},{"hash":"17b07a0d4bd511613de2b3e8d239ccaf14d356e8","isMergeCommit":false,"messageTitle":"Delete task","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"610a2812a3fbc58e58c573547dfc9405b1e831df","isMergeCommit":false,"messageTitle":"Try Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":18,"deletions":0},"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"81651ad1cc2cf26528d50360f287ff23fc107094","isMergeCommit":false,"messageTitle":"Add file handler to save task list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":0}}},{"hash":"de719fafeffae9ecaf77ac3407e29ff47a667fd0","isMergeCommit":true,"messageTitle":"Merge pull request #1 from nixonwidjaja/branch-Level-7","messageBody":"Level-7","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"57c9b0c70eb146156810dda265493a390a1ba643","isMergeCommit":false,"messageTitle":"Enforce local date to deadline","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":21,"deletions":9}}},{"hash":"8016e5bf4fe9a81538069af052f4082391b2b9b7","isMergeCommit":true,"messageTitle":"Merge pull request #2 from nixonwidjaja/branch-Level-8","messageBody":"Enforce local date to deadline","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"331261a1378b18d5c7b30558694fc79a641d09e9","isMergeCommit":false,"messageTitle":"Enforce LocalDate on event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":13}}},{"hash":"7b13d970723c5965d6b2cadfafcc76e010f9b5a3","isMergeCommit":false,"messageTitle":"Fix bug preserve mark on file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":12}}},{"hash":"b44c9e2706ed7d1ce5e55e6c746ae3f71aef7919","isMergeCommit":false,"messageTitle":"Stretch goal: Print events on specific date","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":17}}},{"hash":"007ea08ca9d528de9be4a2112ad35585d1960ee1","isMergeCommit":false,"messageTitle":"Extract out Ui, Storage, Parser, TaskList","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":334,"deletions":261}}},{"hash":"926807334034d25222ff10095d50a682eceed85c","isMergeCommit":false,"messageTitle":"Move queryList to Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":11}}},{"hash":"94faf233a132d4a42ae96743d1d22daa2437a86f","isMergeCommit":false,"messageTitle":"Organize into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":37}}},{"hash":"046ffeb0354db29445e4a45f55c7757389883a6b","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into add-packages","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"af4aa6658527534f8c3f1633783475984c02819c","isMergeCommit":false,"messageTitle":"Setup Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"565e78019e1be691f365948929677f0236d3aceb","isMergeCommit":true,"messageTitle":"Merge pull request #3 from nixonwidjaja/add-packages","messageBody":"Organize into packages and setup Gradle","tags":["A-Packages","A-Gradle","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"e42954267f6037390b5429df56d7c827242c6289","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":3}}}]},{"date":"2023-08-31","commitResults":[{"hash":"854971092526d224a4eba17edbf702bad6a472f0","isMergeCommit":false,"messageTitle":"Fix directories","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"7eb3970161c84aa60237cebd08d36c89e9fcd69c","isMergeCommit":true,"messageTitle":"Merge pull request #4 from nixonwidjaja/branch-Level-9","messageBody":"Fix directories","fileTypesAndContributionMap":{}},{"hash":"36529ef9074cbb5da9e20785a9cb035f81e73ffd","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":3}}},{"hash":"ddd6631b72010b7f4ef5f1684d5c18140556bf0d","isMergeCommit":true,"messageTitle":"Merge pull request #5 from nixonwidjaja/branch-A-JavaDoc","messageBody":"Add JavaDoc","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"e2cdeff31e8b01981576c74cdeb6ec9a0885fe68","isMergeCommit":false,"messageTitle":"Add JavaDoc for classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"882f74419137277548dbd4288cf0ab3a0c31351e","isMergeCommit":true,"messageTitle":"Merge pull request #6 from nixonwidjaja/branch-A-CodingStandard","messageBody":"Add JavaDoc for classes","fileTypesAndContributionMap":{}},{"hash":"cbca474cab65f0f9f91bcb593527df63d77b1124","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"74edb218929a118a0cf4508e5df0ba608a71879d","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":23,"deletions":20}}},{"hash":"be11d0a411aab0b84d57d2a8c39d4717bd1b1468","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"nixonwidjaja":{"java":860,"md":22,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":19}},"authorContributionVariance":{"nixonwidjaja":54637.69},"authorDisplayNameMap":{"nixonwidjaja":"CS2103-F13-2 NIXO..JAJA"}} +{"authorDailyContributionsMap":{"nixonwidjaja":[{"date":"2023-08-19","commitResults":[{"hash":"2401621fc74ca2115f1b0e915778d736a49ff6a9","isMergeCommit":false,"messageTitle":"Rename, add greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":10}}},{"hash":"2033d7c691219dfbabcde88a2d22af03c03d9673","isMergeCommit":false,"messageTitle":"Add echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":3}}},{"hash":"d1c250a00e94683e1e98fa12c4995da8cbef7ff7","isMergeCommit":false,"messageTitle":"Add tasks and list command","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}},{"hash":"2d184017cb70c32f3d84b6cc9dc29fa92778c045","isMergeCommit":false,"messageTitle":"Add Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":5}}},{"hash":"60ba3e45cf1767fa48e8d2f17e897e65b02e0e87","isMergeCommit":false,"messageTitle":"Add todo, events, deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":10}}},{"hash":"8328fbcd4ca662938f1972223d6590f7d6b78869","isMergeCommit":false,"messageTitle":"Add DukeException and handle errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":32}}},{"hash":"17b07a0d4bd511613de2b3e8d239ccaf14d356e8","isMergeCommit":false,"messageTitle":"Delete task","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"610a2812a3fbc58e58c573547dfc9405b1e831df","isMergeCommit":false,"messageTitle":"Try Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":18,"deletions":0},"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"81651ad1cc2cf26528d50360f287ff23fc107094","isMergeCommit":false,"messageTitle":"Add file handler to save task list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":0}}},{"hash":"de719fafeffae9ecaf77ac3407e29ff47a667fd0","isMergeCommit":true,"messageTitle":"Merge pull request #1 from nixonwidjaja/branch-Level-7","messageBody":"Level-7","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"57c9b0c70eb146156810dda265493a390a1ba643","isMergeCommit":false,"messageTitle":"Enforce local date to deadline","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":21,"deletions":9}}},{"hash":"8016e5bf4fe9a81538069af052f4082391b2b9b7","isMergeCommit":true,"messageTitle":"Merge pull request #2 from nixonwidjaja/branch-Level-8","messageBody":"Enforce local date to deadline","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"331261a1378b18d5c7b30558694fc79a641d09e9","isMergeCommit":false,"messageTitle":"Enforce LocalDate on event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":13}}},{"hash":"7b13d970723c5965d6b2cadfafcc76e010f9b5a3","isMergeCommit":false,"messageTitle":"Fix bug preserve mark on file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":12}}},{"hash":"b44c9e2706ed7d1ce5e55e6c746ae3f71aef7919","isMergeCommit":false,"messageTitle":"Stretch goal: Print events on specific date","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":17}}},{"hash":"007ea08ca9d528de9be4a2112ad35585d1960ee1","isMergeCommit":false,"messageTitle":"Extract out Ui, Storage, Parser, TaskList","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":334,"deletions":261}}},{"hash":"926807334034d25222ff10095d50a682eceed85c","isMergeCommit":false,"messageTitle":"Move queryList to Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":11}}},{"hash":"94faf233a132d4a42ae96743d1d22daa2437a86f","isMergeCommit":false,"messageTitle":"Organize into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":37}}},{"hash":"046ffeb0354db29445e4a45f55c7757389883a6b","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into add-packages","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"af4aa6658527534f8c3f1633783475984c02819c","isMergeCommit":false,"messageTitle":"Setup Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"565e78019e1be691f365948929677f0236d3aceb","isMergeCommit":true,"messageTitle":"Merge pull request #3 from nixonwidjaja/add-packages","messageBody":"Organize into packages and setup Gradle","tags":["A-Packages","A-Gradle","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"e42954267f6037390b5429df56d7c827242c6289","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":3}}}]},{"date":"2023-08-31","commitResults":[{"hash":"854971092526d224a4eba17edbf702bad6a472f0","isMergeCommit":false,"messageTitle":"Fix directories","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"7eb3970161c84aa60237cebd08d36c89e9fcd69c","isMergeCommit":true,"messageTitle":"Merge pull request #4 from nixonwidjaja/branch-Level-9","messageBody":"Fix directories","fileTypesAndContributionMap":{}},{"hash":"36529ef9074cbb5da9e20785a9cb035f81e73ffd","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":3}}},{"hash":"ddd6631b72010b7f4ef5f1684d5c18140556bf0d","isMergeCommit":true,"messageTitle":"Merge pull request #5 from nixonwidjaja/branch-A-JavaDoc","messageBody":"Add JavaDoc","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"e2cdeff31e8b01981576c74cdeb6ec9a0885fe68","isMergeCommit":false,"messageTitle":"Add JavaDoc for classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"882f74419137277548dbd4288cf0ab3a0c31351e","isMergeCommit":true,"messageTitle":"Merge pull request #6 from nixonwidjaja/branch-A-CodingStandard","messageBody":"Add JavaDoc for classes","fileTypesAndContributionMap":{}},{"hash":"cbca474cab65f0f9f91bcb593527df63d77b1124","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"74edb218929a118a0cf4508e5df0ba608a71879d","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":23,"deletions":20}}},{"hash":"be11d0a411aab0b84d57d2a8c39d4717bd1b1468","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"038250cce10539117933bb61dff1b30e97a8f68e","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":108,"deletions":58}}},{"hash":"f830caa16cb281c418a31069867117111a9f8d0b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/nixonwidjaja/ip","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"667bdd7401f98ec220fc8fa943fb975cedf92ec0","isMergeCommit":false,"messageTitle":"Refactor logic to Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":307,"deletions":95}}}]}]},"authorFileTypeContributionMap":{"nixonwidjaja":{"java":1122,"md":22,"fxml":0,"sh":0,"bat":0,"gradle":6,"txt":19}},"authorContributionVariance":{"nixonwidjaja":68462.2},"authorDisplayNameMap":{"nixonwidjaja":"CS2103-F13-2 NIXO..JAJA"}} diff --git a/nknguyenhc_ip_master/authorship.json b/nknguyenhc_ip_master/authorship.json index 437504ec..29345c21 100644 --- a/nknguyenhc_ip_master/authorship.json +++ b/nknguyenhc_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":"nknguyenhc"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"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":{"nknguyenhc":1,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" * Main class, where the user interacts with the bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" * The bot accesses the storage through the Storage class,","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" * standard in and out through the UI class,","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" * manage the current task list through the TaskList class.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" private final String MY_NAME \u003d \"Quack-NKN\";","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" private TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" private final Storage STORAGE \u003d new Storage(\"task-list.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" private final UI USER_INTERFACE \u003d new UI(\"Quack, \", \"!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * Instantiate the bot, and starts the interaction immediately.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" public Duke() {","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" interact();","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" * Invoked at the start before interaction.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" * Reads data from file and save to the list of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" * If file is corrupted, the exception thrown from Storage instance is thrown.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" * If there is IO error, handle the exception gracefully,","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" * and continue with an empty task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" private void readFromDisk() throws Storage.FileCorruptedException {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyDataLoading();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e taskList \u003d this.STORAGE.readFromDisk();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" this.taskList \u003d new TaskList(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyDataLoaded();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" } catch (Storage.FileIOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyLoadingIOError();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" * Leaves an exit message.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" public void exit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.exit();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" * Main programme to allow user to input and respond accordingly.","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" * Available commands:","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" * - bye/exit: to exit the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" * - list: to list out the current task list","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" * - list {date}: to list out all events happening on that date or deadlines before/on that date","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" * - list {todo/deadline/event}: list out all todo items / deadline items / event items","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" * - list -d: list out all tasks not done","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" * - mark {number}: to mark the task with the corresponding index in the list as done","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" * - unmark {number}: to mark the task with the corresponding index in the list as not done","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" * - todo {taskname}: to add a new task as a to-do item (no deadline or time)","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" * - event {taskname} /from {starttime} /to {endtime}: to add a new task as an event (with start time and end time)","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" * - deadline {taskname} /by {time}: to add a new task as a deadline (with deadline time)","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" * Note that for list, a combination of options can be used, by separating them by space characters.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" * If there is an error in the input from user, notify the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" * Datetime format: \"{date} {time}\"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" * Date format: either \"today\", \"tmr\", \"tomorrow\", or DD/MM/YYYY","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" * Time format: either \"{HH:MM}\", \"{HH}am\", \"{HH}pm\", \"{HH:MM}am\" or \"{HH:MM}pm\"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" private void interact() {","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" this.readFromDisk();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" } catch (Storage.FileCorruptedException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" boolean isContinuing \u003d this.USER_INTERFACE.handleFileCorrupted();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" if (!isContinuing) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" return;","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.start(this.MY_NAME);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" boolean isContinuing \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" while (isContinuing) {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" // receive input","lastModifiedDate":"2023-08-22"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" String input \u003d this.USER_INTERFACE.takeInput(\"In: \");","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" isContinuing \u003d command.execute(this);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" * Shows the list of task to the user, with the options included.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" * This does not filter task type (todo/deadline/event)","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" * @param date date to display the deadlines before and events happening on,","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" * null if to not exclude any task by date","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" public void showList(boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyList(UI.Type.DEFAULT, isExcludingDone, date);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.displayTasks(isExcludingDone, date);","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" * Shows all to-do tasks with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" public void showTodos(boolean isExcludingDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyList(UI.Type.TODO, isExcludingDone, null);","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.displayTodos(isExcludingDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" * Shows all deadlines with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date to display deadlines before","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":" public void showDeadlines(boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyList(UI.Type.DEADLINE, isExcludingDone, date);","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.displayDeadlines(isExcludingDone, date);","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" * Shows all events with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date to display events happening on","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" public void showEvents(boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyList(UI.Type.EVENT, isExcludingDone, date);","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.displayEvents(isExcludingDone, date);","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" * Adds a task to","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":" * @param task","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":" public void addTaskToList(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyAdded(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.showTaskCount(this.taskList.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":151,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":152,"author":{"gitId":"nknguyenhc"},"content":" * Mark a task with corresponding index as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"nknguyenhc"},"content":" * Handles the case where task index is out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"nknguyenhc"},"content":" * @param index the index of task to remove","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":" Task task \u003d this.taskList.markTaskAsDone(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyMarkDone(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"nknguyenhc"},"content":" } catch (TaskList.TaskIndexOutOfRange e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyError(\"invalid task index\");","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":165,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":166,"author":{"gitId":"nknguyenhc"},"content":" * Mark a task with corresponding index as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"nknguyenhc"},"content":" * Handles the case where task index is out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"nknguyenhc"},"content":" * @param index the index of task to remove","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":170,"author":{"gitId":"nknguyenhc"},"content":" public void markTaskAsNotDone(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"nknguyenhc"},"content":" Task task \u003d this.taskList.markTaskAsNotDone(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyMarkNotDone(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"nknguyenhc"},"content":" } catch (TaskList.TaskIndexOutOfRange e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyError(\"invalid task index\");","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":178,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":179,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" * Delete the task with the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":" * Handles the case where the task index is out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"nknguyenhc"},"content":" * @param index the index of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":184,"author":{"gitId":"nknguyenhc"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"nknguyenhc"},"content":" Task taskDeleted \u003d this.taskList.deleteTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyRemoved(taskDeleted);","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"nknguyenhc"},"content":" } catch (TaskList.TaskIndexOutOfRange e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyError(\"invalid task index\");","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":192,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":193,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"nknguyenhc"},"content":" * Save data to hard disk, with the current task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":195,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"nknguyenhc"},"content":" public void saveData() {","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyDataSaving();","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":199,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.saveData(this.STORAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyDataSaved();","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"nknguyenhc"},"content":" } catch (Storage.FileIOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyError(\"an error has occurred while writing to hard disk\");","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":204,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":205,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":206,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":207,"author":{"gitId":"nknguyenhc"},"content":" * Echo command back to the user.","lastModifiedDate":"2023-08-23"},{"lineNumber":208,"author":{"gitId":"nknguyenhc"},"content":" * @param input the input from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":210,"author":{"gitId":"nknguyenhc"},"content":" public void echo(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.echo(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":213,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":214,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"nknguyenhc"},"content":" * Finds a task based on the command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"nknguyenhc"},"content":" * @param input the input from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"nknguyenhc"},"content":" public void find(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"nknguyenhc"},"content":" this.USER_INTERFACE.notifyFind(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.showResults(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"nknguyenhc"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-22"},{"lineNumber":224,"author":{"gitId":"nknguyenhc"},"content":" new Duke();","lastModifiedDate":"2023-08-22"},{"lineNumber":225,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":226,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"nknguyenhc":224,"-":2}},{"path":"src/main/java/duke/parse/DateTimeManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" * Contains methods to deal with datetime,","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * including methods to convert java date and time to readable string and string for storage,","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" * and vice versa.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"public class DateTimeManager {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" public static class DateParseException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" private DateParseException() {}","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" * Transforms a String input of datetime to a LocalDateTime instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" * The string must be in the format \"dd/mm/yyyy hh:mm\"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" * @param input the input string","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" * @return the LocalDateTime object that corresponds to the input string","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" * @throws DateParseException if the input string is in a wrong format","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" public static LocalDateTime inputToDate(String input) throws DateParseException {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" String[] splitBySpace \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" if (splitBySpace.length !\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" LocalDate date \u003d DateTimeManager.parseDate(splitBySpace[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" LocalTime time \u003d DateTimeManager.parseTime(splitBySpace[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" return LocalDateTime.of(date, time);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" * Parses the string and return a LocalDate instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" * @param input the raw string","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" * @return the LocalDate instance that corresponds to the input","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" * @throws DateParseException when the input string cannot be parsed properly","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" public static LocalDate parseDate(String input) throws DateParseException {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" String[] dateData \u003d input.split(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" if (dateData.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" switch (dateData[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" case \"today\":","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" return LocalDate.now();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" case \"tomorrow\":","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" case \"tmr\":","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" return LocalDate.now().plusDays(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" } else if (dateData.length \u003d\u003d 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" for (String data : dateData) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" if (data.matches(\"0+\") || !data.matches(\"\\\\d+\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" return LocalDate.of(","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" Integer.parseInt(dateData[2]),","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" Integer.parseInt(dateData[1]),","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" Integer.parseInt(dateData[0])","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" * Reads the given input indicating a time and return a LocalTime instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" * @param input the raw input string","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" * @return the LocalTime instance that corresponds to the string","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" * @throws DateParseException when the string cannot be parsed properly to interpret a time","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" public static LocalTime parseTime(String input) throws DateParseException {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" String possibleAmPm \u003d input.substring(input.length() - 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" boolean isPm \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" boolean isAm \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" if (possibleAmPm.equals(\"am\") || possibleAmPm.equals(\"pm\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" if (possibleAmPm.equals(\"pm\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" isPm \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" } if (possibleAmPm.equals(\"am\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" isAm \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" input \u003d input.substring(0, input.length() - 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" String[] timeData \u003d input.split(\":\");","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" if (timeData.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" if (!timeData[0].matches(\"\\\\d+\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" int hour \u003d Integer.parseInt(timeData[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" return LocalTime.of(","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" (hour \u003d\u003d 12 ? (isAm ? 0 : isPm ? 0 : 12) : hour) + (isPm ? 12 : 0),","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" 0","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" } else if (timeData.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" for (String data : timeData) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" if (!data.matches(\"\\\\d+\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" int hour \u003d Integer.parseInt(timeData[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" return LocalTime.of(","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" (hour \u003d\u003d 12 ? (isAm ? 0 : isPm ? 0 : 12) : hour) + (isPm ? 12 : 0),","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" Integer.parseInt(timeData[1])","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" * Converts the given datetime to string for storage","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" * @param dateTime the instance of LocalDateTime to convert","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" * @return the string containing the data of the datetime","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" public static String dateToStringData(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" return DateTimeManager.dateToStringData(dateTime.toLocalDate()) + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" + DateTimeManager.timeDataFrom(dateTime.toLocalTime());","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" * Converts the given date to string data for storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" * @param date the instance of LocalDate to convert","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":" * @return the string containing data of the date","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" public static String dateToStringData(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":" return date.getDayOfMonth() + \"/\"","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":" + date.getMonthValue() + \"/\"","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":" + date.getYear();","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" * Converts the given time to string data for storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":" * @param time the instance of LocalTime to convert","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"nknguyenhc"},"content":" * @return the string containing the data of the time","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"nknguyenhc"},"content":" public static String timeDataFrom(LocalTime time) {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"nknguyenhc"},"content":" return time.getHour() + \":\" + time.getMinute();","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":" * Converts a datetime to readable form, for display in UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"nknguyenhc"},"content":" * @param dateTime the instance of LocalDateTime to display","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"nknguyenhc"},"content":" * @return the string representing the datetime to be displayed","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" public static String dateToDisplay(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"nknguyenhc"},"content":" return DateTimeManager.dateToDisplay(dateTime.toLocalDate()) + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":" + DateTimeManager.timeDisplayFrom(dateTime.toLocalTime());","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"nknguyenhc"},"content":" * Converts the date given to readable form, for display in UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"nknguyenhc"},"content":" * @param date the instance of LocalDate to display","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"nknguyenhc"},"content":" * @return the string representing the date to be displayed","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"nknguyenhc"},"content":" public static String dateToDisplay(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"nknguyenhc"},"content":" if (date.equals(LocalDate.now())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"nknguyenhc"},"content":" return \"today\";","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"nknguyenhc"},"content":" } else if (date.equals(LocalDate.now().plusDays(1))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"nknguyenhc"},"content":" return \"tomorrow\";","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"nknguyenhc"},"content":" return dateToStringData(date);","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"nknguyenhc"},"content":" * Converts the time to readable form, for display in UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"nknguyenhc"},"content":" * @param time the instance of LocalTime to convert","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"nknguyenhc"},"content":" * @return the string representing the time to be displayed","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"nknguyenhc"},"content":" public static String timeDisplayFrom(LocalTime time) {","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"nknguyenhc"},"content":" if (time.getHour() \u003c 12) {","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"nknguyenhc"},"content":" return (time.getHour() \u003d\u003d 0","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"nknguyenhc"},"content":" ? \"12\"","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"nknguyenhc"},"content":" : DateTimeManager.twoDecimalPlaces(time.getHour())","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"nknguyenhc"},"content":" ) + \":\" + DateTimeManager.twoDecimalPlaces(time.getMinute()) + \"am\";","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"nknguyenhc"},"content":" return (time.getHour() \u003d\u003d 12","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"nknguyenhc"},"content":" ? \"12\"","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"nknguyenhc"},"content":" : DateTimeManager.twoDecimalPlaces(time.getHour() - 12)","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"nknguyenhc"},"content":" ) + \":\" + DateTimeManager.twoDecimalPlaces(time.getMinute()) + \"pm\";","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"nknguyenhc"},"content":" private static String twoDecimalPlaces(int number) {","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"nknguyenhc"},"content":" return number \u003c 10 ? \"0\" + number : Integer.toString(number);","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nknguyenhc":204}},{"path":"src/main/java/duke/parse/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.EchoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.EmptyCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.SaveCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" * Deals with parsing input from user.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * Thrown when the input from user cannot be parsed properly.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" public static class ParseError extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" private ParseError(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" * Parse a given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" * Available commands:","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" * - bye/exit: to exit the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" * - list: to list out the current task list","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" * - list {date}: to list out all events happening on that date or deadlines before/on that date","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" * - list {todo/deadline/event}: list out all todo items / deadline items / event items","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" * - list -d: list out all tasks not done","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" * - mark {number}: to mark the task with the corresponding index in the list as done","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" * - unmark {number}: to mark the task with the corresponding index in the list as not done","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" * - todo {taskname}: to add a new task as a to-do item (no deadline or time)","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" * - event {taskname} /from {starttime} /to {endtime}: to add a new task as an event (with start time and end time)","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" * - deadline {taskname} /by {time}: to add a new task as a deadline (with deadline time)","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" * Note that for list, a combination of options can be used, by separating them by space characters.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" * @param input the input from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" * @return the command to be executed on the bot","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" * @throws ParseError when the input cannot be properly interpreted","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" public static Command parse(String input) throws ParseError {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" String[] commandArgs \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" switch (commandArgs[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" case \"\":","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" return new EmptyCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" case \"exit\":","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" // show list","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" if (commandArgs.length !\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" String[] args \u003d commandArgs[1].split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" boolean isExcludingDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" LocalDate date \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" for (String arg: args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" switch (arg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" case \"-d\":","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" isExcludingDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" date \u003d DateTimeManager.parseDate(arg);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"unrecognised \\\"\" + arg + \"\\\"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" switch (args[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" return new ListCommand(isExcludingDone, date, ListCommand.Type.TODO);","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" return new ListCommand(isExcludingDone, date, ListCommand.Type.DEADLINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" return new ListCommand(isExcludingDone, date, ListCommand.Type.EVENT);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" return new ListCommand(isExcludingDone, date, ListCommand.Type.DEFAULT);","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" return new ListCommand(false, null, ListCommand.Type.DEFAULT);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" // mark as done","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" index \u003d Parser.getTaskIndexFromCommand(commandArgs);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" return new MarkCommand(true, index);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" // mark as not done","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" index \u003d Parser.getTaskIndexFromCommand(commandArgs);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" return new MarkCommand(false, index);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" // add to-do","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" if (commandArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"no to-do task provided\");","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" if (commandArgs[1].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"empty to-do task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" return new AddCommand(new ToDo(commandArgs[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":" // add event","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" // number of arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" if (commandArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"no event provided\");","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" // /from keyword","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" String[] separateByFrom \u003d commandArgs[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" // no empty event","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" if (separateByFrom[0].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"empty event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" // /from keyword must exist","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" if (separateByFrom.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"keyword \u0027/from\u0027 not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" // /to keyword","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" String[] separateByTo \u003d separateByFrom[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":" // no empty start time","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" if (separateByTo[0].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"empty start time\");","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":" // /to keyword must exist","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":" if (separateByTo.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"keyword \u0027/to\u0027 not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" // no empty end time","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" if (separateByTo[1].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"empty end time\");","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime startTime \u003d DateTimeManager.inputToDate(separateByTo[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime endTime \u003d DateTimeManager.inputToDate(separateByTo[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":" return new AddCommand(new Event(separateByFrom[0], startTime, endTime));","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"invalid datetime\");","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" // add deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"nknguyenhc"},"content":" // number of arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":" if (commandArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"no deadline found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"nknguyenhc"},"content":" String[] separateByBy \u003d commandArgs[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"nknguyenhc"},"content":" // /by keyword must exist","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"nknguyenhc"},"content":" if (separateByBy.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"keyword \u0027/by\u0027 not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"nknguyenhc"},"content":" // no empty deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"nknguyenhc"},"content":" if (separateByBy[0].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"empty deadline task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"nknguyenhc"},"content":" // no empty end time","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"nknguyenhc"},"content":" if (separateByBy[1].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"empty deadline time\");","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime dateTime \u003d DateTimeManager.inputToDate(separateByBy[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"nknguyenhc"},"content":" return new AddCommand(new Deadline(separateByBy[0], dateTime));","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"invalid datetime\");","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"nknguyenhc"},"content":" // delete task","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"nknguyenhc"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"nknguyenhc"},"content":" index \u003d getTaskIndexFromCommand(commandArgs);","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"nknguyenhc"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"nknguyenhc"},"content":" // save data to hard disk","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"nknguyenhc"},"content":" case \"save\":","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"nknguyenhc"},"content":" return new SaveCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"nknguyenhc"},"content":" // find task containing given description","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"nknguyenhc"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"nknguyenhc"},"content":" String query \u003d commandArgs[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"nknguyenhc"},"content":" return new FindCommand(query);","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"nknguyenhc"},"content":" // anything else","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"nknguyenhc"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"nknguyenhc"},"content":" return new EchoCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"nknguyenhc"},"content":" private static int getTaskIndexFromCommand(String[] commandArgs) throws ParseError {","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"nknguyenhc"},"content":" // check for number of arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"nknguyenhc"},"content":" if (commandArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"you have provided wrong number of arguments!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"nknguyenhc"},"content":" // check if second argument is positive integer","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"nknguyenhc"},"content":" String indexString \u003d commandArgs[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"nknguyenhc"},"content":" if (indexString.matches(\"0+\") || !indexString.matches(\"\\\\d+\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"you need to provide a positive integer!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"nknguyenhc"},"content":" return Integer.parseInt(indexString) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":223}},{"path":"src/main/java/duke/parse/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" * Represents a command to add a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"public class AddCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" private Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates a command to add the given task","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" * @param task the task to add","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" * Commands the bot to add the task to its list.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to add the task","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as it allows the user to continue the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" bot.addTaskToList(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this command is the same as another, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" * It is equal if the tasks to be added are the same.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare against","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this command is the same as another","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof AddCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" AddCommand anotherAdd \u003d (AddCommand) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" return this.task.equals(anotherAdd.task);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":45}},{"path":"src/main/java/duke/parse/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represents a parsed command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" * The base class for a command, to be implemented by other classes.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"public interface Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" * Executes the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" * @return whether the execution allows the program to continue,","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" * true if it can, false means the program must exit","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" boolean execute(Duke bot);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":16}},{"path":"src/main/java/duke/parse/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represents a command to delete the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates the command to delete the task with the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" * @param taskIndex the index of the task to be deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" * Commands the bot to delete the task with the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute the command","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as this allows the user to continue the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" bot.deleteTask(this.taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this delete command is the same as another command, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" * It is equal if the tasks to be deleted are the same.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this delete command is the same as another","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof DeleteCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" DeleteCommand anotherDelete \u003d (DeleteCommand) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" return this.taskIndex \u003d\u003d anotherDelete.taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":44}},{"path":"src/main/java/duke/parse/command/EchoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represents a command to echo the input from user back to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"public class EchoCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" private String command;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates the echo command with the given input from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" * @param command the input from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" public EchoCommand(String command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" * Commands the bot to echo the input back to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute the command","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as it allows the user to continue the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" bot.echo(this.command);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this echo command is the same as another command, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" * They are the same if the input from user is the same.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" * @param another","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" * @return","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof EchoCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" EchoCommand anotherEcho \u003d (EchoCommand) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" return this.command.equals(anotherEcho.command);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":44}},{"path":"src/main/java/duke/parse/command/EmptyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represents an empty command.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"public class EmptyCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates an empty command.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" public EmptyCommand() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" * Does nothing","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute the command","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as the user can continue with the programme afterwards","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" * Checks if this empty command is the same as another.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * They are the same as long as both are empty commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as this allows the user to continue with the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" return another instanceof EmptyCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":34}},{"path":"src/main/java/duke/parse/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represents an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"public class ExitCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" public ExitCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" * Commands the bot to exit the interaction.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute the command","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" * @return false, as this means the user will be exited out of the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" bot.exit();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this exit command is the same as another, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" * They are the same as long as the other object is also an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this exit command is the same as another","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" return another instanceof ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":36}},{"path":"src/main/java/duke/parse/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" private String query;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates a find command with the given query.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * @param query the search parameter","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" public FindCommand(String query) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" this.query \u003d query;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" * Commands the bot to find the tasks matching the query.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute the command","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as it allows the user to continue the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" bot.find(this.query);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":26}},{"path":"src/main/java/duke/parse/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":" * Represents a list command.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" * Contains the filters as requested by user.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * Filters include: whether to exclude tasks done, date to match tasks, and type of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" private boolean isExcludingDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" private LocalDate date;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" private Type type;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" public enum Type {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" TODO,","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" DEADLINE,","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" EVENT,","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" DEFAULT,","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates a list task with the given filter","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date to filter in deadlines before / events happening on,","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" * null if not filtering by date","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" * @param type the type of task to include,","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" * DEFAULT if not filtering by task type","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" public ListCommand(boolean isExcludingDone, LocalDate date, Type type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" this.isExcludingDone \u003d isExcludingDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" * Commands the bot to list out the task with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute the command","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as this allows the user to continue with the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" switch (this.type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" bot.showTodos(this.isExcludingDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" bot.showDeadlines(this.isExcludingDone, this.date);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" bot.showEvents(this.isExcludingDone, this.date);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" case DEFAULT:","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" bot.showList(this.isExcludingDone, this.date);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this list command is the same as another, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" * True if both are list commands, and the filters are the same.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this list command is the same as another","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof ListCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" ListCommand anotherList \u003d (ListCommand) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" return this.isExcludingDone \u003d\u003d anotherList.isExcludingDone","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 ((this.date \u003d\u003d null \u0026\u0026 anotherList.date \u003d\u003d null)","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" || this.date.equals(anotherList.date))","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 this.type.equals(anotherList.type);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":79}},{"path":"src/main/java/duke/parse/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represents a command to mark a task as done / not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"public class MarkCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" private int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates the mark command","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" * @param isDone whether the target task should be mark done,","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" * true if it is, false if to be marked not done","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" * @param index the index of the task in the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" public MarkCommand(boolean isDone, int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" * Commands the bot to list out the tasks with the given filters","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute this command","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as this allows the user to continue the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" bot.markTaskAsDone(this.index);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" bot.markTaskAsNotDone(this.index);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this mark command is the same as another, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" * They are the same if both are to mark the same task,","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" * and both mark the task in the same way (done / not done).","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare against","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this mark command is the same as another","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof MarkCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" MarkCommand anotherMark \u003d (MarkCommand) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" return this.isDone \u003d\u003d anotherMark.isDone","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 this.index \u003d\u003d anotherMark.index;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":54}},{"path":"src/main/java/duke/parse/command/SaveCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represents a command to save data to disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"public class SaveCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates a save command.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" public SaveCommand() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" * Command the bot to save its current data to disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute the command","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as it allows user to continue with the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" bot.saveData();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this save command is the same as another, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" * It is the same as long as the other is also a save command.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this save command is the same as another","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" return another instanceof SaveCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":35}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.DateTimeManager;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" * Handles access to the storage, both read and write.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" * Thrown when the file is found to be corrupted, and data cannot be read properly.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" public class FileCorruptedException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" public FileCorruptedException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" * Thrown where there is an IO error.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" public class FileIOException extends IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" public FileIOException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" private String fileName;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates a storage that monitors a file with the given file name.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" * @param fileName the file name to monitor","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" public Storage(String fileName) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" this.fileName \u003d fileName;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" * Reads data from disk and return a list of task recorded.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" * @return the list of task in order","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" * @throws FileCorruptedException when file is corrupted","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" * @throws FileIOException when there is an IO error","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" public ArrayList\u003cTask\u003e readFromDisk() throws FileCorruptedException, FileIOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" File f \u003d new File(this.fileName);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" Scanner fileScanner \u003d new Scanner(f);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" while (fileScanner.hasNext()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" String[] line \u003d fileScanner.nextLine().split(\" \", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" if (line.length \u003d\u003d 0 \u0026\u0026 !fileScanner.hasNext()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" if (line.length !\u003d 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" switch (line[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" task \u003d new ToDo(line[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" String[] split \u003d line[2].split(\" /by \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" if (split.length !\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime dateTime \u003d DateTimeManager.inputToDate(split[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" task \u003d new Deadline(split[0], dateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" String[] separateByFrom \u003d line[2].split(\" /from \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" if (separateByFrom.length !\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" String[] separateByTo \u003d separateByFrom[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" if (separateByTo.length !\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime startTime \u003d DateTimeManager.inputToDate(separateByTo[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime endTime \u003d DateTimeManager.inputToDate(separateByTo[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" task \u003d new Event(separateByFrom[0], startTime, endTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" if (line[1].equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" } else if (line[1].equals(\"0\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" fileScanner.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" return taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" } catch (FileNotFoundException fileError) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" } catch (IOException ioError) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" throw new FileIOException();","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" * Save data to disk","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" * @param data the data to save","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" * @throws FileIOException when there is an IO error","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" public void saveData(String data) throws FileIOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" FileWriter writer \u003d new FileWriter(this.fileName);","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" writer.write(data);","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" writer.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" throw new FileIOException();","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nknguyenhc":141}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.DateTimeManager;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" * Represents a deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * A deadline contains an end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates a deadline with the given content and the end time","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" * @param name the content of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" * @param deadline the end time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" public Deadline(String name, LocalDateTime deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * Data representation of the task, to be stored in the disk","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" * @return data representation of the task to be stored in the disk","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" public String data() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" return \"D \" + super.data() + \" /by \" + DateTimeManager.dateToStringData(this.deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this deadline ends before or on the given date.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" * @param date the datetime to check against","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this deadline ends before or on the given date","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" public boolean containsDate(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" return this.deadline.toLocalDate().isBefore(date) || this.deadline.toLocalDate().equals(date);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" * String representation of the task, to be displayed in UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" * @return the string representation of the task to be displayed in UI","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" + DateTimeManager.dateToDisplay(this.deadline) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this deadline is the same as another task, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" * It is the same if content is the same, and end time is the same.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this deadline is the same as another task","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof Deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" Deadline anotherDeadline \u003d (Deadline) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" return super.equals(anotherDeadline)","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 this.deadline.equals(anotherDeadline.deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":69}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.DateTimeManager;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" * A class to represent an event.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * An event has a start time and an end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" private LocalDateTime start;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" private LocalDateTime end;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates an event with the given content, start time and end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" * @param name the content of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" * @param start the start time of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" * @param end the end time of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" public Event(String name, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" * Data representation of the event, to be stored in the disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" * @return data representation of the event to be stored in disk","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" public String data() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" return \"E \" + super.data()","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" + \" /from \" + DateTimeManager.dateToStringData(this.start)","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" + \" /to \" + DateTimeManager.dateToStringData(this.end);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this event is happening on the given date.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" * @param date the datetime to check against","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" * @return whether the event is happening on the given date","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" public boolean containsDate(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" return (this.start.toLocalDate().isBefore(date) || this.start.toLocalDate().equals(date))","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 (this.end.toLocalDate().isAfter(date) || this.end.toLocalDate().equals(date));","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" * String representation of this event, to be printed in UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" * @return string representation of this event to be printed in UI","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" + \" (from: \" + DateTimeManager.dateToDisplay(this.start)","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" + \" to: \" + DateTimeManager.dateToDisplay(this.end) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this event is the same as another task.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" * It is the same if it is the same event, with same content, start and end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this event is the same as another task","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof Event) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" Event anotherEvent \u003d (Event) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" return super.equals(another)","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 this.start.equals(anotherEvent.start)","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 this.end.equals(anotherEvent.end);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":77}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represent a task that the user requested to add.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" * Three possible types of task: todo, deadline and event.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":" * This is a base class, to be inherited.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" private String name;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates the task with the given name.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" * @param name content of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" * Marks the task as having been done.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" * Marks the task as having not been done.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether the task has been done.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" * @return whether the task has been done","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" return this.isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" * Converts the current task to a string that can be stored in the disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" * @return the string to be stored in disk","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" public String data() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" return (this.isDone ? \"1 \" : \"0 \") + this.name;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this task \"contains\" the date.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" * Definition of \"contains\" to be decided by child classes.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" * @param dateTime the datetime to check against","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this task contains the date","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" public boolean containsDate(LocalDate dateTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" * Checks if this task content contains the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" * @param string the input to check against","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this task content contains the input","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" public boolean containsString(String string) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" return this.name.contains(string);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" * String representation of this task, to be printed in UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" * @return the string representation to be printed in UI","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" return \"[\" + (this.isDone ? \"X\" : \" \") + \"] \" + this.name;","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this task is the same as another task, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this task is the same as the given task","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof Task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" Task anotherTask \u003d (Task) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" return this.name.equals(anotherTask.name)","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 this.isDone \u003d\u003d anotherTask.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"nknguyenhc":94}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" * Represents and organises a list of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" * Thrown if a function is trying to access a task index out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" public static class TaskIndexOutOfRange extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" private TaskIndexOutOfRange() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates the task list with no task.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" * Creates a new empty task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates the task list with the given task.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" * @param taskList the task list to start with","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" * Adds a task to the end of the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" * @param task the task to add","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" * Marks a task with the given index as done","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" * @param index the task index to mark done","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" * @return the task that has been marked done","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" * @throws TaskIndexOutOfRange if the task index given is out of range","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" public Task markTaskAsDone(int index) throws TaskIndexOutOfRange {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.get(index).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" return this.taskList.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" throw new TaskIndexOutOfRange();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" * Marks a task with the given index as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" * @param index the task index to mark as not done","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" * @return the task that has been marked not done","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" * @throws TaskIndexOutOfRange if the task index given is out of range","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" public Task markTaskAsNotDone(int index) throws TaskIndexOutOfRange {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.get(index).markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" return this.taskList.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" throw new TaskIndexOutOfRange();","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" * Deletes a task with the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" * @param index the task index to delete","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" * @return the task that has been deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" * @throws TaskIndexOutOfRange if the task index given is out of range","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" public Task deleteTask(int index) throws TaskIndexOutOfRange {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" Task task \u003d this.taskList.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" throw new TaskIndexOutOfRange();","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" * Displays the list of task with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" * @param taskList the task list to display","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date to include deadlines before and events happening on,","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" * null if to not filter by date","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" private static void displayTasks(ArrayList\u003cTask\u003e taskList, boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" if (isExcludingDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" taskList.removeIf(Task::isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" if (date !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" taskList.removeIf(task -\u003e !task.containsDate(date));","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" System.out.println((i + 1) + \". \" + taskList.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" * Displays to-do tasks with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to filter out tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" public void displayTodos(boolean isExcludingDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e taskList \u003d (ArrayList\u003cTask\u003e) this.taskList.clone();","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" taskList.removeIf(task -\u003e !(task instanceof ToDo));","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":" TaskList.displayTasks(taskList, isExcludingDone, null);","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" * Displays deadlines with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to filter out tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date to choose deadlines with end time before,","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":" * null if to not filter by date","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" public void displayDeadlines(boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e taskList \u003d (ArrayList\u003cTask\u003e) this.taskList.clone();","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" taskList.removeIf(task -\u003e !(task instanceof Deadline));","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" TaskList.displayTasks(taskList, isExcludingDone, date);","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" * Displays events with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to filter out tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date to choose events happening on,","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" * null if to not filter by date","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":" public void displayEvents(boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e taskList \u003d (ArrayList\u003cTask\u003e) this.taskList.clone();","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" taskList.removeIf(task -\u003e !(task instanceof Event));","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":" TaskList.displayTasks(taskList, isExcludingDone, date);","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":" * Displays tasks with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" * Assume that there is no filtering by task type (todo/deadline/event)","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date to filter in deadlines before and events happening on","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"nknguyenhc"},"content":" public void displayTasks(boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e taskList \u003d (ArrayList\u003cTask\u003e) this.taskList.clone();","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"nknguyenhc"},"content":" TaskList.displayTasks(taskList, isExcludingDone, date);","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":" * Returns the number of tasks in this task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"nknguyenhc"},"content":" * @return number of tasks in this task list","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" public int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"nknguyenhc"},"content":" * Save data to a given storage,","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"nknguyenhc"},"content":" * by first converting this list of task to storage-readable form.","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"nknguyenhc"},"content":" * @param storage the storage to save data to","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"nknguyenhc"},"content":" * @throws Storage.FileIOException if there is an IO error","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"nknguyenhc"},"content":" public void saveData(Storage storage) throws Storage.FileIOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"nknguyenhc"},"content":" StringBuilder data \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"nknguyenhc"},"content":" for (Task task: this.taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"nknguyenhc"},"content":" data.append(task.data()).append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"nknguyenhc"},"content":" storage.saveData(data.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" * Display the tasks that match the given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":" * @param input the search parameter","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"nknguyenhc"},"content":" public void showResults(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e list \u003d (ArrayList\u003cTask\u003e) this.taskList.clone();","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"nknguyenhc"},"content":" list.removeIf(task -\u003e !task.containsString(input));","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"nknguyenhc"},"content":" TaskList.displayTasks(list, false, null);","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nknguyenhc":188}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":" * Represent a to-do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":" * A to-do task does not have a start or end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates the to-do task with the given content.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * @param name the content of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" * Data representation of this to-do task, to be stored in disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" * @return the string representation of this task in disk","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" public String data() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" return \"T \" + super.data();","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * String representation of this to-do task to be printed in UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" * @return the string representation of this task to be printed in UI","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this to-do task is the same as another task, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this to-do task is the same as the given other task","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof ToDo) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" return super.equals(another);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":46}},{"path":"src/main/java/duke/ui/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.DateTimeManager;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * Deals with standard input and output.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" * Prints out the output and takes in input as requested.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"public class UI {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" private static String HORIZONTAL_LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" private final Scanner SCANNER \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" private final String ERROR_PREPEND;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" private final String ERROR_APPEND;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates a UI, with a string to prepend and a string to append every error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" * @param errorPrepend the string to prepend every error message","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" * @param errorAppend the string to append every error message","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" public UI(String errorPrepend, String errorAppend) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" this.ERROR_PREPEND \u003d errorPrepend;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" this.ERROR_APPEND \u003d errorAppend;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" * Invoked at the start of the interaction, to greet the user,","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" * after data has been loaded / error has been handled.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" * @param name the name of the bot","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" public void start(String name) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(UI.HORIZONTAL_LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" System.out.print(\"Hello from \");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(name);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" * Invoked when data is being loaded.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" public void notifyDataLoading() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(UI.HORIZONTAL_LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Loading data from hard disk ...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" * Invoked when data has been loaded.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" public void notifyDataLoaded() {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Done loading.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" * Invoked when there is an IO error upon loading","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" public void notifyLoadingIOError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Quack, an error has occurred while trying to save data to hard disk.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Starting with an empty task list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" * Notifies that file is corrupted and cannot be loaded,","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" * and ask the user on the course of action to take.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" * @return whether the user has decided to exit the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" public boolean handleFileCorrupted() {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Quack, memory was found to be corrupted!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"What do you wish to do?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"1. Quit, let me restore the data manually\");","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"2. Continue with an empty task list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" while (true) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" String response \u003d this.takeInput(\"Please indicate your option (1/2): \");","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" switch (response) {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" case \"1\":","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" this.exit();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" case \"2\":","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" System.out.print(\"Quack, I do not understand your option, please indicate again (1/2): \");","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" * Takes input from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" * @return the input from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" public String takeInput(String prompt) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(UI.HORIZONTAL_LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" System.out.print(prompt);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" String input \u003d this.SCANNER.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(UI.HORIZONTAL_LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" return input;","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" * Invoked at the end of the programme, to leave an exit message to user.","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" public void exit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(UI.HORIZONTAL_LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" this.SCANNER.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" * Notifies user of a user-input error.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":" public void notifyError(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(this.ERROR_PREPEND + message + this.ERROR_APPEND);","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":" * Notifies user that a task has been marked done","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":" * @param task the task to notify","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" public void notifyMarkDone(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" * Notifies user that a task has been marked not done","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" * @param task the task to notify","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" public void notifyMarkNotDone(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":" * Notifies user that a task has been removed","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" * @param task the task removed","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":" public void notifyRemoved(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Noted, I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":" public enum Type {","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" TODO,","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":" DEADLINE,","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" EVENT,","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" DEFAULT","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"nknguyenhc"},"content":" * Notifies that a list of task is going to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"nknguyenhc"},"content":" * Does not display the tasks itself.","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"nknguyenhc"},"content":" * @param type type of task (todo/deadline/event)","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date before which to display deadlines before or events happening on,","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":" * null if not to filter by date","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"nknguyenhc"},"content":" public void notifyList(Type type, boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" String typeString;","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"nknguyenhc"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":" typeString \u003d \"to-do tasks\";","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"nknguyenhc"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"nknguyenhc"},"content":" typeString \u003d \"deadlines\";","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"nknguyenhc"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"nknguyenhc"},"content":" typeString \u003d \"events\";","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"nknguyenhc"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"nknguyenhc"},"content":" typeString \u003d \"tasks\";","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"nknguyenhc"},"content":" \"Alright, here is your list of \"","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"nknguyenhc"},"content":" + typeString","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"nknguyenhc"},"content":" + (isExcludingDone ? \" not done\" : \"\")","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" + (date !\u003d null","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":" ? (type \u003d\u003d Type.DEADLINE","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"nknguyenhc"},"content":" ? \" before \"","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"nknguyenhc"},"content":" : type \u003d\u003d Type.EVENT","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"nknguyenhc"},"content":" ? \" happening on \"","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"nknguyenhc"},"content":" : \" for \"","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"nknguyenhc"},"content":" ) + DateTimeManager.dateToDisplay(date)","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"nknguyenhc"},"content":" : \"\"","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"nknguyenhc"},"content":" ) + \":\"","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"nknguyenhc"},"content":" * Notifies the user that a task has been added.","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"nknguyenhc"},"content":" * @param task the task added","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"nknguyenhc"},"content":" public void notifyAdded(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Got it, I\u0027ve added this task to the list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"nknguyenhc"},"content":" * Echoes an input back to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"nknguyenhc"},"content":" * @param input the input from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"nknguyenhc"},"content":" public void echo(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"nknguyenhc"},"content":" if (input.equals(\"quack\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Quack quack quack\");","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Quack, what do you mean when you say \" + input);","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"nknguyenhc"},"content":" * Notifies the user that data is in the process of being saved to disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"nknguyenhc"},"content":" public void notifyDataSaving() {","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Saving data ...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"nknguyenhc"},"content":" * Notifies the user that data has been saved to disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"nknguyenhc"},"content":" public void notifyDataSaved() {","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Done saving\");","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"nknguyenhc"},"content":" public void showTaskCount(int count) {","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Now you have \" + count + \" in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"nknguyenhc"},"content":" * Notify the user of the search result.","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"nknguyenhc"},"content":" * @param input the search parameter","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"nknguyenhc"},"content":" public void notifyFind(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Here are the tasks that match \\\"\" + input + \"\\\"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":238}},{"path":"src/test/java/duke/parse/DateTimeManagerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"public class DateTimeManagerTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" private void notifyError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" fail(\"should not throw exception\");","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" public void parseInputTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.now(),","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(22, 13)","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" ),","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.inputToDate(\"today 22:13\")","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.now(),","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(22, 13)","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" ),","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.inputToDate(\"today 10:13pm\")","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.of(2023, 12, 20),","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(12, 13)","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" ),","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.inputToDate(\"20/12/2023 12:13pm\")","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.DateParseException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" () -\u003e DateTimeManager.inputToDate(\"today 13pm\")","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.DateParseException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" () -\u003e DateTimeManager.inputToDate(\"30/2/2024 10am\")","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.DateParseException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" () -\u003e DateTimeManager.inputToDate(\"10/2/2024 10:70am\")","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" public void parseDateTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.now(),","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseDate(\"today\")","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.now().plusDays(1),","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseDate(\"tmr\")","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.of(2023, 9, 10),","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseDate(\"10/9/2023\")","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.of(2023, 1, 1),","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseDate(\"1/1/2023\")","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.DateParseException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" () -\u003e DateTimeManager.parseDate(\"31/9/2023\")","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" public void parseTimeTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(22, 0),","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseTime(\"10pm\")","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(16, 33),","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseTime(\"4:33pm\")","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(16, 33),","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseTime(\"16:33\")","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.DateParseException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" () -\u003e DateTimeManager.parseTime(\"24:13\")","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.DateParseException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" () -\u003e DateTimeManager.parseTime(\"15:00pm\")","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" public void dateToStringDataTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" \"12/9/2023 12:0\",","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.dateToStringData(LocalDateTime.of(2023, 9, 12, 12, 0))","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" \"12/9/2023 14:27\",","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.dateToStringData(LocalDateTime.of(2023, 9, 12, 14, 27))","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":" \"1/10/2023 0:0\",","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.dateToStringData(LocalDateTime.of(2023, 10, 1, 0, 0))","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" public void dateDisplayTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" \"today 10:11am\",","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.dateToDisplay(","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.now(),","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(10, 11)","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" )","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":" )","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":" \"tomorrow 12:13am\",","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.dateToDisplay(","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.now(),","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(0, 13)","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" ).plusDays(1)","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" )","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"nknguyenhc"},"content":" \"5/9/2023 12:07pm\",","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.dateToDisplay(","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(2023, 9, 5, 12, 7)","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"nknguyenhc"},"content":" )","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":" \"2/9/2023 02:00pm\",","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.dateToDisplay(","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(2023, 9, 2, 14, 0)","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" )","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":164}},{"path":"src/test/java/duke/parse/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.EchoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.EmptyCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.SaveCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" private void notifyError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" fail(\"should not throw any error\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" public void emptyTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(new EmptyCommand(), Parser.parse(\"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" public void exitTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(new ExitCommand(), Parser.parse(\"exit\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(new ExitCommand(), Parser.parse(\"bye\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" public void listTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" new ListCommand(false, null, ListCommand.Type.DEFAULT),","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list\")","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" new ListCommand(false, LocalDate.now(), ListCommand.Type.DEFAULT),","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list today\")","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" new ListCommand(true, null, ListCommand.Type.DEFAULT),","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list -d\")","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" new ListCommand(false, null, ListCommand.Type.TODO),","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list todo\")","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" new ListCommand(true, null, ListCommand.Type.TODO),","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list todo -d\")","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" new ListCommand(true, LocalDate.now().plusDays(1), ListCommand.Type.DEADLINE),","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list deadline tmr -d\")","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" new ListCommand(false, LocalDate.of(2023, 9, 5), ListCommand.Type.EVENT),","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list event 5/9/2023\")","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" Parser.ParseError.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" () -\u003e Parser.parse(\"list event 31/9/2023\")","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" Parser.ParseError.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" () -\u003e Parser.parse(\"list event 12-12\")","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" public void markTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" new MarkCommand(true, 1),","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"mark 2\")","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" new MarkCommand(true, 4),","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"mark 5\")","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" new MarkCommand(false, 3),","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"unmark 4\")","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" Parser.ParseError.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" () -\u003e Parser.parse(\"mark 0\")","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":" Parser.ParseError.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" () -\u003e Parser.parse(\"unmark -1\")","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":" public void addTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" new AddCommand(new ToDo(\"do sth\")),","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"todo do sth\")","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" new AddCommand(new Deadline(","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" \"do sth\",","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(LocalDate.now(), LocalTime.of(22, 0))","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" )),","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"deadline do sth /by today 10pm\")","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" new AddCommand(new Event(","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" \"attend sth\",","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(LocalDate.now(), LocalTime.of(10, 0)),","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(2023, 9, 5, 21, 2)","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" )),","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"event attend sth /from today 10am /to 5/9/2023 9:02pm\")","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" Parser.ParseError.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":" () -\u003e Parser.parse(\"event /from today 10am /to tmr 9pm\")","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" Parser.ParseError.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":" () -\u003e Parser.parse(\"event do sth /from today 19:70 /to tmr 10am\")","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"nknguyenhc"},"content":" public void saveTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":" new SaveCommand(),","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"save\")","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"nknguyenhc"},"content":" public void echoTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"nknguyenhc"},"content":" new EchoCommand(\"quack\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"quack\")","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"nknguyenhc"},"content":" new EchoCommand(\"fevwnqbo\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"fevwnqbo\")","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":181}},{"path":"src/test/java/duke/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" private void notifyError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" fail(\"file should not be corrupted!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" private void notifyIO() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" fail(\"IO error encountered\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" private void writeBeforeTest(String fileName, String content) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" FileWriter writer \u003d new FileWriter(fileName);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" writer.write(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" public void normalReadTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" writeBeforeTest(","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" \"task-list.txt\",","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" \"T 0 task 1\" + \"\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" + \"D 1 task 2 /by 10/12/2023 15:0\" + \"\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" + \"E 0 task 3 /from 30/8/2023 0:30 /to 30/9/2023 12:12\"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" ToDo todo \u003d new ToDo(\"task 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" Deadline deadline \u003d new Deadline(","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" \"task 2\",","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(2023, 12, 10, 15, 0)","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" Event event \u003d new Event(","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" \"task 3\",","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(2023, 8, 30, 0, 30),","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(2023, 9, 30, 12, 12)","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" list.add(todo);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" list.add(deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" list.add(event);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" list,","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" new Storage(\"task-list.txt\").readFromDisk()","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" } catch (Storage.FileCorruptedException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" notifyIO();","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" public void corruptedReadTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" writeBeforeTest(","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" \"task-list.txt\",","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" \"fnewopvnqwpiniw bjweipgjqwpjp\"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" Storage.FileCorruptedException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" () -\u003e new Storage(\"task-list.txt\").readFromDisk()","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" writeBeforeTest(","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" \"task-list.txt\",","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" \"T t task 7\"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" Storage.FileCorruptedException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" () -\u003e new Storage(\"task-list.txt\").readFromDisk()","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" writeBeforeTest(","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" \"task-list.txt\",","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" \"D 0 no end time\"","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" Storage.FileCorruptedException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" () -\u003e new Storage(\"task-list.txt\").readFromDisk()","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" notifyIO();","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":104}},{"path":"text-ui-test/expected/add-task-error.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"Loading data from hard disk ...","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"Done loading.","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"Hello from Quack-NKN","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"What can I do for you?","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"Now you have 1 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"Quack, keyword \u0027/from\u0027 not found. It must be present for me to mark the start time!","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"Quack, no empty event please!","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"Quack, no empty event please!","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"Quack, no empty start time please!","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":"Quack, no empty end time please!","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":"Quack, keyword \u0027/by\u0027 not found.It must be present for me to mark the deadline time!","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":"Quack, no empty deadline time please!","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":"Quack, no empty deadline task please!","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":"Bye. Hope to see you again soon!","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":45}},{"path":"text-ui-test/expected/delete-task.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"Loading data from hard disk ...","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"Done loading.","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"Hello from Quack-NKN","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"What can I do for you?","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] do some stuff quack","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"Now you have 1 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"[E][ ] hello (from: 8pm tday to: 8pm tmr)","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"Now you have 2 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"[D][ ] finish some stuff (by: this Sunday)","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"Now you have 3 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do some stuff quack","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":"2. [E][ ] hello (from: 8pm tday to: 8pm tmr)","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":"3. [D][ ] finish some stuff (by: this Sunday)","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":"Quack, the task number you provide does not exist!","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do some stuff quack","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"2. [E][ ] hello (from: 8pm tday to: 8pm tmr)","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":"3. [D][ ] finish some stuff (by: this Sunday)","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":"Noted, I\u0027ve removed this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] do some stuff quack","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":"Now you have 2 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":"1. [E][ ] hello (from: 8pm tday to: 8pm tmr)","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":"2. [D][ ] finish some stuff (by: this Sunday)","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":"Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":"[D][X] finish some stuff (by: this Sunday)","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":"Noted, I\u0027ve removed this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":"[D][X] finish some stuff (by: this Sunday)","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":"Now you have 1 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":"1. [E][ ] hello (from: 8pm tday to: 8pm tmr)","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":"Bye. Hope to see you again soon!","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":59}},{"path":"text-ui-test/expected/mark-as-done.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"Loading data from hard disk ...","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"Done loading.","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"Hello from Quack-NKN","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"What can I do for you?","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"Now you have 1 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"Now you have 2 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"2. [T][ ] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] task3","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":"Now you have 3 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":"Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":"[T][X] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"2. [T][X] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":"3. [T][ ] task3","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":"Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":"[T][X] task3","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":"2. [T][X] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":"3. [T][X] task3","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":"OK, I\u0027ve marked this task as not done yet:","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":"2. [T][ ] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":"3. [T][X] task3","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":"Quack, the task number you provide does not exist!","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":"2. [T][ ] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":"3. [T][X] task3","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":"Quack, the task number you provide does not exist!","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":"2. [T][ ] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":"3. [T][X] task3","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":"Bye. Hope to see you again soon!","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":72}},{"path":"text-ui-test/expected/task-type.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"Loading data from hard disk ...","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"Done loading.","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"Hello from Quack-NKN","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"What can I do for you?","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] buy grocery","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"Now you have 1 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"[E][ ] Orbital splashdown (from: tday 6pm to: tday 9pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"Now you have 2 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"[D][ ] finish this project (by: Thurs 2359)","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"Now you have 3 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":"[E][ ] GDG-workshop (from: tmr 7.30pm to: tmr 9.30pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":"Now you have 4 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] buy grocery","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"2. [E][ ] Orbital splashdown (from: tday 6pm to: tday 9pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":"3. [D][ ] finish this project (by: Thurs 2359)","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":"4. [E][ ] GDG-workshop (from: tmr 7.30pm to: tmr 9.30pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":"Quack, the task number you provide does not exist!","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":"Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":"[E][X] GDG-workshop (from: tmr 7.30pm to: tmr 9.30pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] buy grocery","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":"2. [E][ ] Orbital splashdown (from: tday 6pm to: tday 9pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":"3. [D][ ] finish this project (by: Thurs 2359)","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":"4. [E][X] GDG-workshop (from: tmr 7.30pm to: tmr 9.30pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":"Quack, keyword \u0027/by\u0027 not found.It must be present for me to mark the deadline time!","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":"[D][ ] CS2109S PS0 (by: 26 Aug)","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":"Now you have 5 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":"Quack, keyword \u0027/to\u0027 not found. It must be present after the \u0027/from\u0027 keyword for me to mark the end time!","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":"Quack, keyword \u0027/to\u0027 not found. It must be present after the \u0027/from\u0027 keyword for me to mark the end time!","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":"[E][ ] cchess training (from: 7pm Mon to: 9pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":"Now you have 6 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] buy grocery","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":"2. [E][ ] Orbital splashdown (from: tday 6pm to: tday 9pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":"3. [D][ ] finish this project (by: Thurs 2359)","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":"4. [E][X] GDG-workshop (from: tmr 7.30pm to: tmr 9.30pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":"5. [D][ ] CS2109S PS0 (by: 26 Aug)","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":"6. [E][ ] cchess training (from: 7pm Mon to: 9pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":"Bye. Hope to see you again soon!","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":76}},{"path":"text-ui-test/input/add-task-error.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"todo do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"event event tday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"event /from 9pm /to 11pm","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"event /from /to 9pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"event talk /from /to ","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"event talk /from 12am /to ","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"deadline /from 9pm","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"deadline do sth /by ","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"deadline /by 9pm","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":12}},{"path":"text-ui-test/input/delete-task.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"todo do some stuff quack","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"event hello /from 8pm tday /to 8pm tmr","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"deadline finish some stuff /by this Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"delete 4","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"delete 1","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"delete 2","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":12}},{"path":"text-ui-test/input/mark-as-done.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"todo do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"todo do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"todo task3","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"mark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"unmark 6","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":15}},{"path":"text-ui-test/input/task-type.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"todo buy grocery","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"event Orbital splashdown /from tday 6pm /to tday 9pm","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"deadline finish this project /by Thurs 2359","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"event GDG-workshop /from tmr 7.30pm /to tmr 9.30pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"mark 10","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"mark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"deadline CS2109S PS0","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"deadline CS2109S PS0 /by 26 Aug","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"event cchess training /to 9pm Mon /from 7pm Mon","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"event cchess training /from 7pm Mon /t 9pm","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"event cchess training /from 7pm Mon /to 9pm","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":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":"nknguyenhc"},"content":"java -classpath ..\\bin Duke \u003c .\\input\\mark-as-done.txt \u003e .\\actual\\mark-as-done.txt","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"FC .\\actual\\mark-as-done.txt .\\expected\\mark-as-done.txt","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"java -classpath ..\\bin Duke \u003c .\\input\\task-type.txt \u003e .\\actual\\task-type.txt","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"FC .\\actual\\task-type.txt .\\expected\\task-type.txt","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"java -classpath ..\\bin Duke \u003c .\\input\\add-task-error.txt \u003e .\\actual\\add-task-error.txt","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"FC .\\actual\\add-task-error.txt .\\expected\\add-task-error.txt","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":"java -classpath ..\\bin Duke \u003c .\\input\\delete-task.txt \u003e .\\actual\\delete-task.txt","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"FC .\\actual\\delete-task.txt .\\expected\\delete-task.txt","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":10,"-":17}}] +[{"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":"nknguyenhc"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-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":"-"},"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":"nknguyenhc"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" toolVersion \u003d 10.2","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"nknguyenhc":6,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" * Main class, where the user interacts with the bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" * The bot accesses the storage through the Storage class,","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" * standard in and out through the UI class,","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" * manage the current task list through the TaskList class.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" private final String myName \u003d \"Quack-NKN\";","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" private TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" private final Storage storage \u003d new Storage(\"task-list.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" private final UI userInterface \u003d new UI(\"Quack, \", \"!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * Instantiate the bot, and starts the interaction immediately.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" public Duke() {","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" interact();","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" * Invoked at the start before interaction.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" * Reads data from file and save to the list of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" * If file is corrupted, the exception thrown from Storage instance is thrown.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" * If there is IO error, handle the exception gracefully,","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" * and continue with an empty task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" private void readFromDisk() throws Storage.FileCorruptedException {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyDataLoading();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e taskList \u003d this.storage.readFromDisk();","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" this.taskList \u003d new TaskList(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyDataLoaded();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" } catch (Storage.FileIoException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyLoadingIoError();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" * Leaves an exit message.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" public void exit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.exit();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" * Main programme to allow user to input and respond accordingly.","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" * Available commands:","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" * - bye/exit: to exit the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" * - list: to list out the current task list","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" * - list {date}: to list out all events happening on that date or deadlines before/on that date","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" * - list {todo/deadline/event}: list out all todo items / deadline items / event items","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" * - list -d: list out all tasks not done","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" * - mark {number}: to mark the task with the corresponding index in the list as done","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" * - unmark {number}: to mark the task with the corresponding index in the list as not done","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" * - todo {taskname}: to add a new task as a to-do item (no deadline or time)","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" * - event {taskname} /from {starttime} /to {endtime}: to add a new task as an event (with start time and end time)","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" * - deadline {taskname} /by {time}: to add a new task as a deadline (with deadline time)","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" * Note that for list, a combination of options can be used, by separating them by space characters.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" * If there is an error in the input from user, notify the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" * Datetime format: \"{date} {time}\"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" * Date format: either \"today\", \"tmr\", \"tomorrow\", or DD/MM/YYYY","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" * Time format: either \"{HH:MM}\", \"{HH}am\", \"{HH}pm\", \"{HH:MM}am\" or \"{HH:MM}pm\"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" private void interact() {","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" this.readFromDisk();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" } catch (Storage.FileCorruptedException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" boolean isContinuing \u003d this.userInterface.handleFileCorrupted();","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" if (!isContinuing) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" return;","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.start(this.myName);","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" boolean isContinuing \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" while (isContinuing) {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" // receive input","lastModifiedDate":"2023-08-22"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" String input \u003d this.userInterface.takeInput(\"In: \");","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" isContinuing \u003d command.execute(this);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" * Shows the list of task to the user, with the options included.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" * This does not filter task type (todo/deadline/event)","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" * @param date date to display the deadlines before and events happening on,","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" * null if to not exclude any task by date","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" public void showList(boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyList(UI.Type.DEFAULT, isExcludingDone, date);","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.displayTasks(isExcludingDone, date);","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" * Shows all to-do tasks with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" public void showTodos(boolean isExcludingDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyList(UI.Type.TODO, isExcludingDone, null);","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.displayTodos(isExcludingDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" * Shows all deadlines with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date to display deadlines before","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":" public void showDeadlines(boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyList(UI.Type.DEADLINE, isExcludingDone, date);","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.displayDeadlines(isExcludingDone, date);","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" * Shows all events with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date to display events happening on","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" public void showEvents(boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyList(UI.Type.EVENT, isExcludingDone, date);","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.displayEvents(isExcludingDone, date);","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" * Adds a task to","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":" * @param task","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":" public void addTaskToList(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyAdded(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.showTaskCount(this.taskList.size());","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":151,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":152,"author":{"gitId":"nknguyenhc"},"content":" * Mark a task with corresponding index as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"nknguyenhc"},"content":" * Handles the case where task index is out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"nknguyenhc"},"content":" * @param index the index of task to remove","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":" Task task \u003d this.taskList.markTaskAsDone(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyMarkDone(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"nknguyenhc"},"content":" } catch (TaskList.TaskIndexOutOfRange e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyError(\"invalid task index\");","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":165,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":166,"author":{"gitId":"nknguyenhc"},"content":" * Mark a task with corresponding index as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"nknguyenhc"},"content":" * Handles the case where task index is out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"nknguyenhc"},"content":" * @param index the index of task to remove","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":170,"author":{"gitId":"nknguyenhc"},"content":" public void markTaskAsNotDone(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"nknguyenhc"},"content":" Task task \u003d this.taskList.markTaskAsNotDone(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyMarkNotDone(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"nknguyenhc"},"content":" } catch (TaskList.TaskIndexOutOfRange e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyError(\"invalid task index\");","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":178,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":179,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" * Delete the task with the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":" * Handles the case where the task index is out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"nknguyenhc"},"content":" * @param index the index of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":184,"author":{"gitId":"nknguyenhc"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"nknguyenhc"},"content":" Task taskDeleted \u003d this.taskList.deleteTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyRemoved(taskDeleted);","lastModifiedDate":"2023-09-05"},{"lineNumber":188,"author":{"gitId":"nknguyenhc"},"content":" } catch (TaskList.TaskIndexOutOfRange e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyError(\"invalid task index\");","lastModifiedDate":"2023-09-05"},{"lineNumber":190,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":192,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":193,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"nknguyenhc"},"content":" * Save data to hard disk, with the current task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":195,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"nknguyenhc"},"content":" public void saveData() {","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyDataSaving();","lastModifiedDate":"2023-09-05"},{"lineNumber":198,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":199,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.saveData(this.storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":200,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyDataSaved();","lastModifiedDate":"2023-09-05"},{"lineNumber":201,"author":{"gitId":"nknguyenhc"},"content":" } catch (Storage.FileIoException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":202,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyError(\"an error has occurred while writing to hard disk\");","lastModifiedDate":"2023-09-05"},{"lineNumber":203,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":204,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":205,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":206,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":207,"author":{"gitId":"nknguyenhc"},"content":" * Echo command back to the user.","lastModifiedDate":"2023-08-23"},{"lineNumber":208,"author":{"gitId":"nknguyenhc"},"content":" * @param input the input from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":210,"author":{"gitId":"nknguyenhc"},"content":" public void echo(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.echo(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":212,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":213,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":214,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"nknguyenhc"},"content":" * Finds a task based on the command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"nknguyenhc"},"content":" * @param input the input from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"nknguyenhc"},"content":" public void find(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"nknguyenhc"},"content":" this.userInterface.notifyFind(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":220,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.showResults(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"nknguyenhc"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-22"},{"lineNumber":224,"author":{"gitId":"nknguyenhc"},"content":" new Duke();","lastModifiedDate":"2023-08-22"},{"lineNumber":225,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":226,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"nknguyenhc":224,"-":2}},{"path":"src/main/java/duke/parse/DateTimeManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" * Contains methods to deal with datetime,","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * including methods to convert java date and time to readable string and string for storage,","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" * and vice versa.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"public class DateTimeManager {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" * Thrown when the date string given by the user cannot be parsed properly.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" public static class DateParseException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" private DateParseException() {}","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" * Transforms a String input of datetime to a LocalDateTime instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" * The string must be in the format \"dd/mm/yyyy hh:mm\"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" * @param input the input string","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" * @return the LocalDateTime object that corresponds to the input string","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * @throws DateParseException if the input string is in a wrong format","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" public static LocalDateTime inputToDate(String input) throws DateParseException {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" String[] splitBySpace \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" if (splitBySpace.length !\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" LocalDate date \u003d DateTimeManager.parseDate(splitBySpace[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" LocalTime time \u003d DateTimeManager.parseTime(splitBySpace[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" return LocalDateTime.of(date, time);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" * Parses the string and return a LocalDate instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" * @param input the raw string","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" * @return the LocalDate instance that corresponds to the input","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" * @throws DateParseException when the input string cannot be parsed properly","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" public static LocalDate parseDate(String input) throws DateParseException {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" String[] dateData \u003d input.split(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" if (dateData.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" switch (dateData[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" case \"today\":","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" return LocalDate.now();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" case \"tomorrow\":","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" case \"tmr\":","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" return LocalDate.now().plusDays(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" } else if (dateData.length \u003d\u003d 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" for (String data : dateData) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" if (data.matches(\"0+\") || !data.matches(\"\\\\d+\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" return LocalDate.of(","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" Integer.parseInt(dateData[2]),","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" Integer.parseInt(dateData[1]),","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" Integer.parseInt(dateData[0])","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" * Reads the given input indicating a time and return a LocalTime instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" * @param input the raw input string","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" * @return the LocalTime instance that corresponds to the string","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" * @throws DateParseException when the string cannot be parsed properly to interpret a time","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" public static LocalTime parseTime(String input) throws DateParseException {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" String possibleAmPm \u003d input.substring(input.length() - 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" boolean isPm \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" boolean isAm \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" if (possibleAmPm.equals(\"am\") || possibleAmPm.equals(\"pm\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" if (possibleAmPm.equals(\"pm\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" isPm \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" if (possibleAmPm.equals(\"am\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" isAm \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" input \u003d input.substring(0, input.length() - 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" String[] timeData \u003d input.split(\":\");","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" if (timeData.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" if (!timeData[0].matches(\"\\\\d+\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" int hour \u003d Integer.parseInt(timeData[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" return LocalTime.of((hour \u003d\u003d 12 ? (isAm ? 0 : isPm ? 0 : 12) : hour) + (isPm ? 12 : 0), 0);","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" } else if (timeData.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" for (String data : timeData) {","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" if (!data.matches(\"\\\\d+\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":" int hour \u003d Integer.parseInt(timeData[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" return LocalTime.of((hour \u003d\u003d 12 ? (isAm ? 0 : isPm ? 0 : 12) : hour) + (isPm ? 12 : 0),","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" Integer.parseInt(timeData[1])","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" throw new DateParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" * Converts the given datetime to string for storage","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" * @param dateTime the instance of LocalDateTime to convert","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" * @return the string containing the data of the datetime","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" public static String dateToStringData(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" return DateTimeManager.dateToStringData(dateTime.toLocalDate()) + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" + DateTimeManager.timeDataFrom(dateTime.toLocalTime());","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" * Converts the given date to string data for storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" * @param date the instance of LocalDate to convert","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":" * @return the string containing data of the date","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" public static String dateToStringData(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":" return date.getDayOfMonth() + \"/\"","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":" + date.getMonthValue() + \"/\"","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":" + date.getYear();","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" * Converts the given time to string data for storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":" * @param time the instance of LocalTime to convert","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"nknguyenhc"},"content":" * @return the string containing the data of the time","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"nknguyenhc"},"content":" public static String timeDataFrom(LocalTime time) {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"nknguyenhc"},"content":" return time.getHour() + \":\" + time.getMinute();","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":" * Converts a datetime to readable form, for display in UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"nknguyenhc"},"content":" * @param dateTime the instance of LocalDateTime to display","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"nknguyenhc"},"content":" * @return the string representing the datetime to be displayed","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" public static String dateToDisplay(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"nknguyenhc"},"content":" return DateTimeManager.dateToDisplay(dateTime.toLocalDate()) + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":" + DateTimeManager.timeDisplayFrom(dateTime.toLocalTime());","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"nknguyenhc"},"content":" * Converts the date given to readable form, for display in UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"nknguyenhc"},"content":" * @param date the instance of LocalDate to display","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"nknguyenhc"},"content":" * @return the string representing the date to be displayed","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"nknguyenhc"},"content":" public static String dateToDisplay(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"nknguyenhc"},"content":" if (date.equals(LocalDate.now())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"nknguyenhc"},"content":" return \"today\";","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"nknguyenhc"},"content":" } else if (date.equals(LocalDate.now().plusDays(1))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"nknguyenhc"},"content":" return \"tomorrow\";","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"nknguyenhc"},"content":" return dateToStringData(date);","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"nknguyenhc"},"content":" * Converts the time to readable form, for display in UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"nknguyenhc"},"content":" * @param time the instance of LocalTime to convert","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"nknguyenhc"},"content":" * @return the string representing the time to be displayed","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"nknguyenhc"},"content":" public static String timeDisplayFrom(LocalTime time) {","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"nknguyenhc"},"content":" if (time.getHour() \u003c 12) {","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"nknguyenhc"},"content":" return (time.getHour() \u003d\u003d 0","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"nknguyenhc"},"content":" ? \"12\"","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"nknguyenhc"},"content":" : DateTimeManager.twoDecimalPlaces(time.getHour())","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"nknguyenhc"},"content":" ) + \":\" + DateTimeManager.twoDecimalPlaces(time.getMinute()) + \"am\";","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"nknguyenhc"},"content":" return (time.getHour() \u003d\u003d 12","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"nknguyenhc"},"content":" ? \"12\"","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"nknguyenhc"},"content":" : DateTimeManager.twoDecimalPlaces(time.getHour() - 12)","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"nknguyenhc"},"content":" ) + \":\" + DateTimeManager.twoDecimalPlaces(time.getMinute()) + \"pm\";","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"nknguyenhc"},"content":" private static String twoDecimalPlaces(int number) {","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"nknguyenhc"},"content":" return number \u003c 10 ? \"0\" + number : Integer.toString(number);","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nknguyenhc":204}},{"path":"src/main/java/duke/parse/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.EchoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.EmptyCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.SaveCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" * Deals with parsing input from user.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * Thrown when the input from user cannot be parsed properly.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" public static class ParseError extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" private ParseError(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" * Parse a given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" * Available commands:","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" * - bye/exit: to exit the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" * - list: to list out the current task list","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" * - list {date}: to list out all events happening on that date or deadlines before/on that date","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" * - list {todo/deadline/event}: list out all todo items / deadline items / event items","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" * - list -d: list out all tasks not done","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" * - mark {number}: to mark the task with the corresponding index in the list as done","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" * - unmark {number}: to mark the task with the corresponding index in the list as not done","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" * - todo {taskname}: to add a new task as a to-do item (no deadline or time)","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" * - event {taskname} /from {starttime} /to {endtime}: to add a new task as an event (with start time and end time)","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" * - deadline {taskname} /by {time}: to add a new task as a deadline (with deadline time)","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" * Note that for list, a combination of options can be used, by separating them by space characters.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" * @param input the input from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" * @return the command to be executed on the bot","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" * @throws ParseError when the input cannot be properly interpreted","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" public static Command parse(String input) throws ParseError {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" String[] commandArgs \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" switch (commandArgs[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" case \"\":","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" return new EmptyCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" case \"exit\":","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" // show list","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" if (commandArgs.length !\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" String[] args \u003d commandArgs[1].split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" boolean isExcludingDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" LocalDate date \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" for (String arg: args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" switch (arg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" case \"-d\":","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" isExcludingDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" date \u003d DateTimeManager.parseDate(arg);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"unrecognised \\\"\" + arg + \"\\\"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" switch (args[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" return new ListCommand(isExcludingDone, date, ListCommand.Type.TODO);","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" return new ListCommand(isExcludingDone, date, ListCommand.Type.DEADLINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" return new ListCommand(isExcludingDone, date, ListCommand.Type.EVENT);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" return new ListCommand(isExcludingDone, date, ListCommand.Type.DEFAULT);","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" return new ListCommand(false, null, ListCommand.Type.DEFAULT);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" // mark as done","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" index \u003d Parser.getTaskIndexFromCommand(commandArgs);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" return new MarkCommand(true, index);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" // mark as not done","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" index \u003d Parser.getTaskIndexFromCommand(commandArgs);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" return new MarkCommand(false, index);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" // add to-do","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" if (commandArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"no to-do task provided\");","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" if (commandArgs[1].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"empty to-do task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" return new AddCommand(new ToDo(commandArgs[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":" // add event","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" // number of arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" if (commandArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"no event provided\");","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" // /from keyword","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" String[] separateByFrom \u003d commandArgs[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" // no empty event","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" if (separateByFrom[0].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"empty event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" // /from keyword must exist","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" if (separateByFrom.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"keyword \u0027/from\u0027 not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" // /to keyword","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" String[] separateByTo \u003d separateByFrom[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":" // no empty start time","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" if (separateByTo[0].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"empty start time\");","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":" // /to keyword must exist","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":" if (separateByTo.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"keyword \u0027/to\u0027 not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" // no empty end time","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" if (separateByTo[1].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"empty end time\");","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime startTime \u003d DateTimeManager.inputToDate(separateByTo[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime endTime \u003d DateTimeManager.inputToDate(separateByTo[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":" return new AddCommand(new Event(separateByFrom[0], startTime, endTime));","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"invalid datetime\");","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" // add deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"nknguyenhc"},"content":" // number of arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":" if (commandArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"no deadline found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"nknguyenhc"},"content":" String[] separateByBy \u003d commandArgs[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"nknguyenhc"},"content":" // /by keyword must exist","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"nknguyenhc"},"content":" if (separateByBy.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"keyword \u0027/by\u0027 not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"nknguyenhc"},"content":" // no empty deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"nknguyenhc"},"content":" if (separateByBy[0].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"empty deadline task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"nknguyenhc"},"content":" // no empty end time","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"nknguyenhc"},"content":" if (separateByBy[1].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"empty deadline time\");","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime dateTime \u003d DateTimeManager.inputToDate(separateByBy[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"nknguyenhc"},"content":" return new AddCommand(new Deadline(separateByBy[0], dateTime));","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"invalid datetime\");","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"nknguyenhc"},"content":" // delete task","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"nknguyenhc"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"nknguyenhc"},"content":" index \u003d getTaskIndexFromCommand(commandArgs);","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"nknguyenhc"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"nknguyenhc"},"content":" // save data to hard disk","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"nknguyenhc"},"content":" case \"save\":","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"nknguyenhc"},"content":" return new SaveCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"nknguyenhc"},"content":" // find task containing given description","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"nknguyenhc"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"nknguyenhc"},"content":" String query \u003d commandArgs[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"nknguyenhc"},"content":" return new FindCommand(query);","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"nknguyenhc"},"content":" // anything else","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"nknguyenhc"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"nknguyenhc"},"content":" return new EchoCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"nknguyenhc"},"content":" private static int getTaskIndexFromCommand(String[] commandArgs) throws ParseError {","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"nknguyenhc"},"content":" // check for number of arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"nknguyenhc"},"content":" if (commandArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"you have provided wrong number of arguments!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"nknguyenhc"},"content":" // check if second argument is positive integer","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"nknguyenhc"},"content":" String indexString \u003d commandArgs[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"nknguyenhc"},"content":" if (indexString.matches(\"0+\") || !indexString.matches(\"\\\\d+\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"nknguyenhc"},"content":" throw new ParseError(\"you need to provide a positive integer!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"nknguyenhc"},"content":" return Integer.parseInt(indexString) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":223}},{"path":"src/main/java/duke/parse/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" * Represents a command to add a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"public class AddCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" private Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates a command to add the given task","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" * @param task the task to add","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" * Commands the bot to add the task to its list.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to add the task","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as it allows the user to continue the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" bot.addTaskToList(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this command is the same as another, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" * It is equal if the tasks to be added are the same.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare against","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this command is the same as another","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof AddCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" AddCommand anotherAdd \u003d (AddCommand) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" return this.task.equals(anotherAdd.task);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":45}},{"path":"src/main/java/duke/parse/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represents a parsed command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" * The base class for a command, to be implemented by other classes.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"public interface Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" * Executes the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" * @return whether the execution allows the program to continue,","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" * true if it can, false means the program must exit","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" boolean execute(Duke bot);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":16}},{"path":"src/main/java/duke/parse/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represents a command to delete the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates the command to delete the task with the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" * @param taskIndex the index of the task to be deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" * Commands the bot to delete the task with the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute the command","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as this allows the user to continue the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" bot.deleteTask(this.taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this delete command is the same as another command, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" * It is equal if the tasks to be deleted are the same.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this delete command is the same as another","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof DeleteCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" DeleteCommand anotherDelete \u003d (DeleteCommand) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" return this.taskIndex \u003d\u003d anotherDelete.taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":44}},{"path":"src/main/java/duke/parse/command/EchoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represents a command to echo the input from user back to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"public class EchoCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" private String command;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates the echo command with the given input from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" * @param command the input from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" public EchoCommand(String command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" * Commands the bot to echo the input back to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute the command","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as it allows the user to continue the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" bot.echo(this.command);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this echo command is the same as another command, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" * They are the same if the input from user is the same.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" * @param another","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" * @return","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof EchoCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" EchoCommand anotherEcho \u003d (EchoCommand) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" return this.command.equals(anotherEcho.command);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":44}},{"path":"src/main/java/duke/parse/command/EmptyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represents an empty command.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"public class EmptyCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates an empty command.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" public EmptyCommand() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" * Does nothing","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute the command","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as the user can continue with the programme afterwards","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" * Checks if this empty command is the same as another.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * They are the same as long as both are empty commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as this allows the user to continue with the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" return another instanceof EmptyCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":34}},{"path":"src/main/java/duke/parse/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represents an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"public class ExitCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" public ExitCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" * Commands the bot to exit the interaction.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute the command","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" * @return false, as this means the user will be exited out of the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" bot.exit();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this exit command is the same as another, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" * They are the same as long as the other object is also an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this exit command is the same as another","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" return another instanceof ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":36}},{"path":"src/main/java/duke/parse/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represents a find command.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" * Contains the search parameter given by the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" private String query;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates a find command with the given query.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" * @param query the search parameter","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" public FindCommand(String query) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" this.query \u003d query;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" * Commands the bot to find the tasks matching the query.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute the command","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as it allows the user to continue the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" bot.find(this.query);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":30}},{"path":"src/main/java/duke/parse/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":" * Represents a list command.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" * Contains the filters as requested by user.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * Filters include: whether to exclude tasks done, date to match tasks, and type of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" private boolean isExcludingDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" private LocalDate date;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" private Type type;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" * Denotes the type of task to be listed.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" * If there is no filter on type of task, the type indicated should be DEFAULT.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" public enum Type {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" TODO,","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" DEADLINE,","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" EVENT,","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" DEFAULT,","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates a list task with the given filter","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date to filter in deadlines before / events happening on,","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" * null if not filtering by date","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" * @param type the type of task to include,","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" * DEFAULT if not filtering by task type","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" public ListCommand(boolean isExcludingDone, LocalDate date, Type type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" this.isExcludingDone \u003d isExcludingDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" * Commands the bot to list out the task with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute the command","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as this allows the user to continue with the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" switch (this.type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" bot.showTodos(this.isExcludingDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" bot.showDeadlines(this.isExcludingDone, this.date);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" bot.showEvents(this.isExcludingDone, this.date);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" bot.showList(this.isExcludingDone, this.date);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this list command is the same as another, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" * True if both are list commands, and the filters are the same.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this list command is the same as another","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof ListCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" ListCommand anotherList \u003d (ListCommand) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" return this.isExcludingDone \u003d\u003d anotherList.isExcludingDone","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 ((this.date \u003d\u003d null \u0026\u0026 anotherList.date \u003d\u003d null)","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" || this.date.equals(anotherList.date))","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 this.type.equals(anotherList.type);","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":83}},{"path":"src/main/java/duke/parse/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represents a command to mark a task as done / not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"public class MarkCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" private int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates the mark command","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" * @param isDone whether the target task should be mark done,","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" * true if it is, false if to be marked not done","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" * @param index the index of the task in the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" public MarkCommand(boolean isDone, int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" * Commands the bot to list out the tasks with the given filters","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute this command","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as this allows the user to continue the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" bot.markTaskAsDone(this.index);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" bot.markTaskAsNotDone(this.index);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this mark command is the same as another, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" * They are the same if both are to mark the same task,","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" * and both mark the task in the same way (done / not done).","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare against","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this mark command is the same as another","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof MarkCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" MarkCommand anotherMark \u003d (MarkCommand) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" return this.isDone \u003d\u003d anotherMark.isDone","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 this.index \u003d\u003d anotherMark.index;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":54}},{"path":"src/main/java/duke/parse/command/SaveCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represents a command to save data to disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"public class SaveCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates a save command.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" public SaveCommand() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" * Command the bot to save its current data to disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" * @param bot the bot to execute the command","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" * @return true, as it allows user to continue with the programme","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" public boolean execute(Duke bot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" bot.saveData();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this save command is the same as another, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" * It is the same as long as the other is also a save command.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this save command is the same as another","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" return another instanceof SaveCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":35}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.DateTimeManager;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" * Handles access to the storage, both read and write.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" * Thrown when the file is found to be corrupted, and data cannot be read properly.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" public class FileCorruptedException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" public FileCorruptedException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" * Thrown where there is an IO error.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" public class FileIoException extends IOException {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" public FileIoException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" private String fileName;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates a storage that monitors a file with the given file name.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" * @param fileName the file name to monitor","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" public Storage(String fileName) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" this.fileName \u003d fileName;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" * Reads data from disk and return a list of task recorded.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" * @return the list of task in order","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" * @throws FileCorruptedException when file is corrupted","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" * @throws FileIoException when there is an IO error","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" public ArrayList\u003cTask\u003e readFromDisk() throws FileCorruptedException, FileIoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" File f \u003d new File(this.fileName);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" Scanner fileScanner \u003d new Scanner(f);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" while (fileScanner.hasNext()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" String[] line \u003d fileScanner.nextLine().split(\" \", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" if (line.length \u003d\u003d 0 \u0026\u0026 !fileScanner.hasNext()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" if (line.length !\u003d 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" switch (line[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" task \u003d new ToDo(line[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" String[] split \u003d line[2].split(\" /by \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" if (split.length !\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime dateTime \u003d DateTimeManager.inputToDate(split[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" task \u003d new Deadline(split[0], dateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" String[] separateByFrom \u003d line[2].split(\" /from \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" if (separateByFrom.length !\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" String[] separateByTo \u003d separateByFrom[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" if (separateByTo.length !\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime startTime \u003d DateTimeManager.inputToDate(separateByTo[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime endTime \u003d DateTimeManager.inputToDate(separateByTo[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" task \u003d new Event(separateByFrom[0], startTime, endTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" if (line[1].equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" } else if (line[1].equals(\"0\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":" throw new FileCorruptedException();","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" fileScanner.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" return taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" } catch (FileNotFoundException fileError) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" } catch (IOException ioError) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" throw new FileIoException();","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" * Save data to disk","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" * @param data the data to save","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" * @throws FileIoException when there is an IO error","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" public void saveData(String data) throws FileIoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" FileWriter writer \u003d new FileWriter(this.fileName);","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" writer.write(data);","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" writer.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" throw new FileIoException();","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nknguyenhc":141}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.DateTimeManager;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" * Represents a deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * A deadline contains an end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates a deadline with the given content and the end time","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" * @param name the content of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" * @param deadline the end time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" public Deadline(String name, LocalDateTime deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * Data representation of the task, to be stored in the disk","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" * @return data representation of the task to be stored in the disk","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" public String data() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" return \"D \" + super.data() + \" /by \" + DateTimeManager.dateToStringData(this.deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this deadline ends before or on the given date.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" * @param date the datetime to check against","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this deadline ends before or on the given date","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" public boolean containsDate(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" return this.deadline.toLocalDate().isBefore(date) || this.deadline.toLocalDate().equals(date);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" * String representation of the task, to be displayed in UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" * @return the string representation of the task to be displayed in UI","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" + DateTimeManager.dateToDisplay(this.deadline) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this deadline is the same as another task, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" * It is the same if content is the same, and end time is the same.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this deadline is the same as another task","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof Deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" Deadline anotherDeadline \u003d (Deadline) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" return super.equals(anotherDeadline)","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 this.deadline.equals(anotherDeadline.deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":69}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.DateTimeManager;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" * A class to represent an event.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * An event has a start time and an end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" private LocalDateTime start;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" private LocalDateTime end;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates an event with the given content, start time and end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" * @param name the content of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" * @param start the start time of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" * @param end the end time of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" public Event(String name, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" * Data representation of the event, to be stored in the disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" * @return data representation of the event to be stored in disk","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" public String data() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" return \"E \" + super.data()","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" + \" /from \" + DateTimeManager.dateToStringData(this.start)","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" + \" /to \" + DateTimeManager.dateToStringData(this.end);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this event is happening on the given date.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" * @param date the datetime to check against","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" * @return whether the event is happening on the given date","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" public boolean containsDate(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" return (this.start.toLocalDate().isBefore(date) || this.start.toLocalDate().equals(date))","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 (this.end.toLocalDate().isAfter(date) || this.end.toLocalDate().equals(date));","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" * String representation of this event, to be printed in UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" * @return string representation of this event to be printed in UI","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" + \" (from: \" + DateTimeManager.dateToDisplay(this.start)","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" + \" to: \" + DateTimeManager.dateToDisplay(this.end) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this event is the same as another task.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" * It is the same if it is the same event, with same content, start and end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this event is the same as another task","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof Event) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" Event anotherEvent \u003d (Event) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" return super.equals(another)","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 this.start.equals(anotherEvent.start)","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 this.end.equals(anotherEvent.end);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":77}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" * Represent a task that the user requested to add.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":" * Three possible types of task: todo, deadline and event.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":" * This is a base class, to be inherited.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" private String name;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates the task with the given name.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" * @param name content of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" * Marks the task as having been done.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" * Marks the task as having not been done.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether the task has been done.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" * @return whether the task has been done","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" return this.isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" * Converts the current task to a string that can be stored in the disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" * @return the string to be stored in disk","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" public String data() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" return (this.isDone ? \"1 \" : \"0 \") + this.name;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this task \"contains\" the date.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" * Definition of \"contains\" to be decided by child classes.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" * @param dateTime the datetime to check against","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this task contains the date","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" public boolean containsDate(LocalDate dateTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" * Checks if this task content contains the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" * @param string the input to check against","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this task content contains the input","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" public boolean containsString(String string) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" return this.name.contains(string);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" * String representation of this task, to be printed in UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" * @return the string representation to be printed in UI","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" return \"[\" + (this.isDone ? \"X\" : \" \") + \"] \" + this.name;","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this task is the same as another task, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this task is the same as the given task","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof Task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" Task anotherTask \u003d (Task) another;","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" return this.name.equals(anotherTask.name)","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" \u0026\u0026 this.isDone \u003d\u003d anotherTask.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"nknguyenhc":94}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" * Represents and organises a list of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" * Thrown if a function is trying to access a task index out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" public static class TaskIndexOutOfRange extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" private TaskIndexOutOfRange() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates the task list with no task.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" * Creates a new empty task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates the task list with the given task.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" * @param taskList the task list to start with","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" * Adds a task to the end of the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" * @param task the task to add","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" * Marks a task with the given index as done","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" * @param index the task index to mark done","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" * @return the task that has been marked done","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" * @throws TaskIndexOutOfRange if the task index given is out of range","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" public Task markTaskAsDone(int index) throws TaskIndexOutOfRange {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.get(index).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" return this.taskList.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" throw new TaskIndexOutOfRange();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" * Marks a task with the given index as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" * @param index the task index to mark as not done","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" * @return the task that has been marked not done","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" * @throws TaskIndexOutOfRange if the task index given is out of range","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" public Task markTaskAsNotDone(int index) throws TaskIndexOutOfRange {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.get(index).markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" return this.taskList.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" throw new TaskIndexOutOfRange();","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" * Deletes a task with the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" * @param index the task index to delete","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" * @return the task that has been deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" * @throws TaskIndexOutOfRange if the task index given is out of range","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" public Task deleteTask(int index) throws TaskIndexOutOfRange {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" Task task \u003d this.taskList.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" this.taskList.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" throw new TaskIndexOutOfRange();","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" * Displays the list of task with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" * @param taskList the task list to display","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date to include deadlines before and events happening on,","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" * null if to not filter by date","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" private static void displayTasks(ArrayList\u003cTask\u003e taskList, boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" if (isExcludingDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" taskList.removeIf(Task::isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" if (date !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" taskList.removeIf(task -\u003e !task.containsDate(date));","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" System.out.println((i + 1) + \". \" + taskList.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" * Displays tasks with the given filters.","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":" * Assume that there is no filtering by task type (todo/deadline/event)","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date to filter in deadlines before and events happening on","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" public void displayTasks(boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e taskList \u003d (ArrayList\u003cTask\u003e) this.taskList.clone();","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":" TaskList.displayTasks(taskList, isExcludingDone, date);","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" * Displays to-do tasks with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to filter out tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" public void displayTodos(boolean isExcludingDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e taskList \u003d (ArrayList\u003cTask\u003e) this.taskList.clone();","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" taskList.removeIf(task -\u003e !(task instanceof ToDo));","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" TaskList.displayTasks(taskList, isExcludingDone, null);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" * Displays deadlines with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to filter out tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date to choose deadlines with end time before,","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":" * null if to not filter by date","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" public void displayDeadlines(boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e taskList \u003d (ArrayList\u003cTask\u003e) this.taskList.clone();","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" taskList.removeIf(task -\u003e !(task instanceof Deadline));","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" TaskList.displayTasks(taskList, isExcludingDone, date);","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" * Displays events with the given filters.","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to filter out tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date to choose events happening on,","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" * null if to not filter by date","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"nknguyenhc"},"content":" public void displayEvents(boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e taskList \u003d (ArrayList\u003cTask\u003e) this.taskList.clone();","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"nknguyenhc"},"content":" taskList.removeIf(task -\u003e !(task instanceof Event));","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"nknguyenhc"},"content":" TaskList.displayTasks(taskList, isExcludingDone, date);","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":" * Returns the number of tasks in this task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"nknguyenhc"},"content":" * @return number of tasks in this task list","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" public int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"nknguyenhc"},"content":" * Save data to a given storage,","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"nknguyenhc"},"content":" * by first converting this list of task to storage-readable form.","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"nknguyenhc"},"content":" * @param storage the storage to save data to","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"nknguyenhc"},"content":" * @throws Storage.FileIoException if there is an IO error","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"nknguyenhc"},"content":" public void saveData(Storage storage) throws Storage.FileIoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"nknguyenhc"},"content":" StringBuilder data \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"nknguyenhc"},"content":" for (Task task: this.taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"nknguyenhc"},"content":" data.append(task.data()).append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"nknguyenhc"},"content":" storage.saveData(data.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" * Display the tasks that match the given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":" * @param input the search parameter","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"nknguyenhc"},"content":" public void showResults(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e list \u003d (ArrayList\u003cTask\u003e) this.taskList.clone();","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"nknguyenhc"},"content":" list.removeIf(task -\u003e !task.containsString(input));","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"nknguyenhc"},"content":" TaskList.displayTasks(list, false, null);","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nknguyenhc":188}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":" * Represent a to-do task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":" * A to-do task does not have a start or end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates the to-do task with the given content.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * @param name the content of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" * Data representation of this to-do task, to be stored in disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" * @return the string representation of this task in disk","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" public String data() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" return \"T \" + super.data();","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" * String representation of this to-do task to be printed in UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" * @return the string representation of this task to be printed in UI","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" * Checks whether this to-do task is the same as another task, for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" * @param another the object to compare with","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" * @return whether this to-do task is the same as the given other task","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" public boolean equals(Object another) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" if (another instanceof ToDo) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" return super.equals(another);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":46}},{"path":"src/main/java/duke/ui/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.DateTimeManager;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * Deals with standard input and output.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" * Prints out the output and takes in input as requested.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"public class UI {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" private static final String HORIZONTAL_LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" private final Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" private final String errorPrepend;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" private final String errorAppend;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" * Instantiates a UI, with a string to prepend and a string to append every error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" * @param errorPrepend the string to prepend every error message","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" * @param errorAppend the string to append every error message","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" public UI(String errorPrepend, String errorAppend) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" this.errorPrepend \u003d errorPrepend;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" this.errorAppend \u003d errorAppend;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" * Invoked at the start of the interaction, to greet the user,","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" * after data has been loaded / error has been handled.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" * @param name the name of the bot","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" public void start(String name) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(UI.HORIZONTAL_LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" System.out.print(\"Hello from \");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(name);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" * Invoked when data is being loaded.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" public void notifyDataLoading() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(UI.HORIZONTAL_LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Loading data from hard disk ...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" * Invoked when data has been loaded.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" public void notifyDataLoaded() {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Done loading.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" * Invoked when there is an IO error upon loading","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" public void notifyLoadingIoError() {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Quack, an error has occurred while trying to save data to hard disk.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Starting with an empty task list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" * Notifies that file is corrupted and cannot be loaded,","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" * and ask the user on the course of action to take.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" * @return whether the user has decided to exit the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" public boolean handleFileCorrupted() {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Quack, memory was found to be corrupted!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"What do you wish to do?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"1. Quit, let me restore the data manually\");","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"2. Continue with an empty task list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" while (true) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" String response \u003d this.takeInput(\"Please indicate your option (1/2): \");","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" switch (response) {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" case \"1\":","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" this.exit();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" case \"2\":","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" System.out.print(\"Quack, I do not understand your option, please indicate again (1/2): \");","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" * Takes input from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" * @return the input from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" public String takeInput(String prompt) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(UI.HORIZONTAL_LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" System.out.print(prompt);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" String input \u003d this.scanner.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(UI.HORIZONTAL_LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" return input;","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" * Invoked at the end of the programme, to leave an exit message to user.","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" public void exit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(UI.HORIZONTAL_LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" this.scanner.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" * Notifies user of a user-input error.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":" public void notifyError(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(this.errorPrepend + message + this.errorAppend);","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":" * Notifies user that a task has been marked done","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":" * @param task the task to notify","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" public void notifyMarkDone(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" * Notifies user that a task has been marked not done","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" * @param task the task to notify","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" public void notifyMarkNotDone(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":" * Notifies user that a task has been removed","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" * @param task the task removed","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":" public void notifyRemoved(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Noted, I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" * Denotes the type of task to be indicated.","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" public enum Type {","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" TODO,","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":" DEADLINE,","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"nknguyenhc"},"content":" EVENT,","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"nknguyenhc"},"content":" DEFAULT","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":" * Notifies that a list of task is going to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" * Does not display the tasks itself.","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":" * @param type type of task (todo/deadline/event)","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"nknguyenhc"},"content":" * @param isExcludingDone whether to exclude tasks already done","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"nknguyenhc"},"content":" * @param date the date before which to display deadlines before or events happening on,","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" * null if not to filter by date","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"nknguyenhc"},"content":" public void notifyList(Type type, boolean isExcludingDone, LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":" String typeString;","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"nknguyenhc"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"nknguyenhc"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"nknguyenhc"},"content":" typeString \u003d \"to-do tasks\";","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"nknguyenhc"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"nknguyenhc"},"content":" typeString \u003d \"deadlines\";","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"nknguyenhc"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"nknguyenhc"},"content":" typeString \u003d \"events\";","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"nknguyenhc"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"nknguyenhc"},"content":" typeString \u003d \"tasks\";","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"nknguyenhc"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" \"Alright, here is your list of \"","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":" + typeString","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"nknguyenhc"},"content":" + (isExcludingDone ? \" not done\" : \"\")","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"nknguyenhc"},"content":" + (date !\u003d null","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"nknguyenhc"},"content":" ? (type \u003d\u003d Type.DEADLINE","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"nknguyenhc"},"content":" ? \" before \"","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"nknguyenhc"},"content":" : type \u003d\u003d Type.EVENT","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"nknguyenhc"},"content":" ? \" happening on \"","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"nknguyenhc"},"content":" : \" for \"","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"nknguyenhc"},"content":" ) + DateTimeManager.dateToDisplay(date)","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"nknguyenhc"},"content":" : \"\"","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"nknguyenhc"},"content":" ) + \":\"","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"nknguyenhc"},"content":" * Notifies the user that a task has been added.","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"nknguyenhc"},"content":" * @param task the task added","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"nknguyenhc"},"content":" public void notifyAdded(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Got it, I\u0027ve added this task to the list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"nknguyenhc"},"content":" * Echoes an input back to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"nknguyenhc"},"content":" * @param input the input from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"nknguyenhc"},"content":" public void echo(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"nknguyenhc"},"content":" if (input.equals(\"quack\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Quack quack quack\");","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"nknguyenhc"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Quack, what do you mean when you say \" + input);","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"nknguyenhc"},"content":" * Notifies the user that data is in the process of being saved to disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"nknguyenhc"},"content":" public void notifyDataSaving() {","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Saving data ...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"nknguyenhc"},"content":" * Notifies the user that data has been saved to disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"nknguyenhc"},"content":" public void notifyDataSaved() {","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Done saving\");","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"nknguyenhc"},"content":" public void showTaskCount(int count) {","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Now you have \" + count + \" in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"nknguyenhc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"nknguyenhc"},"content":" * Notify the user of the search result.","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"nknguyenhc"},"content":" * @param input the search parameter","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"nknguyenhc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"nknguyenhc"},"content":" public void notifyFind(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"nknguyenhc"},"content":" System.out.println(\"Here are the tasks that match \\\"\" + input + \"\\\"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":241}},{"path":"src/test/java/duke/parse/DateTimeManagerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"public class DateTimeManagerTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" private void notifyError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" fail(\"should not throw exception\");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" public void parseInputTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.now(),","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(22, 13)","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" ),","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.inputToDate(\"today 22:13\")","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.now(),","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(22, 13)","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" ),","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.inputToDate(\"today 10:13pm\")","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.of(2023, 12, 20),","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(12, 13)","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" ),","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.inputToDate(\"20/12/2023 12:13pm\")","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.DateParseException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.inputToDate(\"today 13pm\")","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.DateParseException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.inputToDate(\"30/2/2024 10am\")","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.DateParseException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.inputToDate(\"10/2/2024 10:70am\")","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" public void parseDateTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.now(),","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseDate(\"today\")","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.now().plusDays(1),","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseDate(\"tmr\")","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.of(2023, 9, 10),","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseDate(\"10/9/2023\")","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.of(2023, 1, 1),","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseDate(\"1/1/2023\")","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.DateParseException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseDate(\"31/9/2023\")","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" public void parseTimeTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(22, 0),","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseTime(\"10pm\")","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(16, 33),","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseTime(\"4:33pm\")","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(16, 33),","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseTime(\"16:33\")","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.DateParseException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseTime(\"24:13\")","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.DateParseException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.parseTime(\"15:00pm\")","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":" } catch (DateTimeManager.DateParseException | DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" public void dateToStringDataTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":" \"12/9/2023 12:0\",","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.dateToStringData(LocalDateTime.of(2023, 9, 12, 12, 0))","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" \"12/9/2023 14:27\",","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.dateToStringData(LocalDateTime.of(2023, 9, 12, 14, 27))","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" \"1/10/2023 0:0\",","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.dateToStringData(LocalDateTime.of(2023, 10, 1, 0, 0))","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" public void dateDisplayTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" \"today 10:11am\",","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.dateToDisplay(","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.now(),","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(10, 11)","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":" )","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" )","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":" \"tomorrow 12:13am\",","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.dateToDisplay(","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":" LocalDate.now(),","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" LocalTime.of(0, 13)","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" ).plusDays(1)","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":" )","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"nknguyenhc"},"content":" \"5/9/2023 12:07pm\",","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.dateToDisplay(","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(2023, 9, 5, 12, 7)","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":" )","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"nknguyenhc"},"content":" \"2/9/2023 02:00pm\",","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"nknguyenhc"},"content":" DateTimeManager.dateToDisplay(","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(2023, 9, 2, 14, 0)","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" )","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":165}},{"path":"src/test/java/duke/parse/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.parse;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.EchoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.EmptyCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"import duke.parse.command.SaveCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" private void notifyError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" fail(\"should not throw any error\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" public void emptyTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(new EmptyCommand(), Parser.parse(\"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" public void exitTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(new ExitCommand(), Parser.parse(\"exit\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(new ExitCommand(), Parser.parse(\"bye\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" public void listTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" new ListCommand(false, null, ListCommand.Type.DEFAULT),","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list\")","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" new ListCommand(false, LocalDate.now(), ListCommand.Type.DEFAULT),","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list today\")","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" new ListCommand(true, null, ListCommand.Type.DEFAULT),","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list -d\")","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" new ListCommand(false, null, ListCommand.Type.TODO),","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list todo\")","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" new ListCommand(true, null, ListCommand.Type.TODO),","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list todo -d\")","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" new ListCommand(true, LocalDate.now().plusDays(1), ListCommand.Type.DEADLINE),","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list deadline tmr -d\")","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" new ListCommand(false, LocalDate.of(2023, 9, 5), ListCommand.Type.EVENT),","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list event 5/9/2023\")","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" Parser.ParseError.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list event 31/9/2023\")","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" Parser.ParseError.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"list event 12-12\")","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" public void markTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" new MarkCommand(true, 1),","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"mark 2\")","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" new MarkCommand(true, 4),","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"mark 5\")","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" new MarkCommand(false, 3),","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"unmark 4\")","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" Parser.ParseError.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"mark 0\")","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" Parser.ParseError.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"unmark -1\")","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" public void addTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" new AddCommand(new ToDo(\"do sth\")),","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"todo do sth\")","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" new AddCommand(new Deadline(","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" \"do sth\",","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(LocalDate.now(), LocalTime.of(22, 0))","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" )),","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"deadline do sth /by today 10pm\")","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" new AddCommand(new Event(","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" \"attend sth\",","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(LocalDate.now(), LocalTime.of(10, 0)),","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(2023, 9, 5, 21, 2)","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":" )),","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"event attend sth /from today 10am /to 5/9/2023 9:02pm\")","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":" Parser.ParseError.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"event /from today 10am /to tmr 9pm\")","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":" Parser.ParseError.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"event do sth /from today 19:70 /to tmr 10am\")","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":" public void saveTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"nknguyenhc"},"content":" new SaveCommand(),","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"save\")","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"nknguyenhc"},"content":" public void echoTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"nknguyenhc"},"content":" new EchoCommand(\"quack\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"quack\")","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"nknguyenhc"},"content":" new EchoCommand(\"fevwnqbo\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"nknguyenhc"},"content":" Parser.parse(\"fevwnqbo\")","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"nknguyenhc"},"content":" } catch (Parser.ParseError e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":182}},{"path":"src/test/java/duke/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"package duke.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" private void notifyError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" fail(\"file should not be corrupted!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" private void notifyIO() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" fail(\"IO error encountered\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" private void writeBeforeTest(String fileName, String content) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" FileWriter writer \u003d new FileWriter(fileName);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" writer.write(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" public void normalReadTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" writeBeforeTest(","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" \"task-list.txt\",","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" \"T 0 task 1\" + \"\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" + \"D 1 task 2 /by 10/12/2023 15:0\" + \"\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" + \"E 0 task 3 /from 30/8/2023 0:30 /to 30/9/2023 12:12\"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" ToDo todo \u003d new ToDo(\"task 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" Deadline deadline \u003d new Deadline(","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" \"task 2\",","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(2023, 12, 10, 15, 0)","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" Event event \u003d new Event(","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" \"task 3\",","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(2023, 8, 30, 0, 30),","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" LocalDateTime.of(2023, 9, 30, 12, 12)","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" list.add(todo);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" list.add(deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" list.add(event);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" assertEquals(","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" list,","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" new Storage(\"task-list.txt\").readFromDisk()","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" } catch (Storage.FileCorruptedException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" notifyError();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" notifyIO();","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" public void corruptedReadTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" writeBeforeTest(","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" \"task-list.txt\",","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" \"fnewopvnqwpiniw bjweipgjqwpjp\"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" Storage.FileCorruptedException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" new Storage(\"task-list.txt\").readFromDisk()","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" writeBeforeTest(","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" \"task-list.txt\",","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" \"T t task 7\"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" Storage.FileCorruptedException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" new Storage(\"task-list.txt\").readFromDisk()","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" writeBeforeTest(","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" \"task-list.txt\",","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" \"D 0 no end time\"","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" Storage.FileCorruptedException.class, () -\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" new Storage(\"task-list.txt\").readFromDisk()","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" notifyIO();","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nknguyenhc":104}},{"path":"text-ui-test/expected/add-task-error.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"Loading data from hard disk ...","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"Done loading.","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"Hello from Quack-NKN","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"What can I do for you?","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"Now you have 1 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"Quack, keyword \u0027/from\u0027 not found. It must be present for me to mark the start time!","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"Quack, no empty event please!","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"Quack, no empty event please!","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"Quack, no empty start time please!","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":"Quack, no empty end time please!","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":"Quack, keyword \u0027/by\u0027 not found.It must be present for me to mark the deadline time!","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":"Quack, no empty deadline time please!","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":"Quack, no empty deadline task please!","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":"Bye. Hope to see you again soon!","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":45}},{"path":"text-ui-test/expected/delete-task.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"Loading data from hard disk ...","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"Done loading.","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"Hello from Quack-NKN","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"What can I do for you?","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] do some stuff quack","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"Now you have 1 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"[E][ ] hello (from: 8pm tday to: 8pm tmr)","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"Now you have 2 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"[D][ ] finish some stuff (by: this Sunday)","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"Now you have 3 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do some stuff quack","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":"2. [E][ ] hello (from: 8pm tday to: 8pm tmr)","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":"3. [D][ ] finish some stuff (by: this Sunday)","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":"Quack, the task number you provide does not exist!","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do some stuff quack","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"2. [E][ ] hello (from: 8pm tday to: 8pm tmr)","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":"3. [D][ ] finish some stuff (by: this Sunday)","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":"Noted, I\u0027ve removed this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] do some stuff quack","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":"Now you have 2 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":"1. [E][ ] hello (from: 8pm tday to: 8pm tmr)","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":"2. [D][ ] finish some stuff (by: this Sunday)","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":"Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":"[D][X] finish some stuff (by: this Sunday)","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":"Noted, I\u0027ve removed this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":"[D][X] finish some stuff (by: this Sunday)","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":"Now you have 1 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":"1. [E][ ] hello (from: 8pm tday to: 8pm tmr)","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":"Bye. Hope to see you again soon!","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":59}},{"path":"text-ui-test/expected/mark-as-done.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"Loading data from hard disk ...","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"Done loading.","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"Hello from Quack-NKN","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"What can I do for you?","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"Now you have 1 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"Now you have 2 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"2. [T][ ] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] task3","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":"Now you have 3 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":"Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":"[T][X] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"2. [T][X] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":"3. [T][ ] task3","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":"Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":"[T][X] task3","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":"2. [T][X] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":"3. [T][X] task3","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":"OK, I\u0027ve marked this task as not done yet:","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":"2. [T][ ] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":"3. [T][X] task3","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":"Quack, the task number you provide does not exist!","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":"2. [T][ ] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":"3. [T][X] task3","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":"Quack, the task number you provide does not exist!","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":"2. [T][ ] do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":"3. [T][X] task3","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":"Bye. Hope to see you again soon!","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":72}},{"path":"text-ui-test/expected/task-type.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"Loading data from hard disk ...","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"Done loading.","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"Hello from Quack-NKN","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"What can I do for you?","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"[T][ ] buy grocery","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"Now you have 1 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"[E][ ] Orbital splashdown (from: tday 6pm to: tday 9pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"Now you have 2 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"[D][ ] finish this project (by: Thurs 2359)","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"Now you have 3 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":"[E][ ] GDG-workshop (from: tmr 7.30pm to: tmr 9.30pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":"Now you have 4 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] buy grocery","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":"2. [E][ ] Orbital splashdown (from: tday 6pm to: tday 9pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":"3. [D][ ] finish this project (by: Thurs 2359)","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":"4. [E][ ] GDG-workshop (from: tmr 7.30pm to: tmr 9.30pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":"Quack, the task number you provide does not exist!","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":"Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":"[E][X] GDG-workshop (from: tmr 7.30pm to: tmr 9.30pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] buy grocery","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":"2. [E][ ] Orbital splashdown (from: tday 6pm to: tday 9pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":"3. [D][ ] finish this project (by: Thurs 2359)","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":"4. [E][X] GDG-workshop (from: tmr 7.30pm to: tmr 9.30pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":"Quack, keyword \u0027/by\u0027 not found.It must be present for me to mark the deadline time!","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":"[D][ ] CS2109S PS0 (by: 26 Aug)","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":"Now you have 5 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":"Quack, keyword \u0027/to\u0027 not found. It must be present after the \u0027/from\u0027 keyword for me to mark the end time!","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":"Quack, keyword \u0027/to\u0027 not found. It must be present after the \u0027/from\u0027 keyword for me to mark the end time!","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":"[E][ ] cchess training (from: 7pm Mon to: 9pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":"Now you have 6 in the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":"1. [T][ ] buy grocery","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":"2. [E][ ] Orbital splashdown (from: tday 6pm to: tday 9pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":"3. [D][ ] finish this project (by: Thurs 2359)","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":"4. [E][X] GDG-workshop (from: tmr 7.30pm to: tmr 9.30pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":"5. [D][ ] CS2109S PS0 (by: 26 Aug)","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":"6. [E][ ] cchess training (from: 7pm Mon to: 9pm)","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":"In: ____________________________________________________________","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":"Bye. Hope to see you again soon!","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":"____________________________________________________________","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":76}},{"path":"text-ui-test/input/add-task-error.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"todo do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"event event tday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"event /from 9pm /to 11pm","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"event /from /to 9pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"event talk /from /to ","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"event talk /from 12am /to ","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"deadline /from 9pm","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"deadline do sth /by ","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"deadline /by 9pm","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":12}},{"path":"text-ui-test/input/delete-task.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"todo do some stuff quack","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"event hello /from 8pm tday /to 8pm tmr","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"deadline finish some stuff /by this Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"delete 4","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"delete 1","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"delete 2","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":12}},{"path":"text-ui-test/input/mark-as-done.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"todo do task 1","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"todo do task 2","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"todo task3","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"mark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"unmark 6","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":15}},{"path":"text-ui-test/input/task-type.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nknguyenhc"},"content":"todo buy grocery","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"event Orbital splashdown /from tday 6pm /to tday 9pm","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"deadline finish this project /by Thurs 2359","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"event GDG-workshop /from tmr 7.30pm /to tmr 9.30pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":"mark 10","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"mark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"deadline CS2109S PS0","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"deadline CS2109S PS0 /by 26 Aug","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":"event cchess training /to 9pm Mon /from 7pm Mon","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"event cchess training /from 7pm Mon /t 9pm","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":"event cchess training /from 7pm Mon /to 9pm","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":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":"nknguyenhc"},"content":"java -classpath ..\\bin Duke \u003c .\\input\\mark-as-done.txt \u003e .\\actual\\mark-as-done.txt","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":"FC .\\actual\\mark-as-done.txt .\\expected\\mark-as-done.txt","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"java -classpath ..\\bin Duke \u003c .\\input\\task-type.txt \u003e .\\actual\\task-type.txt","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":"FC .\\actual\\task-type.txt .\\expected\\task-type.txt","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"java -classpath ..\\bin Duke \u003c .\\input\\add-task-error.txt \u003e .\\actual\\add-task-error.txt","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":"FC .\\actual\\add-task-error.txt .\\expected\\add-task-error.txt","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":"java -classpath ..\\bin Duke \u003c .\\input\\delete-task.txt \u003e .\\actual\\delete-task.txt","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":"FC .\\actual\\delete-task.txt .\\expected\\delete-task.txt","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nknguyenhc":10,"-":17}}] diff --git a/nknguyenhc_ip_master/commits.json b/nknguyenhc_ip_master/commits.json index 3abf366d..09c1ad5c 100644 --- a/nknguyenhc_ip_master/commits.json +++ b/nknguyenhc_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"nknguyenhc":[{"date":"2023-08-22","commitResults":[{"hash":"f7cbc1a436cd8f609331dc37b504ee4d8458ecef","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"Rename, greet and exit.\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"e78ec9c584e5124f2c17568c73af1adefa60873f","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"Echo\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":6}}},{"hash":"75d094220a91d141542b35b45f51a95370989515","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"Add, list\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":18}}}]},{"date":"2023-08-23","commitResults":[{"hash":"400d3e7fa5b84d70305633575c738a7cb94c8c1e","isMergeCommit":false,"messageTitle":"Level 3: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":1}}},{"hash":"3fe5eaa3b354bc9076d6b5656c7923e74ee4b2f5","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"Todo, Event, Deadline\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":159,"deletions":27}}},{"hash":"983c44c52736abaff98ce3048f2bfbf5a9aa9dca","isMergeCommit":false,"messageTitle":"Automated Tests","messageBody":"Tested mark as done and task types\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":314,"deletions":0},"bat":{"insertions":6,"deletions":4}}},{"hash":"ba23bac1a1594846fc431fc58e0ce5b82b9bc54f","isMergeCommit":false,"messageTitle":"Error Handling","messageBody":"More extensive error handling on adding task. Test cases written.\nIf-else statements in interact changed to switch statement\n","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":96,"deletions":0},"java":{"insertions":80,"deletions":38},"bat":{"insertions":5,"deletions":4}}},{"hash":"d1335f293ccc42682ea796223284ef65fca4f8d3","isMergeCommit":false,"messageTitle":"Documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"c0ac2dcf06f2b9ee0d446bf33c32db143f3b9dd1","isMergeCommit":false,"messageTitle":"Level 6 Delete task","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":124,"deletions":0},"java":{"insertions":21,"deletions":0},"bat":{"insertions":4,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"72fcfde0e67257e2dee5339ad1dea15d4b659293","isMergeCommit":false,"messageTitle":"Exclude test results","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":240}}},{"hash":"bf26476ac6b927765e42003e308838568d6287a3","isMergeCommit":false,"messageTitle":"Coding conventions","messageBody":"Changed static constant name, indicated constants as final\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":9}}}]},{"date":"2023-08-29","commitResults":[{"hash":"ab3696745c6173638c12fba92ffda0705fe41501","isMergeCommit":false,"messageTitle":"Save data to hard disk","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":7},"java":{"insertions":162,"deletions":8}}},{"hash":"01b61ec1b37e85c124fe56562c48cb369fce88bb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"ca07f3a74aeb2532a87cc0c7d59c0b75aa04b4b7","isMergeCommit":false,"messageTitle":"Parse \u0026 display datetime","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":171,"deletions":14}}},{"hash":"4fb1c5f298b81256f0a1da890e9771da8ef39f48","isMergeCommit":false,"messageTitle":"Stretch dates","messageBody":"List based on dates and task type\n","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":176,"deletions":39}}},{"hash":"84775c86070a2a2d4926659bce14d23cca5a69b9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"354d16051f4e145dbfb66e5367f1e5271963079d","isMergeCommit":false,"messageTitle":"TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":171,"deletions":91}}},{"hash":"1ecdca369b694c5fcdf8d7ebf071567ca8b41024","isMergeCommit":false,"messageTitle":"Reorganised DateParseException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":8}}},{"hash":"13f24f6058304535365224fe125dd3bf34c6a295","isMergeCommit":false,"messageTitle":"Storage Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":82}}}]},{"date":"2023-08-31","commitResults":[{"hash":"d87433932683862b8ec8874c81eb58995a17b6ea","isMergeCommit":false,"messageTitle":"Parse and UI","messageBody":"Bug fixes as well\n","fileTypesAndContributionMap":{"java":{"insertions":574,"deletions":371}}},{"hash":"5a29165f9b41c48aa3632c45cf060aa2b115db66","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"4d6e4e701b7f6c2c905069877e546890954c6b05","isMergeCommit":false,"messageTitle":"Packaging","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":242,"deletions":162}}},{"hash":"db220d07cfd373de0a96889627e19e263c45c5d4","isMergeCommit":false,"messageTitle":"Update Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"7626da5b1166449922cba54e2b3954d5760b4754","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9e8ef59706927689dcce033a1fabd60f8bcad8cf","isMergeCommit":false,"messageTitle":"Change package name in gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"ba952928756b6f221cacf1d1ac7b33fd1eab8409","isMergeCommit":false,"messageTitle":"Unit Tests","messageBody":"Added equals method to all classes implementing Command, for testing purpose\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":580,"deletions":15}}},{"hash":"e527d18e0693d94d9fa7069813c453fc9c1a5d03","isMergeCommit":false,"messageTitle":"Coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":240,"deletions":240}}},{"hash":"439034444988535dbc74c5f89f9e8ad361b1bfd1","isMergeCommit":false,"messageTitle":"Docs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":521,"deletions":27}}},{"hash":"d73e409e0d8c5cb72da6ade82ceccf5ba13b4769","isMergeCommit":false,"messageTitle":"Add task count notif","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"3b3cd6f195ed787a0b8d947f7e72069d9ac5bfa9","isMergeCommit":false,"messageTitle":"Find task","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":206,"deletions":138}}},{"hash":"2328c902ec34c9ba5ceb364720494e38a9e03f43","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"84111325ae14f0fd1936d5842bda0113c70d14c8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f28ec0c330069363c3b5dc32436de091596acd78","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"nknguyenhc":{"java":2366,"md":0,"fxml":0,"sh":0,"bat":10,"gradle":1,"txt":306}},"authorContributionVariance":{"nknguyenhc":752353.06},"authorDisplayNameMap":{"nknguyenhc":"CS2103T-T08-2 NGUY..UYEN"}} +{"authorDailyContributionsMap":{"nknguyenhc":[{"date":"2023-08-22","commitResults":[{"hash":"f7cbc1a436cd8f609331dc37b504ee4d8458ecef","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"Rename, greet and exit.\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"e78ec9c584e5124f2c17568c73af1adefa60873f","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"Echo\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":6}}},{"hash":"75d094220a91d141542b35b45f51a95370989515","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"Add, list\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":18}}}]},{"date":"2023-08-23","commitResults":[{"hash":"400d3e7fa5b84d70305633575c738a7cb94c8c1e","isMergeCommit":false,"messageTitle":"Level 3: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":1}}},{"hash":"3fe5eaa3b354bc9076d6b5656c7923e74ee4b2f5","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"Todo, Event, Deadline\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":159,"deletions":27}}},{"hash":"983c44c52736abaff98ce3048f2bfbf5a9aa9dca","isMergeCommit":false,"messageTitle":"Automated Tests","messageBody":"Tested mark as done and task types\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":314,"deletions":0},"bat":{"insertions":6,"deletions":4}}},{"hash":"ba23bac1a1594846fc431fc58e0ce5b82b9bc54f","isMergeCommit":false,"messageTitle":"Error Handling","messageBody":"More extensive error handling on adding task. Test cases written.\nIf-else statements in interact changed to switch statement\n","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":96,"deletions":0},"java":{"insertions":80,"deletions":38},"bat":{"insertions":5,"deletions":4}}},{"hash":"d1335f293ccc42682ea796223284ef65fca4f8d3","isMergeCommit":false,"messageTitle":"Documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"c0ac2dcf06f2b9ee0d446bf33c32db143f3b9dd1","isMergeCommit":false,"messageTitle":"Level 6 Delete task","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":124,"deletions":0},"java":{"insertions":21,"deletions":0},"bat":{"insertions":4,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"72fcfde0e67257e2dee5339ad1dea15d4b659293","isMergeCommit":false,"messageTitle":"Exclude test results","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":240}}},{"hash":"bf26476ac6b927765e42003e308838568d6287a3","isMergeCommit":false,"messageTitle":"Coding conventions","messageBody":"Changed static constant name, indicated constants as final\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":9}}}]},{"date":"2023-08-29","commitResults":[{"hash":"ab3696745c6173638c12fba92ffda0705fe41501","isMergeCommit":false,"messageTitle":"Save data to hard disk","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":7},"java":{"insertions":162,"deletions":8}}},{"hash":"01b61ec1b37e85c124fe56562c48cb369fce88bb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"ca07f3a74aeb2532a87cc0c7d59c0b75aa04b4b7","isMergeCommit":false,"messageTitle":"Parse \u0026 display datetime","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":171,"deletions":14}}},{"hash":"4fb1c5f298b81256f0a1da890e9771da8ef39f48","isMergeCommit":false,"messageTitle":"Stretch dates","messageBody":"List based on dates and task type\n","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":176,"deletions":39}}},{"hash":"84775c86070a2a2d4926659bce14d23cca5a69b9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"354d16051f4e145dbfb66e5367f1e5271963079d","isMergeCommit":false,"messageTitle":"TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":171,"deletions":91}}},{"hash":"1ecdca369b694c5fcdf8d7ebf071567ca8b41024","isMergeCommit":false,"messageTitle":"Reorganised DateParseException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":8}}},{"hash":"13f24f6058304535365224fe125dd3bf34c6a295","isMergeCommit":false,"messageTitle":"Storage Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":82}}}]},{"date":"2023-08-31","commitResults":[{"hash":"d87433932683862b8ec8874c81eb58995a17b6ea","isMergeCommit":false,"messageTitle":"Parse and UI","messageBody":"Bug fixes as well\n","fileTypesAndContributionMap":{"java":{"insertions":574,"deletions":371}}},{"hash":"5a29165f9b41c48aa3632c45cf060aa2b115db66","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"4d6e4e701b7f6c2c905069877e546890954c6b05","isMergeCommit":false,"messageTitle":"Packaging","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":242,"deletions":162}}},{"hash":"db220d07cfd373de0a96889627e19e263c45c5d4","isMergeCommit":false,"messageTitle":"Update Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"7626da5b1166449922cba54e2b3954d5760b4754","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9e8ef59706927689dcce033a1fabd60f8bcad8cf","isMergeCommit":false,"messageTitle":"Change package name in gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"ba952928756b6f221cacf1d1ac7b33fd1eab8409","isMergeCommit":false,"messageTitle":"Unit Tests","messageBody":"Added equals method to all classes implementing Command, for testing purpose\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":580,"deletions":15}}},{"hash":"e527d18e0693d94d9fa7069813c453fc9c1a5d03","isMergeCommit":false,"messageTitle":"Coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":240,"deletions":240}}},{"hash":"439034444988535dbc74c5f89f9e8ad361b1bfd1","isMergeCommit":false,"messageTitle":"Docs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":521,"deletions":27}}},{"hash":"d73e409e0d8c5cb72da6ade82ceccf5ba13b4769","isMergeCommit":false,"messageTitle":"Add task count notif","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"3b3cd6f195ed787a0b8d947f7e72069d9ac5bfa9","isMergeCommit":false,"messageTitle":"Find task","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":206,"deletions":138}}},{"hash":"2328c902ec34c9ba5ceb364720494e38a9e03f43","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"84111325ae14f0fd1936d5842bda0113c70d14c8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f28ec0c330069363c3b5dc32436de091596acd78","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"2f5b6eaf834bc32292625d3385821b6c872a82f1","isMergeCommit":false,"messageTitle":"Check style","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":173,"deletions":160}}}]}]},"authorFileTypeContributionMap":{"nknguyenhc":{"java":2379,"md":0,"fxml":0,"sh":0,"bat":10,"gradle":6,"txt":306}},"authorContributionVariance":{"nknguyenhc":582347.0},"authorDisplayNameMap":{"nknguyenhc":"CS2103T-T08-2 NGUY..UYEN"}} diff --git a/owenyeo_ip_master/commits.json b/owenyeo_ip_master/commits.json index 8ce1f14e..21c7fbcf 100644 --- a/owenyeo_ip_master/commits.json +++ b/owenyeo_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"owenyeo":[{"date":"2023-08-23","commitResults":[{"hash":"1795e0430b6c33dba0cb82273ae40571f2f92f21","isMergeCommit":false,"messageTitle":"Added Skeleton code that outputs the required output as per source website. Added functionality to rename chatbot.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":10}}}]},{"date":"2023-08-24","commitResults":[{"hash":"413012363b9ff5f4b878e0fe934155b5392d95c8","isMergeCommit":false,"messageTitle":"Added echoing functionality Added functionality to read User input Added ability to exit chat when User Input is \"bye\" Provided documentation. Removed Message subclass due to redundancy.","messageBody":"","tags":["Level-2","Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":20}}},{"hash":"6390de9ac5672c7423960d145b1ca21265680528","isMergeCommit":false,"messageTitle":"Added the functionality of listing Added functionality to add items into list","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":3}}},{"hash":"b9fcb6aabba3f071f5710b8bff430b9ddc29ccaa","isMergeCommit":false,"messageTitle":"Added functionality to unmark and mark tasks as done","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":20}}},{"hash":"61b2190d55e210f50404f6b850dabc4c1c2a1693","isMergeCommit":false,"messageTitle":"Added functionality to add ToDo, Event, and Deadline Added a Command Enum for cleaner code Added new classes Task, Event, Todo, Deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":180,"deletions":36}}},{"hash":"7dfe76ed136f59e8c4256810c851d76e130799af","isMergeCommit":false,"messageTitle":"Added ChatBotException, InvalidCommandException, and InvalidDescrptionException. Added error handling in ChatBot.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":15}}},{"hash":"85de7a8f6f042e289cf8a4d990108e937cdf4378","isMergeCommit":false,"messageTitle":"Added delete functionality Added InvalidIndexException for number errors in mark, unmark, and delete.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":6}}}]},{"date":"2023-08-31","commitResults":[{"hash":"4fe58216de9bbcc76259411f3863519d9b2329ec","isMergeCommit":false,"messageTitle":"Added InvalidIndexException Added saveTasks to save data on a text file. Added loadTasks for potential future use.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":79,"deletions":19}}},{"hash":"3201c1952093818854059a2e688edec9443204b3","isMergeCommit":false,"messageTitle":"Improved on documentation Improved formatting of toSaveString in ChatBot.java Fixed bug where type of task is not correctly shown. Removed loadFile due to redundancy.","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":128,"deletions":78}}},{"hash":"2c3b2455a594dae4e0061a093ae8ebc943652b0a","isMergeCommit":false,"messageTitle":"Added functionality to store DateTime objects Added functionality to reformat DateTime when printing.","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":33,"deletions":15}}}]}]},"authorFileTypeContributionMap":{"owenyeo":{"java":568,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":1}},"authorContributionVariance":{"owenyeo":30062.062},"authorDisplayNameMap":{"owenyeo":"CS2103T-W12-4 OWEN..YANG"}} +{"authorDailyContributionsMap":{"owenyeo":[{"date":"2023-08-23","commitResults":[{"hash":"1795e0430b6c33dba0cb82273ae40571f2f92f21","isMergeCommit":false,"messageTitle":"Added Skeleton code that outputs the required output as per source website. Added functionality to rename chatbot.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":10}}}]},{"date":"2023-08-24","commitResults":[{"hash":"413012363b9ff5f4b878e0fe934155b5392d95c8","isMergeCommit":false,"messageTitle":"Added echoing functionality Added functionality to read User input Added ability to exit chat when User Input is \"bye\" Provided documentation. Removed Message subclass due to redundancy.","messageBody":"","tags":["Level-2","Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":20}}},{"hash":"6390de9ac5672c7423960d145b1ca21265680528","isMergeCommit":false,"messageTitle":"Added the functionality of listing Added functionality to add items into list","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":3}}},{"hash":"b9fcb6aabba3f071f5710b8bff430b9ddc29ccaa","isMergeCommit":false,"messageTitle":"Added functionality to unmark and mark tasks as done","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":20}}},{"hash":"61b2190d55e210f50404f6b850dabc4c1c2a1693","isMergeCommit":false,"messageTitle":"Added functionality to add ToDo, Event, and Deadline Added a Command Enum for cleaner code Added new classes Task, Event, Todo, Deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":180,"deletions":36}}},{"hash":"7dfe76ed136f59e8c4256810c851d76e130799af","isMergeCommit":false,"messageTitle":"Added ChatBotException, InvalidCommandException, and InvalidDescrptionException. Added error handling in ChatBot.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":15}}},{"hash":"85de7a8f6f042e289cf8a4d990108e937cdf4378","isMergeCommit":false,"messageTitle":"Added delete functionality Added InvalidIndexException for number errors in mark, unmark, and delete.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":6}}}]},{"date":"2023-08-31","commitResults":[{"hash":"4fe58216de9bbcc76259411f3863519d9b2329ec","isMergeCommit":false,"messageTitle":"Added InvalidIndexException Added saveTasks to save data on a text file. Added loadTasks for potential future use.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":79,"deletions":19}}},{"hash":"3201c1952093818854059a2e688edec9443204b3","isMergeCommit":false,"messageTitle":"Improved on documentation Improved formatting of toSaveString in ChatBot.java Fixed bug where type of task is not correctly shown. Removed loadFile due to redundancy.","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":128,"deletions":78}}},{"hash":"2c3b2455a594dae4e0061a093ae8ebc943652b0a","isMergeCommit":false,"messageTitle":"Added functionality to store DateTime objects Added functionality to reformat DateTime when printing.","messageBody":"","tags":["Level-8","A-Jar"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":33,"deletions":15}}}]}]},"authorFileTypeContributionMap":{"owenyeo":{"java":568,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":1}},"authorContributionVariance":{"owenyeo":30062.062},"authorDisplayNameMap":{"owenyeo":"CS2103T-W12-4 OWEN..YANG"}} diff --git a/papataco14_ip_master/authorship.json b/papataco14_ip_master/authorship.json index 2e4ad160..be6e592e 100644 --- a/papataco14_ip_master/authorship.json +++ b/papataco14_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"# Main project template","lastModifiedDate":"2023-08-30"},{"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":"papataco14"},"content":"3. After that, locate the `src/main/java/Main.java` file, right-click it, and choose `Run Main.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-30"},{"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":{"papataco14":2,"-":22}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"T | 0 | sleep","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"E | 0 | rehearsal | tues | wed","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"D | 0 | exam | friday","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"papataco14":3}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"import chatengine.ChatEngine;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"public class Main {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" ChatEngine chatEngine \u003d new ChatEngine(\"./data/tasks.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" chatEngine.start();","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":8}},{"path":"src/main/java/chatengine/ChadException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chatengine;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"public class ChadException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":" public ChadException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" public static class InvalidCommandException extends ChadException {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" public static class InvalidArgumentException extends ChadException {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" public InvalidArgumentException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" public static class InvalidFormatException extends ChadException {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" public InvalidFormatException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":25}},{"path":"src/main/java/chatengine/ChatEngine.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chatengine;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import io.IOHandler;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import io.ConsoleIO;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"import java.nio.file.NoSuchFileException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"public class ChatEngine {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" private final IOHandler ioHandler;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" private TaskList taskList; // stores list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" private final Storage storage ;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" public enum CommandType {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" BYE, MARK, UNMARK, LIST, TODO, DEADLINE, EVENT, DELETE, UNKNOWN","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" public ChatEngine(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" this.ioHandler \u003d new ConsoleIO();","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" this.taskList \u003d new TaskList(storage.loadTasks()); // load tasks from storage","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" public void start() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" ioHandler.greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" boolean canContinueChat \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" while(canContinueChat) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" String input \u003d ioHandler.readInput();;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" canContinueChat \u003d commandHandler(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" } catch (ChadException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" ioHandler.sayGoodbye();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" private CommandType parseCommandType(String command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" return CommandType.valueOf(command.toUpperCase());","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" return CommandType.UNKNOWN;","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" private boolean commandHandler(String input) throws ChadException {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" if (input.trim().isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Input cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" CommandType command \u003d parseCommandType(parts[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":" case MARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"papataco14"},"content":" case UNMARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"papataco14"},"content":" handleMarkUnmark(parts, command);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"papataco14"},"content":" case LIST:","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(taskList.displayTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"papataco14"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"papataco14"},"content":" handleTodo(parts);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"papataco14"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"papataco14"},"content":" handleDeadline(parts);","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"papataco14"},"content":" case EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"papataco14"},"content":" handleEvent(parts);","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"papataco14"},"content":" case DELETE:","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"papataco14"},"content":" handleDelete(parts);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"papataco14"},"content":" case BYE:","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"papataco14"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"papataco14"},"content":" case UNKNOWN:","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"papataco14"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidCommandException(\"Unknown command: \" + parts[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"papataco14"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidFormatException(\"Invalid number format.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"papataco14"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"papataco14"},"content":" private void handleMarkUnmark(String[] parts, CommandType command) throws ChadException {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Missing index for \" + command);","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"papataco14"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"papataco14"},"content":" String response \u003d (command \u003d\u003d CommandType.MARK) ? taskList.markTaskAsDone(index) : taskList.markTaskAsNotDone(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(response);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"papataco14"},"content":" private void handleTodo(String[] parts) throws ChadException {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Missing task description for ToDo.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"papataco14"},"content":" taskList.addTodo(parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Added new ToDo: \" + parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"papataco14"},"content":" private void handleDeadline(String[] parts) throws ChadException {","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2 || !parts[1].contains(\" /by \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Invalid format for Deadline. Use: deadline {task} /by {date}\");","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"papataco14"},"content":" String[] deadlineParts \u003d parts[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"papataco14"},"content":" taskList.addDeadline(deadlineParts[0], deadlineParts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Added new Deadline: \" + deadlineParts[0] + \" by \" + deadlineParts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"papataco14"},"content":" private void handleEvent(String[] parts) throws ChadException {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2 || !parts[1].contains(\" /from \") || !parts[1].contains(\" /to \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Invalid format for Event. Use: event {task} /from {start} /to {end}\");","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"papataco14"},"content":" String[] eventParts \u003d parts[1].split(\" /from | /to \", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"papataco14"},"content":" taskList.addEvent(eventParts[0], eventParts[1], eventParts[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Added new Event: \" + eventParts[0] + \" from \" + eventParts[1] + \" to \" + eventParts[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"papataco14"},"content":" private void handleDelete(String[] parts) throws ChadException {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Invalid format for Delete Task Operation. Use: delete {taskIndex}\");","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"papataco14"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"papataco14"},"content":" String response \u003d taskList.deleteTask(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(response);","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"papataco14"},"content":" private void saveTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"papataco14"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"papataco14"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error: File not found. \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"papataco14"},"content":" } catch (NoSuchFileException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error: Directory not found. \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"papataco14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":153}},{"path":"src/main/java/chatengine/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chatengine;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" private Path filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" this.filePath \u003d Paths.get(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" ensureFileExists();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" private void ensureFileExists() {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" if (Files.notExists(filePath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" Path parentDir \u003d filePath.getParent();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" if (Files.notExists(parentDir)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" Files.createDirectories(parentDir);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" System.out.println(\"An error occurred while creating the file or directory: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" public void saveTasks(TaskList taskList) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" try (BufferedWriter writer \u003d Files.newBufferedWriter(filePath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" for (Task task : taskList.getTasks()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" writer.write(task.toFileFormat());","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" writer.newLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" public ArrayList\u003cTask\u003e loadTasks() throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" try (BufferedReader reader \u003d Files.newBufferedReader(filePath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" String line;","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" Task task \u003d Task.fromFileFormat(line);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"papataco14":58}},{"path":"src/main/java/io/ConsoleIO.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package io;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"public class ConsoleIO implements IOHandler{","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" private Scanner sc;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" public ConsoleIO() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" public void greet() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" System.out.println(\"Hello! I\u0027m Chad!\\nWhat do you want?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" System.out.println(\"______________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" public void sayGoodbye() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" public String readInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" public void writeOutput(String output) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" System.out.println(output);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":32}},{"path":"src/main/java/io/IOHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package io;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"public interface IOHandler {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":" String readInput();","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" void writeOutput(String output);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" void greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" void sayGoodbye();","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":8}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":" private String dueDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" public Deadline(String description, String dueDate) {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" return String.format(\"[D][%s] %s (by: %s)\", super.getStatusIcon(), description, dueDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" return String.format(\"D | %s | %s | %s\", super.isDoneString(), description, dueDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":19}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":" private String start;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" private String end;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" public Event(String description, String start, String end) {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" return String.format(\"[E][%s] %s (from: %s to: %s)\", super.getStatusIcon(), description, start, end);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" return String.format(\"E | %s | %s | %s | %s\", super.isDoneString(), description, start, end);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":21}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":" protected String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" return (isDone ? \"X\" : \"\"); // mark done task with X","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" public String isDoneString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" return isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" public void mark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" public void unMark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" public abstract String toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" public abstract String toFileFormat();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" public static Task fromFileFormat(String line) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" task \u003d new ToDo(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" task \u003d new Deadline(description, parts[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" task \u003d new Event(description, parts[3], parts[4]);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" if (task !\u003d null \u0026\u0026 isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" task.mark();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" return task;","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":59}},{"path":"src/main/java/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" public void addTodo(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" tasks.add(new ToDo(description));","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" public void addDeadline(String description, String dueDate) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" tasks.add(new Deadline(description, dueDate));","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" public void addEvent(String description, String start, String end) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" tasks.add(new Event(description, start, end));","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" public String markTaskAsDone(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" task.mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" return \"Yessir! This task is marked as done:\\n\" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" return \"Invalid task index.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" public String markTaskAsNotDone(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" task.unMark();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" return \"Aite, I\u0027ve marked this task as not done yet:\\n\" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" return \"Invalid task index.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" public String displayTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" StringBuilder sb \u003d new StringBuilder(\"Here\u0027s your tasks m8:\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" sb.append((i + 1) + \".\" + tasks.get(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" sb.append(\"Now you have \" + tasks.size() + \" tasks in your list\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" return sb.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" public String deleteTask(int taskIndex) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" tasks.remove(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":" return \"Aite, this task is gone bro: \" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":" return \"Invalid task index.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"papataco14"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"papataco14"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"papataco14"},"content":" public void setTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"papataco14"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":71}},{"path":"src/main/java/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"public class ToDo extends Task{","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" return String.format(\"[T][%s] %s\", super.getStatusIcon(), description);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" return String.format(\"T | %s | %s\", super.isDoneString(), description);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"toDo one","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"deadline two /by Friday","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"Event three /from saturday /to sun","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"bye","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":5}},{"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":"papataco14"},"content":"java -classpath ..\\bin Main \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"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":{"papataco14":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"# Main project template","lastModifiedDate":"2023-08-30"},{"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":"papataco14"},"content":"3. After that, locate the `src/main/java/Main.java` file, right-click it, and choose `Run Main.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-30"},{"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":{"papataco14":2,"-":22}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"D | 0 | sleep | 2023-09-09T12:00","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"papataco14":1}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"import chatengine.ChatEngine;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"public class Main {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" ChatEngine chatEngine \u003d new ChatEngine(\"./data/tasks.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" chatEngine.start();","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":8}},{"path":"src/main/java/chatengine/ChadException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chatengine;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"public class ChadException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":" public ChadException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" public static class InvalidCommandException extends ChadException {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" public static class InvalidArgumentException extends ChadException {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" public InvalidArgumentException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" public static class InvalidFormatException extends ChadException {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" public InvalidFormatException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":25}},{"path":"src/main/java/chatengine/ChatEngine.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chatengine;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import io.IOHandler;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import io.ConsoleIO;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"import java.nio.file.NoSuchFileException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":"public class ChatEngine {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" private final IOHandler ioHandler;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" private TaskList taskList; // stores list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" private final Storage storage ;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" public enum CommandType {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" BYE, MARK, UNMARK, LIST, TODO, DEADLINE, EVENT, DELETE, UNKNOWN","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" public ChatEngine(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" this.ioHandler \u003d new ConsoleIO();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" this.taskList \u003d new TaskList(storage.loadTasks()); // load tasks from storage","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" public void start() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" ioHandler.greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" boolean canContinueChat \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" while(canContinueChat) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" String input \u003d ioHandler.readInput();;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" canContinueChat \u003d commandHandler(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" } catch (ChadException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" ioHandler.sayGoodbye();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" private CommandType parseCommandType(String command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" return CommandType.valueOf(command.toUpperCase());","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" return CommandType.UNKNOWN;","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" private boolean commandHandler(String input) throws ChadException {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":" if (input.trim().isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Input cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":" CommandType command \u003d parseCommandType(parts[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"papataco14"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"papataco14"},"content":" case MARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"papataco14"},"content":" case UNMARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"papataco14"},"content":" handleMarkUnmark(parts, command);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"papataco14"},"content":" case LIST:","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(taskList.displayTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"papataco14"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"papataco14"},"content":" handleTodo(parts);","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"papataco14"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"papataco14"},"content":" handleDeadline(parts);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"papataco14"},"content":" case EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"papataco14"},"content":" handleEvent(parts);","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"papataco14"},"content":" case DELETE:","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"papataco14"},"content":" handleDelete(parts);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"papataco14"},"content":" case BYE:","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"papataco14"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"papataco14"},"content":" case UNKNOWN:","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"papataco14"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidCommandException(\"Unknown command: \" + parts[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"papataco14"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidFormatException(\"Invalid number format.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"papataco14"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"papataco14"},"content":" private void handleMarkUnmark(String[] parts, CommandType command) throws ChadException {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Missing index for \" + command);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"papataco14"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"papataco14"},"content":" String response \u003d (command \u003d\u003d CommandType.MARK) ? taskList.markTaskAsDone(index) : taskList.markTaskAsNotDone(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(response);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"papataco14"},"content":" private void handleTodo(String[] parts) throws ChadException {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Missing task description for ToDo.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"papataco14"},"content":" taskList.addTodo(parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Added new ToDo: \" + parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"papataco14"},"content":" private void handleDeadline(String[] parts) throws ChadException {","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2 || !parts[1].contains(\" /by \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Invalid format for Deadline. Use: deadline {task} /by {date}\");","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"papataco14"},"content":" String[] deadlineParts \u003d parts[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"papataco14"},"content":" LocalDateTime dueDate \u003d LocalDateTime.parse(deadlineParts[1], DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"papataco14"},"content":" taskList.addDeadline(deadlineParts[0], dueDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Added new Deadline: \" + deadlineParts[0] + \" by \" + dueDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"papataco14"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidFormatException(\"Invalid date format. Please use yyyy-MM-dd HH:mm.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"papataco14"},"content":" private void handleEvent(String[] parts) throws ChadException {","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2 || !parts[1].contains(\" /from \") || !parts[1].contains(\" /to \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Invalid format for Event. Use: event {task} /from {start} /to {end}\");","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"papataco14"},"content":" String[] eventParts \u003d parts[1].split(\" /from | /to \", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"papataco14"},"content":" LocalDateTime start \u003d LocalDateTime.parse(eventParts[1], DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"papataco14"},"content":" LocalDateTime end \u003d LocalDateTime.parse(eventParts[2], DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"papataco14"},"content":" taskList.addEvent(eventParts[0], start, end);","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Added new Event: \" + eventParts[0] + \" from \" + start + \" to \" + end);","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"papataco14"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidFormatException(\"Invalid date format. Please use yyyy-MM-dd HH:mm.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"papataco14"},"content":" private void handleDelete(String[] parts) throws ChadException {","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Invalid format for Delete Task Operation. Use: delete {taskIndex}\");","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"papataco14"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"papataco14"},"content":" String response \u003d taskList.deleteTask(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(response);","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"papataco14"},"content":" private void saveTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"papataco14"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"papataco14"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error: File not found. \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"papataco14"},"content":" } catch (NoSuchFileException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error: Directory not found. \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"papataco14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":168}},{"path":"src/main/java/chatengine/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chatengine;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" private Path filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" this.filePath \u003d Paths.get(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" ensureFileExists();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" private void ensureFileExists() {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" if (Files.notExists(filePath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" Path parentDir \u003d filePath.getParent();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" if (Files.notExists(parentDir)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" Files.createDirectories(parentDir);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" System.out.println(\"An error occurred while creating the file or directory: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" public void saveTasks(TaskList taskList) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" try (BufferedWriter writer \u003d Files.newBufferedWriter(filePath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" for (Task task : taskList.getTasks()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" writer.write(task.toFileFormat(formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" writer.newLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" public ArrayList\u003cTask\u003e loadTasks() throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" try (BufferedReader reader \u003d Files.newBufferedReader(filePath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" String line;","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" Task task \u003d Task.fromFileFormat(line, formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"papataco14":63}},{"path":"src/main/java/io/ConsoleIO.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package io;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"public class ConsoleIO implements IOHandler{","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" private Scanner sc;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" public ConsoleIO() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" public void greet() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" System.out.println(\"Hello! I\u0027m Chad!\\nWhat do you want?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" System.out.println(\"______________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" public void sayGoodbye() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" public String readInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" public void writeOutput(String output) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" System.out.println(output);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":32}},{"path":"src/main/java/io/IOHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package io;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"public interface IOHandler {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":" String readInput();","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" void writeOutput(String output);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" void greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" void sayGoodbye();","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":8}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" private LocalDateTime dueDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" public Deadline(String description, LocalDateTime dueDate) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy, h:mm a\");","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" return String.format(\"[D][%s] %s (by: %s)\", super.getStatusIcon(), description, dueDate.format(formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" public String toFileFormat(DateTimeFormatter formatter) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" return String.format(\"D | %s | %s | %s\", super.isDoneString(), description, dueDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":22}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" private LocalDateTime start;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" private LocalDateTime end;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" public Event(String description, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy, h:mm a\");","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" return String.format(\"[E][%s] %s (from: %s to: %s)\", super.getStatusIcon(),","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" description, start.format(formatter), end.format(formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" public String toFileFormat(DateTimeFormatter formatter) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" return String.format(\"E | %s | %s | %s | %s\", super.isDoneString(), description, start, end);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":25}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" protected String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" return (isDone ? \"X\" : \"\"); // mark done task with X","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" public String isDoneString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" return isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" public void mark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" public void unMark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" public abstract String toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" public abstract String toFileFormat(DateTimeFormatter formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" public static Task fromFileFormat(String line, DateTimeFormatter formatter) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" task \u003d new ToDo(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" LocalDateTime dueDate \u003d LocalDateTime.parse(parts[3], formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" task \u003d new Deadline(description, dueDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" LocalDateTime start \u003d LocalDateTime.parse(parts[3], formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" LocalDateTime end \u003d LocalDateTime.parse(parts[4], formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" task \u003d new Event(description, start, end);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":" if (task !\u003d null \u0026\u0026 isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" task.mark();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":" return task;","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":65}},{"path":"src/main/java/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" public void addTodo(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" tasks.add(new ToDo(description));","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" public void addDeadline(String description, LocalDateTime dueDate) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" tasks.add(new Deadline(description, dueDate));","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" public void addEvent(String description, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" tasks.add(new Event(description, start, end));","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" public String markTaskAsDone(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" task.mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" return \"Yessir! This task is marked as done:\\n\" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" return \"Invalid task index.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" public String markTaskAsNotDone(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" task.unMark();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" return \"Aite, I\u0027ve marked this task as not done yet:\\n\" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" return \"Invalid task index.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" public String displayTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" StringBuilder sb \u003d new StringBuilder(\"Here\u0027s your tasks m8:\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" sb.append((i + 1) + \".\" + tasks.get(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" sb.append(\"Now you have \" + tasks.size() + \" tasks in your list\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" return sb.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" public String deleteTask(int taskIndex) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":" tasks.remove(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":" return \"Aite, this task is gone bro: \" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":" return \"Invalid task index.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"papataco14"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"papataco14"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"papataco14"},"content":" public void setTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"papataco14"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":72}},{"path":"src/main/java/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"public class ToDo extends Task{","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" return String.format(\"[T][%s] %s\", super.getStatusIcon(), description);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" public String toFileFormat(DateTimeFormatter formatter) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" return String.format(\"T | %s | %s\", super.isDoneString(), description);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"toDo one","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"deadline two /by Friday","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"Event three /from saturday /to sun","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"bye","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":5}},{"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":"papataco14"},"content":"java -classpath ..\\bin Main \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"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":{"papataco14":1,"-":20}}] diff --git a/papataco14_ip_master/commits.json b/papataco14_ip_master/commits.json index 6eecf3ef..3c0c2612 100644 --- a/papataco14_ip_master/commits.json +++ b/papataco14_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"papataco14":[{"date":"2023-08-30","commitResults":[{"hash":"f4ef71591f4fad985bd4c14371234fd46f3065ba","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"- Gave chatbot a new name\n- Implement an initial skeletal version that greets and exits\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"a17a1d326c537394a220d5294b712dc39d43189f","isMergeCommit":false,"messageTitle":"Echo","messageBody":"- refactored code\n- Added io \u0026 chatengine packages\n- Added IOHandler interface and ConsoleIO class\n- Added ChatEngine class\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":11},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"fd178f80ca63a698d2ec7d44580275bca239b7a7","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"- added ability to store texts by user\n- users can retrieve list of text inputs stored\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":5}}},{"hash":"0d9d4e13f4345c0376643fccfe48323b49d23c42","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"- added option to mark and unmark tasks\n- added Task class to store task info\n- added TaskList class to store list of tasks\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":18}}},{"hash":"51574dcdbb0c4fb5b3ce9f17881fca996c04f838","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"- added support for tracking ToDos, Events \u0026 Deadlines\n- changed Task to abstract class\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":18}}},{"hash":"02819b95e0503a6c2c071ca2bacf36c3ebecd807","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"- Added test cases for testing of basic event adding and querying\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0}}},{"hash":"745a5f1c50b05a5156100ca6c632ae834605815d","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"- refactored code to allow for better error handling\n- added three types of exceptions common for chadbot: invalid commands, arguments, and format\n","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":28}}}]},{"date":"2023-09-01","commitResults":[{"hash":"0704afb7cd768da9e7ce1c3436a63e0ec3a53b18","isMergeCommit":false,"messageTitle":"Add delete operation","messageBody":"The task manager does not offer delete task functionality.\n\nUsers might want to delete tasks they have completed already or for any other reason.\n\nLet\u0027s remove tasks stored in the taskList class and offer the user commands to delete tasks by their index shown to the user.\n","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"765f4adf23179828f92e6e3907bc56ce3ad39404","isMergeCommit":false,"messageTitle":"Refactor ChatEngine command handling and use enums","messageBody":"Hardcoding of commands may lead to more problems in the future.\n\nHandling all command logic in processInput is not maintainable.\n\nLets use enums for the commands that Chad can accept for improved Readability and Type Safety.\n\nBy abstracting out the logic for handling each of the commands into separate functions, commandHandler will now only need to be concerned with deciding which handler function to choose, leading to better separation of concerns.\n","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":52}}}]},{"date":"2023-09-03","commitResults":[{"hash":"e610e44eb599b8ae4796d593c4af5c43957d7a1a","isMergeCommit":false,"messageTitle":"Implement Save feature","messageBody":"Users couldn\u0027t save their list of tasks\n\nLet\u0027s allow them to save their current tasks and retrieve it when they load the app again.\n","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":152,"deletions":12}}}]}]},"authorFileTypeContributionMap":{"papataco14":{"java":472,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":8}},"authorContributionVariance":{"papataco14":13129.875},"authorDisplayNameMap":{"papataco14":"CS2103T-T17-2 RAMU..IJAY"}} +{"authorDailyContributionsMap":{"papataco14":[{"date":"2023-08-30","commitResults":[{"hash":"f4ef71591f4fad985bd4c14371234fd46f3065ba","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"- Gave chatbot a new name\n- Implement an initial skeletal version that greets and exits\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"a17a1d326c537394a220d5294b712dc39d43189f","isMergeCommit":false,"messageTitle":"Echo","messageBody":"- refactored code\n- Added io \u0026 chatengine packages\n- Added IOHandler interface and ConsoleIO class\n- Added ChatEngine class\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":11},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"fd178f80ca63a698d2ec7d44580275bca239b7a7","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"- added ability to store texts by user\n- users can retrieve list of text inputs stored\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":5}}},{"hash":"0d9d4e13f4345c0376643fccfe48323b49d23c42","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"- added option to mark and unmark tasks\n- added Task class to store task info\n- added TaskList class to store list of tasks\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":18}}},{"hash":"51574dcdbb0c4fb5b3ce9f17881fca996c04f838","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"- added support for tracking ToDos, Events \u0026 Deadlines\n- changed Task to abstract class\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":18}}},{"hash":"02819b95e0503a6c2c071ca2bacf36c3ebecd807","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"- Added test cases for testing of basic event adding and querying\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0}}},{"hash":"745a5f1c50b05a5156100ca6c632ae834605815d","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"- refactored code to allow for better error handling\n- added three types of exceptions common for chadbot: invalid commands, arguments, and format\n","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":28}}}]},{"date":"2023-09-01","commitResults":[{"hash":"0704afb7cd768da9e7ce1c3436a63e0ec3a53b18","isMergeCommit":false,"messageTitle":"Add delete operation","messageBody":"The task manager does not offer delete task functionality.\n\nUsers might want to delete tasks they have completed already or for any other reason.\n\nLet\u0027s remove tasks stored in the taskList class and offer the user commands to delete tasks by their index shown to the user.\n","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"765f4adf23179828f92e6e3907bc56ce3ad39404","isMergeCommit":false,"messageTitle":"Refactor ChatEngine command handling and use enums","messageBody":"Hardcoding of commands may lead to more problems in the future.\n\nHandling all command logic in processInput is not maintainable.\n\nLets use enums for the commands that Chad can accept for improved Readability and Type Safety.\n\nBy abstracting out the logic for handling each of the commands into separate functions, commandHandler will now only need to be concerned with deciding which handler function to choose, leading to better separation of concerns.\n","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":52}}}]},{"date":"2023-09-03","commitResults":[{"hash":"e610e44eb599b8ae4796d593c4af5c43957d7a1a","isMergeCommit":false,"messageTitle":"Implement Save feature","messageBody":"Users couldn\u0027t save their list of tasks\n\nLet\u0027s allow them to save their current tasks and retrieve it when they load the app again.\n","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":152,"deletions":12}}}]},{"date":"2023-09-05","commitResults":[{"hash":"2fe90f0202acd6fd73de16ffc5807851665cffc8","isMergeCommit":false,"messageTitle":"Add date time parsing","messageBody":"added data time parsing and storage for deadlines and event start and end.\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":3},"java":{"insertions":60,"deletions":25}}}]}]},"authorFileTypeContributionMap":{"papataco14":{"java":507,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":6}},"authorContributionVariance":{"papataco14":11956.3545},"authorDisplayNameMap":{"papataco14":"CS2103T-T17-2 RAMU..IJAY"}} diff --git a/pra-navi_ip_master/commits.json b/pra-navi_ip_master/commits.json index 9d9fbc0d..c9e80c45 100644 --- a/pra-navi_ip_master/commits.json +++ b/pra-navi_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"pra-navi":[{"date":"2023-08-20","commitResults":[{"hash":"84b4204d32c84f49bddff347edd1647776b0b1be","isMergeCommit":false,"messageTitle":"Sally welcomes","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":10}}},{"hash":"28c25cf104f7dfff2cc4691d5e9eac2d061b7303","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"ba192488091a49349e954f17247ff36ac10b6a8c","isMergeCommit":false,"messageTitle":"add to list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"3e165c445387f87fddd3b13ba9e0e18eba04d3cc","isMergeCommit":false,"messageTitle":"mark as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":4}}},{"hash":"7fad2d05e0fae3527a031fa2ea5d6cee861b3c91","isMergeCommit":false,"messageTitle":"three types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":6}}},{"hash":"64c25b85e08e2df61288fb950eb4c2bb54c480c4","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":0,"deletions":4},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"965f24c126b7d442a0c9e5b921319b99a2069a1a","isMergeCommit":false,"messageTitle":"Exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":50}}},{"hash":"79ec87d4aa9618d55aba7edaaa6c5277abd80e58","isMergeCommit":false,"messageTitle":"delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":22}}}]},{"date":"2023-08-28","commitResults":[{"hash":"4c28dc0a462b41a28264a713f8891ee494e41516","isMergeCommit":false,"messageTitle":"Shorten methods","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":26,"deletions":0},"java":{"insertions":125,"deletions":68}}},{"hash":"27ebf750e277de4cfee6a69b04793de4ed88484f","isMergeCommit":false,"messageTitle":"Save tasks to hard disk","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":153,"deletions":1}}},{"hash":"116cf1d5ea9405cf8cd13320a109a5a1c857615f","isMergeCommit":true,"messageTitle":"Merge pull request #1 from pra-navi/branch-level-7","messageBody":"Save tasks to hard disk","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"a321bc060acca20758d8b6867c94045566916870","isMergeCommit":false,"messageTitle":"Convert time and date to uniform setting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":45}}},{"hash":"c4b1d9e3af5aa692e37bf43da4aa83d095eaab47","isMergeCommit":false,"messageTitle":"Convert time and date to uniform setting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":243,"deletions":7}}},{"hash":"7c2437eed8038e39632a4744eaf4c5089aee349d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-level-8","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f88c3bd64d2d4a64425da43dc5fada9e3792f15d","isMergeCommit":true,"messageTitle":"Merge pull request #2 from pra-navi/branch-level-8","messageBody":"Convert time and date to uniform setting","fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"67a767bac519234038e19dd4a1ceb387a26d87c9","isMergeCommit":false,"messageTitle":"Update the date and time from separate class to main","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":112}}},{"hash":"91b8a8c018e9f6c40b2e82e77bd6ae27b152285f","isMergeCommit":false,"messageTitle":"Adhere to OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":5},"java":{"insertions":424,"deletions":237}}},{"hash":"3f7ea7f64389ea48eb9ce0df054654a2fc5974b0","isMergeCommit":false,"messageTitle":"Sort into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":7},"bat":{"insertions":1,"deletions":1}}},{"hash":"df7811d15aa9b6ccf8ec226a30c48772024cf7ca","isMergeCommit":false,"messageTitle":"Set up gradle and JAR file","messageBody":"","tags":["A-Jar","A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"783c7ad373e3a82ae892bccd9ba817120ea6ad87","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"306dbb55c952cf0f10353f2ad3770b177a25cb41","isMergeCommit":false,"messageTitle":"Create JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":3},"java":{"insertions":103,"deletions":0}}},{"hash":"85b306c20ccc523301f33d2ac106e18b919f8129","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":439,"deletions":65}}},{"hash":"932a248383b635ddeef591bcc2e63f952c06ba18","isMergeCommit":false,"messageTitle":"Adhere to coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":18}}},{"hash":"8e69a1a9b12d8309de22e504139017873f3cb86b","isMergeCommit":false,"messageTitle":"Add find-by-keyword function","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"e7d90bfad90ba73fdf0518ac367a100f3d3cebcf","isMergeCommit":true,"messageTitle":"Merge pull request #3 from pra-navi/branch-A-CodingStandard","messageBody":"Adhere to coding standards","fileTypesAndContributionMap":{}},{"hash":"c71991cdb79ffb331dec7a3ab32240f1ec919e11","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"de987b0c48735288a1aac9124f54ad3caf05e0f4","isMergeCommit":true,"messageTitle":"Merge pull request #4 from pra-navi/branch-A-JavaDoc","messageBody":"Add javadocs","fileTypesAndContributionMap":{}},{"hash":"538847a86226ba06e363070cf98b2cef661259f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8abbd73d2bd675204998dbaca96716ec5749e140","isMergeCommit":true,"messageTitle":"Merge pull request #5 from pra-navi/branch-Level-9","messageBody":"Add find-by-keyword function","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"aaac0c9532864b2b907cb11d1cf3337345cf53ec","isMergeCommit":false,"messageTitle":"Add find test to test folder","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":5,"deletions":12},"bat":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"9dfefc5f8a8bd66b538d0492222f63c0b557c188","isMergeCommit":false,"messageTitle":"Incorporate checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":1},"java":{"insertions":15,"deletions":24}}}]},{"date":"2023-09-04","commitResults":[{"hash":"6f1d57f16ed2746591a0a96a22bebf3fdf870e7d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/branch-level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"pra-navi":{"java":1147,"md":0,"fxml":0,"sh":1,"bat":2,"gradle":10,"txt":31}},"authorContributionVariance":{"pra-navi":163188.73},"authorDisplayNameMap":{"pra-navi":"CS2103T-T10-2 PRAN..NAVI"}} +{"authorDailyContributionsMap":{"pra-navi":[{"date":"2023-08-20","commitResults":[{"hash":"84b4204d32c84f49bddff347edd1647776b0b1be","isMergeCommit":false,"messageTitle":"Sally welcomes","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":10}}},{"hash":"28c25cf104f7dfff2cc4691d5e9eac2d061b7303","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"ba192488091a49349e954f17247ff36ac10b6a8c","isMergeCommit":false,"messageTitle":"add to list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"3e165c445387f87fddd3b13ba9e0e18eba04d3cc","isMergeCommit":false,"messageTitle":"mark as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":4}}},{"hash":"7fad2d05e0fae3527a031fa2ea5d6cee861b3c91","isMergeCommit":false,"messageTitle":"three types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":6}}},{"hash":"64c25b85e08e2df61288fb950eb4c2bb54c480c4","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":0,"deletions":4},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"965f24c126b7d442a0c9e5b921319b99a2069a1a","isMergeCommit":false,"messageTitle":"Exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":50}}},{"hash":"79ec87d4aa9618d55aba7edaaa6c5277abd80e58","isMergeCommit":false,"messageTitle":"delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":22}}}]},{"date":"2023-08-28","commitResults":[{"hash":"4c28dc0a462b41a28264a713f8891ee494e41516","isMergeCommit":false,"messageTitle":"Shorten methods","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":26,"deletions":0},"java":{"insertions":125,"deletions":68}}},{"hash":"27ebf750e277de4cfee6a69b04793de4ed88484f","isMergeCommit":false,"messageTitle":"Save tasks to hard disk","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":153,"deletions":1}}},{"hash":"116cf1d5ea9405cf8cd13320a109a5a1c857615f","isMergeCommit":true,"messageTitle":"Merge pull request #1 from pra-navi/branch-level-7","messageBody":"Save tasks to hard disk","tags":["branch-Level-7","Level-7"],"fileTypesAndContributionMap":{}},{"hash":"a321bc060acca20758d8b6867c94045566916870","isMergeCommit":false,"messageTitle":"Convert time and date to uniform setting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":45}}},{"hash":"c4b1d9e3af5aa692e37bf43da4aa83d095eaab47","isMergeCommit":false,"messageTitle":"Convert time and date to uniform setting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":243,"deletions":7}}},{"hash":"7c2437eed8038e39632a4744eaf4c5089aee349d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-level-8","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f88c3bd64d2d4a64425da43dc5fada9e3792f15d","isMergeCommit":true,"messageTitle":"Merge pull request #2 from pra-navi/branch-level-8","messageBody":"Convert time and date to uniform setting","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"67a767bac519234038e19dd4a1ceb387a26d87c9","isMergeCommit":false,"messageTitle":"Update the date and time from separate class to main","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":112}}},{"hash":"91b8a8c018e9f6c40b2e82e77bd6ae27b152285f","isMergeCommit":false,"messageTitle":"Adhere to OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":5},"java":{"insertions":424,"deletions":237}}},{"hash":"3f7ea7f64389ea48eb9ce0df054654a2fc5974b0","isMergeCommit":false,"messageTitle":"Sort into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":7},"bat":{"insertions":1,"deletions":1}}},{"hash":"df7811d15aa9b6ccf8ec226a30c48772024cf7ca","isMergeCommit":false,"messageTitle":"Set up gradle and JAR file","messageBody":"","tags":["A-Jar","A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"783c7ad373e3a82ae892bccd9ba817120ea6ad87","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"306dbb55c952cf0f10353f2ad3770b177a25cb41","isMergeCommit":false,"messageTitle":"Create JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":3},"java":{"insertions":103,"deletions":0}}},{"hash":"85b306c20ccc523301f33d2ac106e18b919f8129","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":439,"deletions":65}}},{"hash":"932a248383b635ddeef591bcc2e63f952c06ba18","isMergeCommit":false,"messageTitle":"Adhere to coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":18}}},{"hash":"8e69a1a9b12d8309de22e504139017873f3cb86b","isMergeCommit":false,"messageTitle":"Add find-by-keyword function","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"e7d90bfad90ba73fdf0518ac367a100f3d3cebcf","isMergeCommit":true,"messageTitle":"Merge pull request #3 from pra-navi/branch-A-CodingStandard","messageBody":"Adhere to coding standards","fileTypesAndContributionMap":{}},{"hash":"c71991cdb79ffb331dec7a3ab32240f1ec919e11","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"de987b0c48735288a1aac9124f54ad3caf05e0f4","isMergeCommit":true,"messageTitle":"Merge pull request #4 from pra-navi/branch-A-JavaDoc","messageBody":"Add javadocs","fileTypesAndContributionMap":{}},{"hash":"538847a86226ba06e363070cf98b2cef661259f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8abbd73d2bd675204998dbaca96716ec5749e140","isMergeCommit":true,"messageTitle":"Merge pull request #5 from pra-navi/branch-Level-9","messageBody":"Add find-by-keyword function","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"aaac0c9532864b2b907cb11d1cf3337345cf53ec","isMergeCommit":false,"messageTitle":"Add find test to test folder","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":5,"deletions":12},"bat":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"9dfefc5f8a8bd66b538d0492222f63c0b557c188","isMergeCommit":false,"messageTitle":"Incorporate checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":1},"java":{"insertions":15,"deletions":24}}}]},{"date":"2023-09-04","commitResults":[{"hash":"6f1d57f16ed2746591a0a96a22bebf3fdf870e7d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/branch-level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"pra-navi":{"java":1147,"md":0,"fxml":0,"sh":1,"bat":2,"gradle":10,"txt":31}},"authorContributionVariance":{"pra-navi":163188.73},"authorDisplayNameMap":{"pra-navi":"CS2103T-T10-2 PRAN..NAVI"}} diff --git a/reposense-logs/reposense.log.0 b/reposense-logs/reposense.log.0 index 75999bcd..bb628454 100644 --- a/reposense-logs/reposense.log.0 +++ b/reposense-logs/reposense.log.0 @@ -1,58 +1,58 @@ -Sep 04, 2023 1:43:10 PM reposense.system.LogsManager addFileHandler +Sep 05, 2023 1:11:51 AM reposense.system.LogsManager addFileHandler INFO: Log temp folder has been successfully created -Sep 04, 2023 1:43:10 PM reposense.parser.CsvParser validateHeader +Sep 05, 2023 1:11:51 AM reposense.parser.CsvParser validateHeader INFO: Parsed header of CSV file, repo-config.csv, and recognized columns: Ignore Standalone Config, Repository's Location, Branch, Shallow Cloning, File formats, Ignore Glob List, Ignore Authors List, Find Previous Authors, Ignore Commits List -Sep 04, 2023 1:43:12 PM reposense.parser.CsvParser validateHeader +Sep 05, 2023 1:11:52 AM reposense.parser.CsvParser validateHeader INFO: Parsed header of CSV file, author-config.csv, and recognized columns: Author's Emails, Repository's Location, Author's GitHub ID, Branch, Author's Display Name, Ignore Glob List, Author's Git Author Name -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias scarletblanks found. The alias will belong to the last author - ScarletBlanks -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kb-tay found. The alias will belong to the last author - Kb-Tay -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias ryam found. The alias will belong to the last author - ryamgoh -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias h1410101 found. The alias will belong to the last author - H1410101 -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias shashahchk found. The alias will belong to the last author - shashahchk -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yucongkoo found. The alias will belong to the last author - yucongkoo -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kokseng1 found. The alias will belong to the last author - Kokseng1 -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias vanessamae23 found. The alias will belong to the last author - Vanessamae23 -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias singa-pirate found. The alias will belong to the last author - Singa-pirate -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nicholastng010601 found. The alias will belong to the last author - nicholastng010601 -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias weiennn found. The alias will belong to the last author - Weiennn -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias adammangzijun found. The alias will belong to the last author - adammangzijun -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias scarletblanks found. The alias will belong to the last author - ScarletBlanks -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kb-tay found. The alias will belong to the last author - Kb-Tay -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias ryam found. The alias will belong to the last author - ryamgoh -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias h1410101 found. The alias will belong to the last author - H1410101 -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias shashahchk found. The alias will belong to the last author - shashahchk -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yucongkoo found. The alias will belong to the last author - yucongkoo -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kokseng1 found. The alias will belong to the last author - Kokseng1 -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias vanessamae23 found. The alias will belong to the last author - Vanessamae23 -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias singa-pirate found. The alias will belong to the last author - Singa-pirate -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nicholastng010601 found. The alias will belong to the last author - nicholastng010601 -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias weiennn found. The alias will belong to the last author - Weiennn -Sep 04, 2023 1:43:12 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 05, 2023 1:11:52 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias adammangzijun found. The alias will belong to the last author - adammangzijun -Sep 04, 2023 1:43:12 PM reposense.git.GitConfig getGlobalGitLfsConfig +Sep 05, 2023 1:11:52 AM reposense.git.GitConfig getGlobalGitLfsConfig WARNING: Could not get global git lfs config java.lang.RuntimeException: reposense.system.CommandRunnerProcessException: Error returned from command git config --global --list on path . : fatal: unable to read config file '/home/runner/.gitconfig': No such file or directory @@ -68,8647 +68,8647 @@ fatal: unable to read config file '/home/runner/.gitconfig': No such file or dir at reposense.system.CommandRunner.runCommand(CommandRunner.java:21) ... 3 more -Sep 04, 2023 1:43:12 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/emzm2023/ip.git... -Sep 04, 2023 1:43:12 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:52 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/siqirua/ip.git... -Sep 04, 2023 1:43:12 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/thaddeusong/ip.git... -Sep 04, 2023 1:43:12 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:52 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/CJ-Lee01/ip.git... -Sep 04, 2023 1:43:12 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:52 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/emzm2023/ip.git... +Sep 05, 2023 1:11:52 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/thaddeusong/ip.git... +Sep 05, 2023 1:11:52 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/thaddeusong/ip.git to complete... -Sep 04, 2023 1:43:12 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:52 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/siqirua/ip.git to complete... -Sep 04, 2023 1:43:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/emzm2023/ip.git to complete... -Sep 04, 2023 1:43:12 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:52 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/CJ-Lee01/ip.git to complete... -Sep 04, 2023 1:43:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/CJ-Lee01/ip.git completed! -Sep 04, 2023 1:43:13 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/emzm2023/ip.git to complete... +Sep 05, 2023 1:11:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/siqirua/ip.git completed! +Sep 05, 2023 1:11:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/emzm2023/ip.git completed! +Sep 05, 2023 1:11:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tanteckfang/ip.git... -Sep 04, 2023 1:43:13 PM reposense.report.ReportGenerator analyzeRepos -INFO: [1/480] Analyzing https://github.com/CJ-Lee01/ip.git (master)... -Sep 04, 2023 1:43:13 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tanteckfang/ip.git to complete... -Sep 04, 2023 1:43:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/thaddeusong/ip.git completed! -Sep 04, 2023 1:43:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/emzm2023/ip.git completed! -Sep 04, 2023 1:43:13 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [1/480] Analyzing https://github.com/emzm2023/ip.git (master)... +Sep 05, 2023 1:11:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ph-nathan/ip.git... -Sep 04, 2023 1:43:13 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/butteredyakiimo/ip.git... -Sep 04, 2023 1:43:13 PM reposense.report.ReportGenerator analyzeRepos -INFO: [2/480] Analyzing https://github.com/emzm2023/ip.git (master)... -Sep 04, 2023 1:43:13 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [2/480] Analyzing https://github.com/siqirua/ip.git (master)... +Sep 05, 2023 1:11:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ph-nathan/ip.git to complete... -Sep 04, 2023 1:43:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/siqirua/ip.git completed! -Sep 04, 2023 1:43:13 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/thaddeusong/ip.git completed! +Sep 05, 2023 1:11:53 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/butteredyakiimo/ip.git... +Sep 05, 2023 1:11:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/CJ-Lee01/ip.git completed! +Sep 05, 2023 1:11:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/siqirua/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:11:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/emzm2023/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:11:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/butteredyakiimo/ip.git to complete... -Sep 04, 2023 1:43:13 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yuxunn/ip.git... -Sep 04, 2023 1:43:13 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/CJ-Lee01/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:13 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/emzm2023/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yuxunn/ip.git to complete... -Sep 04, 2023 1:43:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:11:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/siqirua/ip.git (master)... +Sep 05, 2023 1:11:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/emzm2023/ip.git (master)... -Sep 04, 2023 1:43:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/CJ-Lee01/ip.git (master)... -Sep 04, 2023 1:43:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ph-nathan/ip.git completed! -Sep 04, 2023 1:43:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yuxunn/ip.git completed! -Sep 04, 2023 1:43:14 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yuxunn/ip.git to complete... +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tanteckfang/ip.git completed! -Sep 04, 2023 1:43:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/butteredyakiimo/ip.git completed! -Sep 04, 2023 1:43:14 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/RB9823/ip.git... -Sep 04, 2023 1:43:14 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/RB9823/ip.git to complete... +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ph-nathan/ip.git completed! +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/TyrusLye/ip.git... -Sep 04, 2023 1:43:14 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/cxo05/ip.git... -Sep 04, 2023 1:43:14 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/TyrusLye/ip.git to complete... -Sep 04, 2023 1:43:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/RB9823/ip.git to complete... -Sep 04, 2023 1:43:14 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/butteredyakiimo/ip.git completed! +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/cxo05/ip.git... +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/cxo05/ip.git to complete... +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yuxunn/ip.git completed! +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/shyanyong/ip.git... -Sep 04, 2023 1:43:14 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/shyanyong/ip.git to complete... -Sep 04, 2023 1:43:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:11:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/emzm2023/ip.git (master)... -Sep 04, 2023 1:43:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/cxo05/ip.git to complete... -Sep 04, 2023 1:43:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:11:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/emzm2023/ip.git (master)... -Sep 04, 2023 1:43:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/CJ-Lee01/ip.git (master)... -Sep 04, 2023 1:43:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/CJ-Lee01/ip.git (master)... -Sep 04, 2023 1:43:14 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:11:54 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/emzm2023/ip.git (master) completed! -Sep 04, 2023 1:43:14 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/CJ-Lee01/ip.git (master) completed! -Sep 04, 2023 1:43:14 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:11:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/siqirua/ip.git (master)... +Sep 05, 2023 1:11:54 AM reposense.report.ReportGenerator analyzeRepos INFO: [3/480] Analyzing https://github.com/thaddeusong/ip.git (master)... -Sep 04, 2023 1:43:14 PM reposense.report.ReportGenerator analyzeRepos -INFO: [4/480] Analyzing https://github.com/siqirua/ip.git (master)... -Sep 04, 2023 1:43:14 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:11:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/siqirua/ip.git (master)... +Sep 05, 2023 1:11:54 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/thaddeusong/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:11:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/thaddeusong/ip.git (master)... -Sep 04, 2023 1:43:14 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/siqirua/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/siqirua/ip.git (master)... -Sep 04, 2023 1:43:14 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/siqirua/ip.git (master) completed! +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/RB9823/ip.git completed! -Sep 04, 2023 1:43:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/shyanyong/ip.git completed! -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/TyrusLye/ip.git completed! -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [4/480] Analyzing https://github.com/CJ-Lee01/ip.git (master)... +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/howenc/ip.git... -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/cxo05/ip.git completed! -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/howenc/ip.git to complete... +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/TyrusLye/ip.git completed! +Sep 05, 2023 1:11:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/CJ-Lee01/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:11:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/CJ-Lee01/ip.git (master)... +Sep 05, 2023 1:11:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Kurtyjlee/ip.git... -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Kurtyjlee/ip.git to complete... -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/cxo05/ip.git completed! +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/josepholim/ip.git... -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/howenc/ip.git to complete... -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/josepholim/ip.git to complete... +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/shyanyong/ip.git completed! +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/geoffong11/ip.git... -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/geoffong11/ip.git to complete... -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/josepholim/ip.git to complete... -Sep 04, 2023 1:43:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/siqirua/ip.git (master)... -Sep 04, 2023 1:43:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/siqirua/ip.git (master)... -Sep 04, 2023 1:43:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/howenc/ip.git completed! +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jianrong7/ip.git... +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jianrong7/ip.git to complete... +Sep 05, 2023 1:11:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/CJ-Lee01/ip.git (master)... +Sep 05, 2023 1:11:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/CJ-Lee01/ip.git (master)... +Sep 05, 2023 1:11:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/CJ-Lee01/ip.git (master) completed! +Sep 05, 2023 1:11:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [5/480] Analyzing https://github.com/tanteckfang/ip.git (master)... +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Kurtyjlee/ip.git completed! +Sep 05, 2023 1:11:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/thaddeusong/ip.git (master)... -Sep 04, 2023 1:43:15 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/siqirua/ip.git (master) completed! -Sep 04, 2023 1:43:15 PM reposense.report.ReportGenerator analyzeRepos -INFO: [5/480] Analyzing https://github.com/ph-nathan/ip.git (master)... -Sep 04, 2023 1:43:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/thaddeusong/ip.git (master)... -Sep 04, 2023 1:43:15 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/thaddeusong/ip.git (master) completed! -Sep 04, 2023 1:43:15 PM reposense.report.ReportGenerator analyzeRepos -INFO: [6/480] Analyzing https://github.com/tanteckfang/ip.git (master)... -Sep 04, 2023 1:43:15 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ph-nathan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ph-nathan/ip.git (master)... -Sep 04, 2023 1:43:15 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/A1WAYSD/ip.git... +Sep 05, 2023 1:11:55 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tanteckfang/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:11:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tanteckfang/ip.git (master)... -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Kurtyjlee/ip.git completed! -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/A1WAYSD/ip.git to complete... +Sep 05, 2023 1:11:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/thaddeusong/ip.git (master)... +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/josepholim/ip.git completed! -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jianrong7/ip.git... -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/howenc/ip.git completed! -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/A1WAYSD/ip.git... -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jianrong7/ip.git to complete... -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/geoffong11/ip.git completed! -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/thaddeusong/ip.git (master) completed! +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/NgChunMan/ip.git... -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/A1WAYSD/ip.git to complete... -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/limjunxian1/ip.git... -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [6/480] Analyzing https://github.com/ph-nathan/ip.git (master)... +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/NgChunMan/ip.git to complete... -Sep 04, 2023 1:43:15 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/geoffong11/ip.git completed! +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/limjunxian1/ip.git... +Sep 05, 2023 1:11:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/limjunxian1/ip.git to complete... -Sep 04, 2023 1:43:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ph-nathan/ip.git (master)... -Sep 04, 2023 1:43:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ph-nathan/ip.git (master)... -Sep 04, 2023 1:43:16 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ph-nathan/ip.git (master) completed! -Sep 04, 2023 1:43:16 PM reposense.report.ReportGenerator analyzeRepos -INFO: [7/480] Analyzing https://github.com/yuxunn/ip.git (master)... -Sep 04, 2023 1:43:16 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yuxunn/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yuxunn/ip.git (master)... -Sep 04, 2023 1:43:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ph-nathan/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:11:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ph-nathan/ip.git (master)... +Sep 05, 2023 1:11:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jianrong7/ip.git completed! -Sep 04, 2023 1:43:16 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jack1e0/ip.git... -Sep 04, 2023 1:43:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jack1e0/ip.git to complete... -Sep 04, 2023 1:43:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:11:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ph-nathan/ip.git (master)... +Sep 05, 2023 1:11:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ph-nathan/ip.git (master)... +Sep 05, 2023 1:11:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/A1WAYSD/ip.git completed! +Sep 05, 2023 1:11:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ph-nathan/ip.git (master) completed! +Sep 05, 2023 1:11:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tanteckfang/ip.git (master)... -Sep 04, 2023 1:43:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:11:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [7/480] Analyzing https://github.com/butteredyakiimo/ip.git (master)... +Sep 05, 2023 1:11:56 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/hjoneweek/ip.git... +Sep 05, 2023 1:11:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/hjoneweek/ip.git to complete... +Sep 05, 2023 1:11:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tanteckfang/ip.git (master)... -Sep 04, 2023 1:43:16 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tanteckfang/ip.git (master) completed! -Sep 04, 2023 1:43:16 PM reposense.report.ReportGenerator analyzeRepos -INFO: [8/480] Analyzing https://github.com/butteredyakiimo/ip.git (master)... -Sep 04, 2023 1:43:16 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:11:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/NgChunMan/ip.git completed! +Sep 05, 2023 1:11:56 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/butteredyakiimo/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:11:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/butteredyakiimo/ip.git (master)... -Sep 04, 2023 1:43:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/NgChunMan/ip.git completed! -Sep 04, 2023 1:43:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/limjunxian1/ip.git completed! -Sep 04, 2023 1:43:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/A1WAYSD/ip.git completed! -Sep 04, 2023 1:43:16 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/hjoneweek/ip.git... -Sep 04, 2023 1:43:16 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/dishenggg/ip.git... -Sep 04, 2023 1:43:16 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tanteckfang/ip.git (master) completed! +Sep 05, 2023 1:11:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zhyuhan/ip.git... -Sep 04, 2023 1:43:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [8/480] Analyzing https://github.com/yuxunn/ip.git (master)... +Sep 05, 2023 1:11:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/dishenggg/ip.git to complete... -Sep 04, 2023 1:43:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/hjoneweek/ip.git to complete... -Sep 04, 2023 1:43:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/zhyuhan/ip.git to complete... -Sep 04, 2023 1:43:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:11:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yuxunn/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:11:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yuxunn/ip.git (master)... +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jack1e0/ip.git completed! +Sep 05, 2023 1:11:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yuxunn/ip.git (master)... -Sep 04, 2023 1:43:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Dioclei/ip.git... +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Dioclei/ip.git to complete... +Sep 05, 2023 1:11:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yuxunn/ip.git (master)... -Sep 04, 2023 1:43:16 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:11:57 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yuxunn/ip.git (master) completed! -Sep 04, 2023 1:43:16 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:11:57 AM reposense.report.ReportGenerator analyzeRepos INFO: [9/480] Analyzing https://github.com/RB9823/ip.git (master)... -Sep 04, 2023 1:43:17 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:11:57 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/RB9823/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:11:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/RB9823/ip.git (master)... -Sep 04, 2023 1:43:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/RB9823/ip.git (master)... -Sep 04, 2023 1:43:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jack1e0/ip.git completed! -Sep 04, 2023 1:43:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/RB9823/ip.git (master)... -Sep 04, 2023 1:43:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Dioclei/ip.git... -Sep 04, 2023 1:43:17 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/RB9823/ip.git (master) completed! -Sep 04, 2023 1:43:17 PM reposense.report.ReportGenerator analyzeRepos -INFO: [10/480] Analyzing https://github.com/shyanyong/ip.git (master)... -Sep 04, 2023 1:43:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Dioclei/ip.git to complete... -Sep 04, 2023 1:43:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zhyuhan/ip.git completed! -Sep 04, 2023 1:43:17 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/hjoneweek/ip.git completed! +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Daphne789/ip.git... -Sep 04, 2023 1:43:17 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/shyanyong/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/shyanyong/ip.git (master)... -Sep 04, 2023 1:43:17 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Daphne789/ip.git to complete... -Sep 04, 2023 1:43:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/hjoneweek/ip.git completed! -Sep 04, 2023 1:43:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/WinstonLeonard/ip.git... -Sep 04, 2023 1:43:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dishenggg/ip.git completed! -Sep 04, 2023 1:43:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/peiran18/ip.git... -Sep 04, 2023 1:43:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/WinstonLeonard/ip.git to complete... -Sep 04, 2023 1:43:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:11:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/butteredyakiimo/ip.git (master)... -Sep 04, 2023 1:43:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/peiran18/ip.git to complete... -Sep 04, 2023 1:43:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dishenggg/ip.git completed! +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zhyuhan/ip.git completed! +Sep 05, 2023 1:11:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/butteredyakiimo/ip.git (master)... -Sep 04, 2023 1:43:17 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:11:57 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/butteredyakiimo/ip.git (master) completed! -Sep 04, 2023 1:43:17 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:11:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [10/480] Analyzing https://github.com/TyrusLye/ip.git (master)... +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/WinstonLeonard/ip.git... +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/peiran18/ip.git... +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/peiran18/ip.git to complete... +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/WinstonLeonard/ip.git to complete... +Sep 05, 2023 1:11:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/TyrusLye/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:11:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/TyrusLye/ip.git (master)... +Sep 05, 2023 1:11:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/RB9823/ip.git (master)... +Sep 05, 2023 1:11:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/TyrusLye/ip.git (master)... +Sep 05, 2023 1:11:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/RB9823/ip.git (master)... +Sep 05, 2023 1:11:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/RB9823/ip.git (master) completed! +Sep 05, 2023 1:11:57 AM reposense.report.ReportGenerator analyzeRepos INFO: [11/480] Analyzing https://github.com/cxo05/ip.git (master)... -Sep 04, 2023 1:43:17 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:11:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/TyrusLye/ip.git (master)... +Sep 05, 2023 1:11:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/TyrusLye/ip.git (master) completed! +Sep 05, 2023 1:11:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [12/480] Analyzing https://github.com/shyanyong/ip.git (master)... +Sep 05, 2023 1:11:57 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/cxo05/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:11:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/cxo05/ip.git (master)... -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/shyanyong/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:11:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/shyanyong/ip.git (master)... +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Dioclei/ip.git completed! -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AriellaCallista/ip.git... -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AriellaCallista/ip.git to complete... -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Daphne789/ip.git completed! -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/migfoo02/ip.git... -Sep 04, 2023 1:43:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/shyanyong/ip.git (master)... -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/migfoo02/ip.git to complete... -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/peiran18/ip.git completed! -Sep 04, 2023 1:43:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/shyanyong/ip.git (master)... -Sep 04, 2023 1:43:18 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/shyanyong/ip.git (master) completed! -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/WinstonLeonard/ip.git completed! -Sep 04, 2023 1:43:18 PM reposense.report.ReportGenerator analyzeRepos -INFO: [12/480] Analyzing https://github.com/TyrusLye/ip.git (master)... -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/migfoo02/ip.git to complete... +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Jonyxzx/ip.git... -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/SynapseProgramming/ip.git... -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Jonyxzx/ip.git to complete... -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/SynapseProgramming/ip.git to complete... -Sep 04, 2023 1:43:18 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/TyrusLye/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/TyrusLye/ip.git (master)... -Sep 04, 2023 1:43:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:11:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/shyanyong/ip.git (master)... +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AriellaCallista/ip.git completed! +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Darren159/ip.git... +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Darren159/ip.git to complete... +Sep 05, 2023 1:11:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/shyanyong/ip.git (master)... +Sep 05, 2023 1:11:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/shyanyong/ip.git (master) completed! +Sep 05, 2023 1:11:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/cxo05/ip.git (master)... -Sep 04, 2023 1:43:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:11:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [13/480] Analyzing https://github.com/howenc/ip.git (master)... +Sep 05, 2023 1:11:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/cxo05/ip.git (master)... -Sep 04, 2023 1:43:18 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:11:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/howenc/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:11:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/howenc/ip.git (master)... +Sep 05, 2023 1:11:58 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/cxo05/ip.git (master) completed! -Sep 04, 2023 1:43:18 PM reposense.report.ReportGenerator analyzeRepos -INFO: [13/480] Analyzing https://github.com/Kurtyjlee/ip.git (master)... -Sep 04, 2023 1:43:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/TyrusLye/ip.git (master)... -Sep 04, 2023 1:43:18 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:11:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [14/480] Analyzing https://github.com/Kurtyjlee/ip.git (master)... +Sep 05, 2023 1:11:58 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Kurtyjlee/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:11:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Kurtyjlee/ip.git (master)... -Sep 04, 2023 1:43:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/TyrusLye/ip.git (master)... -Sep 04, 2023 1:43:18 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/TyrusLye/ip.git (master) completed! -Sep 04, 2023 1:43:18 PM reposense.report.ReportGenerator analyzeRepos -INFO: [14/480] Analyzing https://github.com/howenc/ip.git (master)... -Sep 04, 2023 1:43:18 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/howenc/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/howenc/ip.git (master)... -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AriellaCallista/ip.git completed! -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Darren159/ip.git... -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Darren159/ip.git to complete... -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/migfoo02/ip.git completed! -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/SynapseProgramming/ip.git completed! +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/imkwokyong/ip.git... -Sep 04, 2023 1:43:18 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/imkwokyong/ip.git to complete... -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/migfoo02/ip.git completed! +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Jonyxzx/ip.git completed! -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/SynapseProgramming/ip.git completed! -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/joeng03/ip.git... -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/vijay-shankaranand/ip.git... -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/joeng03/ip.git to complete... -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/vijay-shankaranand/ip.git to complete... -Sep 04, 2023 1:43:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:11:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/joeng03/ip.git to complete... +Sep 05, 2023 1:11:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Darren159/ip.git completed! +Sep 05, 2023 1:11:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/SelwynAng/ip.git... +Sep 05, 2023 1:11:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/SelwynAng/ip.git to complete... +Sep 05, 2023 1:11:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Kurtyjlee/ip.git (master)... -Sep 04, 2023 1:43:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:11:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/howenc/ip.git (master)... +Sep 05, 2023 1:11:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Kurtyjlee/ip.git (master)... -Sep 04, 2023 1:43:19 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:11:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/imkwokyong/ip.git completed! +Sep 05, 2023 1:11:59 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Kurtyjlee/ip.git (master) completed! -Sep 04, 2023 1:43:19 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:11:59 AM reposense.report.ReportGenerator analyzeRepos INFO: [15/480] Analyzing https://github.com/josepholim/ip.git (master)... -Sep 04, 2023 1:43:19 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:11:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jeffrey-jian/ip.git... +Sep 05, 2023 1:11:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jeffrey-jian/ip.git to complete... +Sep 05, 2023 1:11:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/howenc/ip.git (master)... +Sep 05, 2023 1:11:59 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/josepholim/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:11:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/josepholim/ip.git (master)... -Sep 04, 2023 1:43:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/howenc/ip.git (master)... -Sep 04, 2023 1:43:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/howenc/ip.git (master)... -Sep 04, 2023 1:43:19 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:11:59 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/howenc/ip.git (master) completed! -Sep 04, 2023 1:43:19 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:11:59 AM reposense.report.ReportGenerator analyzeRepos INFO: [16/480] Analyzing https://github.com/geoffong11/ip.git (master)... -Sep 04, 2023 1:43:19 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:11:59 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/geoffong11/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:11:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/geoffong11/ip.git (master)... -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Darren159/ip.git completed! -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/SelwynAng/ip.git... -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/SelwynAng/ip.git to complete... -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/imkwokyong/ip.git completed! -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jeffrey-jian/ip.git... -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/vijay-shankaranand/ip.git completed! -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jeffrey-jian/ip.git to complete... -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/joeng03/ip.git completed! -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tanyyyming/ip.git... -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:11:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tanyyyming/ip.git to complete... +Sep 05, 2023 1:11:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/joeng03/ip.git completed! +Sep 05, 2023 1:11:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/JCSnap/ip.git... -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:11:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/JCSnap/ip.git to complete... -Sep 04, 2023 1:43:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tanyyyming/ip.git to complete... -Sep 04, 2023 1:43:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:11:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/SelwynAng/ip.git completed! +Sep 05, 2023 1:11:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AprupKale/ip.git... +Sep 05, 2023 1:11:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AprupKale/ip.git to complete... +Sep 05, 2023 1:11:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/geoffong11/ip.git (master)... +Sep 05, 2023 1:11:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/josepholim/ip.git (master)... -Sep 04, 2023 1:43:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:11:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/geoffong11/ip.git (master)... +Sep 05, 2023 1:12:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/geoffong11/ip.git (master) completed! +Sep 05, 2023 1:12:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [17/480] Analyzing https://github.com/jianrong7/ip.git (master)... +Sep 05, 2023 1:12:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/josepholim/ip.git (master)... -Sep 04, 2023 1:43:19 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:00 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/josepholim/ip.git (master) completed! -Sep 04, 2023 1:43:19 PM reposense.report.ReportGenerator analyzeRepos -INFO: [17/480] Analyzing https://github.com/jianrong7/ip.git (master)... -Sep 04, 2023 1:43:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/geoffong11/ip.git (master)... -Sep 04, 2023 1:43:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/geoffong11/ip.git (master)... -Sep 04, 2023 1:43:19 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [18/480] Analyzing https://github.com/A1WAYSD/ip.git (master)... +Sep 05, 2023 1:12:00 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jianrong7/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jianrong7/ip.git (master)... -Sep 04, 2023 1:43:19 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/geoffong11/ip.git (master) completed! -Sep 04, 2023 1:43:19 PM reposense.report.ReportGenerator analyzeRepos -INFO: [18/480] Analyzing https://github.com/NgChunMan/ip.git (master)... -Sep 04, 2023 1:43:20 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/NgChunMan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/NgChunMan/ip.git (master)... -Sep 04, 2023 1:43:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/SelwynAng/ip.git completed! -Sep 04, 2023 1:43:20 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AprupKale/ip.git... -Sep 04, 2023 1:43:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AprupKale/ip.git to complete... -Sep 04, 2023 1:43:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jianrong7/ip.git (master)... -Sep 04, 2023 1:43:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jeffrey-jian/ip.git completed! -Sep 04, 2023 1:43:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jianrong7/ip.git (master)... -Sep 04, 2023 1:43:20 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/A1WAYSD/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/A1WAYSD/ip.git (master)... +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/woojiahao/ip.git... -Sep 04, 2023 1:43:20 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jianrong7/ip.git (master) completed! -Sep 04, 2023 1:43:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JCSnap/ip.git completed! -Sep 04, 2023 1:43:20 PM reposense.report.ReportGenerator analyzeRepos -INFO: [19/480] Analyzing https://github.com/A1WAYSD/ip.git (master)... -Sep 04, 2023 1:43:20 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/PetrichorPrecipice/ip.git... -Sep 04, 2023 1:43:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tanyyyming/ip.git completed! -Sep 04, 2023 1:43:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/woojiahao/ip.git to complete... -Sep 04, 2023 1:43:20 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/syamfarh/ip.git... -Sep 04, 2023 1:43:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tanyyyming/ip.git completed! +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/PetrichorPrecipice/ip.git... +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/PetrichorPrecipice/ip.git to complete... -Sep 04, 2023 1:43:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JCSnap/ip.git completed! +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/syamfarh/ip.git... +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/syamfarh/ip.git to complete... -Sep 04, 2023 1:43:20 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/A1WAYSD/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/A1WAYSD/ip.git (master)... -Sep 04, 2023 1:43:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/NgChunMan/ip.git (master)... -Sep 04, 2023 1:43:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/NgChunMan/ip.git (master)... -Sep 04, 2023 1:43:20 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/NgChunMan/ip.git (master) completed! -Sep 04, 2023 1:43:20 PM reposense.report.ReportGenerator analyzeRepos -INFO: [20/480] Analyzing https://github.com/limjunxian1/ip.git (master)... -Sep 04, 2023 1:43:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/A1WAYSD/ip.git (master)... -Sep 04, 2023 1:43:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AprupKale/ip.git completed! -Sep 04, 2023 1:43:20 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/limjunxian1/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/limjunxian1/ip.git (master)... -Sep 04, 2023 1:43:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/A1WAYSD/ip.git (master)... -Sep 04, 2023 1:43:20 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/D-Limiter/ip.git... -Sep 04, 2023 1:43:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/D-Limiter/ip.git to complete... -Sep 04, 2023 1:43:20 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/A1WAYSD/ip.git (master)... +Sep 05, 2023 1:12:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/A1WAYSD/ip.git (master)... +Sep 05, 2023 1:12:00 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/A1WAYSD/ip.git (master) completed! -Sep 04, 2023 1:43:20 PM reposense.report.ReportGenerator analyzeRepos -INFO: [21/480] Analyzing https://github.com/jack1e0/ip.git (master)... -Sep 04, 2023 1:43:20 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jack1e0/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jack1e0/ip.git (master)... -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/syamfarh/ip.git completed! -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/coderhuang559/ip.git... -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jianrong7/ip.git (master)... +Sep 05, 2023 1:12:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [19/480] Analyzing https://github.com/NgChunMan/ip.git (master)... +Sep 05, 2023 1:12:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jianrong7/ip.git (master)... +Sep 05, 2023 1:12:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jianrong7/ip.git (master) completed! +Sep 05, 2023 1:12:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [20/480] Analyzing https://github.com/limjunxian1/ip.git (master)... +Sep 05, 2023 1:12:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/NgChunMan/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/NgChunMan/ip.git (master)... +Sep 05, 2023 1:12:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/limjunxian1/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/limjunxian1/ip.git (master)... +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/woojiahao/ip.git completed! -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/coderhuang559/ip.git... +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/coderhuang559/ip.git to complete... -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/PetrichorPrecipice/ip.git completed! -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LINCHENYU2030S/ip.git... -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LINCHENYU2030S/ip.git to complete... -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/syamfarh/ip.git completed! +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/pra-navi/ip.git... -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/pra-navi/ip.git to complete... -Sep 04, 2023 1:43:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/limjunxian1/ip.git (master)... -Sep 04, 2023 1:43:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/limjunxian1/ip.git (master)... -Sep 04, 2023 1:43:21 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/limjunxian1/ip.git (master) completed! -Sep 04, 2023 1:43:21 PM reposense.report.ReportGenerator analyzeRepos -INFO: [22/480] Analyzing https://github.com/zhyuhan/ip.git (master)... -Sep 04, 2023 1:43:21 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zhyuhan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zhyuhan/ip.git (master)... -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/D-Limiter/ip.git completed! -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/phiphi-tan/ip.git... -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/phiphi-tan/ip.git to complete... -Sep 04, 2023 1:43:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jack1e0/ip.git (master)... -Sep 04, 2023 1:43:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jack1e0/ip.git (master)... -Sep 04, 2023 1:43:21 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jack1e0/ip.git (master) completed! -Sep 04, 2023 1:43:21 PM reposense.report.ReportGenerator analyzeRepos -INFO: [23/480] Analyzing https://github.com/hjoneweek/ip.git (master)... -Sep 04, 2023 1:43:21 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/hjoneweek/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/hjoneweek/ip.git (master)... -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/pra-navi/ip.git completed! -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/limjunxian1/ip.git (master)... +Sep 05, 2023 1:12:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/limjunxian1/ip.git (master)... +Sep 05, 2023 1:12:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/limjunxian1/ip.git (master) completed! +Sep 05, 2023 1:12:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [21/480] Analyzing https://github.com/jack1e0/ip.git (master)... +Sep 05, 2023 1:12:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jack1e0/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jack1e0/ip.git (master)... +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/coderhuang559/ip.git completed! -Sep 04, 2023 1:43:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/hjoneweek/ip.git (master)... -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ktzy0305/ip.git... -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LordSaumya/ip.git... -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LINCHENYU2030S/ip.git completed! +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ktzy0305/ip.git to complete... -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LordSaumya/ip.git... +Sep 05, 2023 1:12:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/NgChunMan/ip.git (master)... +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LordSaumya/ip.git to complete... -Sep 04, 2023 1:43:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/hjoneweek/ip.git (master)... -Sep 04, 2023 1:43:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LINCHENYU2030S/ip.git completed! -Sep 04, 2023 1:43:21 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/hjoneweek/ip.git (master) completed! -Sep 04, 2023 1:43:21 PM reposense.report.ReportGenerator analyzeRepos -INFO: [24/480] Analyzing https://github.com/dishenggg/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zhyuhan/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/NgChunMan/ip.git (master)... +Sep 05, 2023 1:12:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/NgChunMan/ip.git (master) completed! +Sep 05, 2023 1:12:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [22/480] Analyzing https://github.com/hjoneweek/ip.git (master)... +Sep 05, 2023 1:12:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/hjoneweek/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/hjoneweek/ip.git (master)... +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/pra-navi/ip.git completed! +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Chen1x/ip.git... -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Chen1x/ip.git to complete... -Sep 04, 2023 1:43:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zhyuhan/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dishenggg/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dishenggg/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zhyuhan/ip.git (master) completed! -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator analyzeRepos -INFO: [25/480] Analyzing https://github.com/Dioclei/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/phiphi-tan/ip.git completed! -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yanghengtang/ip.git... -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Dioclei/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Dioclei/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yanghengtang/ip.git to complete... -Sep 04, 2023 1:43:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Dioclei/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Dioclei/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Dioclei/ip.git (master) completed! -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator analyzeRepos -INFO: [26/480] Analyzing https://github.com/Daphne789/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Daphne789/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Daphne789/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dishenggg/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/dishenggg/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/dishenggg/ip.git (master) completed! -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator analyzeRepos -INFO: [27/480] Analyzing https://github.com/peiran18/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/peiran18/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/peiran18/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/hjoneweek/ip.git (master)... +Sep 05, 2023 1:12:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/hjoneweek/ip.git (master)... +Sep 05, 2023 1:12:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/hjoneweek/ip.git (master) completed! +Sep 05, 2023 1:12:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [23/480] Analyzing https://github.com/zhyuhan/ip.git (master)... +Sep 05, 2023 1:12:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jack1e0/ip.git (master)... +Sep 05, 2023 1:12:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zhyuhan/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zhyuhan/ip.git (master)... +Sep 05, 2023 1:12:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jack1e0/ip.git (master)... +Sep 05, 2023 1:12:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jack1e0/ip.git (master) completed! +Sep 05, 2023 1:12:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [24/480] Analyzing https://github.com/dishenggg/ip.git (master)... +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ktzy0305/ip.git completed! -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/johnnythesnake12/ip.git... -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dishenggg/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dishenggg/ip.git (master)... +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/johnnythesnake12/ip.git to complete... -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Chen1x/ip.git completed! -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/LordSaumya/ip.git completed! -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/oeggy03/ip.git... -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/p-xp/ip.git... -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/oeggy03/ip.git to complete... -Sep 04, 2023 1:43:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/peiran18/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Chen1x/ip.git completed! +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/p-xp/ip.git... +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/p-xp/ip.git to complete... -Sep 04, 2023 1:43:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/peiran18/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/peiran18/ip.git (master) completed! -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator analyzeRepos -INFO: [28/480] Analyzing https://github.com/WinstonLeonard/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Daphne789/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/yanghengtang/ip.git completed! -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WinstonLeonard/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WinstonLeonard/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/matochichap/ip.git... -Sep 04, 2023 1:43:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/matochichap/ip.git to complete... -Sep 04, 2023 1:43:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zhyuhan/ip.git (master)... +Sep 05, 2023 1:12:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dishenggg/ip.git (master)... +Sep 05, 2023 1:12:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zhyuhan/ip.git (master)... +Sep 05, 2023 1:12:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/dishenggg/ip.git (master)... +Sep 05, 2023 1:12:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zhyuhan/ip.git (master) completed! +Sep 05, 2023 1:12:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [25/480] Analyzing https://github.com/Dioclei/ip.git (master)... +Sep 05, 2023 1:12:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/dishenggg/ip.git (master) completed! +Sep 05, 2023 1:12:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [26/480] Analyzing https://github.com/Daphne789/ip.git (master)... +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/johnnythesnake12/ip.git completed! +Sep 05, 2023 1:12:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Daphne789/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Daphne789/ip.git (master)... +Sep 05, 2023 1:12:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Dioclei/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Dioclei/ip.git (master)... +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/applepiofmyeye/ip.git... +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/applepiofmyeye/ip.git to complete... +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/oeggy03/ip.git completed! +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/TiwKangXu/ip.git... +Sep 05, 2023 1:12:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/TiwKangXu/ip.git to complete... +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/p-xp/ip.git completed! +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ScarletBlanks/ip.git... +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ScarletBlanks/ip.git to complete... +Sep 05, 2023 1:12:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Dioclei/ip.git (master)... +Sep 05, 2023 1:12:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Daphne789/ip.git (master)... +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/matochichap/ip.git completed! +Sep 05, 2023 1:12:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Dioclei/ip.git (master)... +Sep 05, 2023 1:12:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Dioclei/ip.git (master) completed! +Sep 05, 2023 1:12:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [27/480] Analyzing https://github.com/WinstonLeonard/ip.git (master)... +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/chiayunrong/ip.git... +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/chiayunrong/ip.git to complete... +Sep 05, 2023 1:12:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WinstonLeonard/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WinstonLeonard/ip.git (master)... +Sep 05, 2023 1:12:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Daphne789/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:03 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Daphne789/ip.git (master) completed! -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [28/480] Analyzing https://github.com/peiran18/ip.git (master)... +Sep 05, 2023 1:12:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/peiran18/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/peiran18/ip.git (master)... +Sep 05, 2023 1:12:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/peiran18/ip.git (master)... +Sep 05, 2023 1:12:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/peiran18/ip.git (master)... +Sep 05, 2023 1:12:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/peiran18/ip.git (master) completed! +Sep 05, 2023 1:12:03 AM reposense.report.ReportGenerator analyzeRepos INFO: [29/480] Analyzing https://github.com/AriellaCallista/ip.git (master)... -Sep 04, 2023 1:43:22 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/WinstonLeonard/ip.git (master)... +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/TiwKangXu/ip.git completed! +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/applepiofmyeye/ip.git completed! +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/devanshubisht/ip.git... +Sep 05, 2023 1:12:03 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AriellaCallista/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jx124/ip.git... +Sep 05, 2023 1:12:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AriellaCallista/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/WinstonLeonard/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/devanshubisht/ip.git to complete... +Sep 05, 2023 1:12:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/WinstonLeonard/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:03 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/WinstonLeonard/ip.git (master) completed! -Sep 04, 2023 1:43:23 PM reposense.report.ReportGenerator analyzeRepos -INFO: [30/480] Analyzing https://github.com/migfoo02/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/migfoo02/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/migfoo02/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [30/480] Analyzing https://github.com/SynapseProgramming/ip.git (master)... +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jx124/ip.git to complete... +Sep 05, 2023 1:12:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/SynapseProgramming/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/SynapseProgramming/ip.git (master)... +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ScarletBlanks/ip.git completed! +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Clin-lyx/ip.git... +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Clin-lyx/ip.git to complete... +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/chiayunrong/ip.git completed! +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AryanG01/ip.git... +Sep 05, 2023 1:12:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AryanG01/ip.git to complete... +Sep 05, 2023 1:12:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SynapseProgramming/ip.git (master)... +Sep 05, 2023 1:12:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AriellaCallista/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/migfoo02/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AriellaCallista/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SynapseProgramming/ip.git (master)... +Sep 05, 2023 1:12:04 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AriellaCallista/ip.git (master) completed! -Sep 04, 2023 1:43:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/migfoo02/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/migfoo02/ip.git (master) completed! -Sep 04, 2023 1:43:23 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:04 AM reposense.report.ReportGenerator analyzeRepos INFO: [31/480] Analyzing https://github.com/Jonyxzx/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.report.ReportGenerator analyzeRepos -INFO: [32/480] Analyzing https://github.com/SynapseProgramming/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SynapseProgramming/ip.git (master) completed! +Sep 05, 2023 1:12:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [32/480] Analyzing https://github.com/migfoo02/ip.git (master)... +Sep 05, 2023 1:12:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/migfoo02/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/migfoo02/ip.git (master)... +Sep 05, 2023 1:12:04 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Jonyxzx/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Jonyxzx/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/johnnythesnake12/ip.git completed! -Sep 04, 2023 1:43:23 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/SynapseProgramming/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/SynapseProgramming/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/p-xp/ip.git completed! -Sep 04, 2023 1:43:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/oeggy03/ip.git completed! -Sep 04, 2023 1:43:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/matochichap/ip.git completed! -Sep 04, 2023 1:43:23 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/applepiofmyeye/ip.git... -Sep 04, 2023 1:43:23 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/TiwKangXu/ip.git... -Sep 04, 2023 1:43:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/applepiofmyeye/ip.git to complete... -Sep 04, 2023 1:43:23 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ScarletBlanks/ip.git... -Sep 04, 2023 1:43:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/TiwKangXu/ip.git to complete... -Sep 04, 2023 1:43:23 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/chiayunrong/ip.git... -Sep 04, 2023 1:43:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ScarletBlanks/ip.git to complete... -Sep 04, 2023 1:43:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/chiayunrong/ip.git to complete... -Sep 04, 2023 1:43:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SynapseProgramming/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SynapseProgramming/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SynapseProgramming/ip.git (master) completed! -Sep 04, 2023 1:43:23 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/devanshubisht/ip.git completed! +Sep 05, 2023 1:12:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/migfoo02/ip.git (master)... +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jx124/ip.git completed! +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kayabuttertoastt/ip.git... +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sheryew/ip.git... +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kayabuttertoastt/ip.git to complete... +Sep 05, 2023 1:12:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/migfoo02/ip.git (master)... +Sep 05, 2023 1:12:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/migfoo02/ip.git (master) completed! +Sep 05, 2023 1:12:04 AM reposense.report.ReportGenerator analyzeRepos INFO: [33/480] Analyzing https://github.com/Darren159/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sheryew/ip.git to complete... +Sep 05, 2023 1:12:04 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Darren159/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Darren159/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Clin-lyx/ip.git completed! +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jonasongg/ip.git... +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jonasongg/ip.git to complete... +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AryanG01/ip.git completed! +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yiwen101/ip.git... +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yiwen101/ip.git to complete... +Sep 05, 2023 1:12:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Jonyxzx/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Jonyxzx/ip.git (master)... -Sep 04, 2023 1:43:23 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:04 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Jonyxzx/ip.git (master) completed! -Sep 04, 2023 1:43:23 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:04 AM reposense.report.ReportGenerator analyzeRepos INFO: [34/480] Analyzing https://github.com/imkwokyong/ip.git (master)... -Sep 04, 2023 1:43:24 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/imkwokyong/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/imkwokyong/ip.git (master)... -Sep 04, 2023 1:43:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/TiwKangXu/ip.git completed! -Sep 04, 2023 1:43:24 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/devanshubisht/ip.git... -Sep 04, 2023 1:43:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/applepiofmyeye/ip.git completed! -Sep 04, 2023 1:43:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/devanshubisht/ip.git to complete... -Sep 04, 2023 1:43:24 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jx124/ip.git... -Sep 04, 2023 1:43:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ScarletBlanks/ip.git completed! -Sep 04, 2023 1:43:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/chiayunrong/ip.git completed! -Sep 04, 2023 1:43:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jx124/ip.git to complete... -Sep 04, 2023 1:43:24 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Clin-lyx/ip.git... -Sep 04, 2023 1:43:24 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AryanG01/ip.git... -Sep 04, 2023 1:43:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Clin-lyx/ip.git to complete... -Sep 04, 2023 1:43:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AryanG01/ip.git to complete... -Sep 04, 2023 1:43:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Darren159/ip.git (master)... -Sep 04, 2023 1:43:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Darren159/ip.git (master)... -Sep 04, 2023 1:43:24 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:04 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Darren159/ip.git (master) completed! -Sep 04, 2023 1:43:24 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/imkwokyong/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/imkwokyong/ip.git (master)... +Sep 05, 2023 1:12:04 AM reposense.report.ReportGenerator analyzeRepos INFO: [35/480] Analyzing https://github.com/vijay-shankaranand/ip.git (master)... -Sep 04, 2023 1:43:24 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:04 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/vijay-shankaranand/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/vijay-shankaranand/ip.git (master)... -Sep 04, 2023 1:43:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/imkwokyong/ip.git (master)... -Sep 04, 2023 1:43:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/imkwokyong/ip.git (master)... -Sep 04, 2023 1:43:24 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/imkwokyong/ip.git (master) completed! -Sep 04, 2023 1:43:24 PM reposense.report.ReportGenerator analyzeRepos -INFO: [36/480] Analyzing https://github.com/joeng03/ip.git (master)... -Sep 04, 2023 1:43:24 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/joeng03/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/joeng03/ip.git (master)... -Sep 04, 2023 1:43:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sheryew/ip.git completed! +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kayabuttertoastt/ip.git completed! +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tiongMax/ip.git... +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/chuababyy/ip.git... +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tiongMax/ip.git to complete... +Sep 05, 2023 1:12:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/chuababyy/ip.git to complete... +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jonasongg/ip.git completed! +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/supermii2/ip.git... +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/supermii2/ip.git to complete... +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yiwen101/ip.git completed! +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/remuslum/ip.git... +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/remuslum/ip.git to complete... +Sep 05, 2023 1:12:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/vijay-shankaranand/ip.git (master)... -Sep 04, 2023 1:43:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/vijay-shankaranand/ip.git (master)... -Sep 04, 2023 1:43:24 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:05 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/vijay-shankaranand/ip.git (master) completed! -Sep 04, 2023 1:43:24 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [36/480] Analyzing https://github.com/joeng03/ip.git (master)... +Sep 05, 2023 1:12:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/joeng03/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/joeng03/ip.git (master)... +Sep 05, 2023 1:12:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/imkwokyong/ip.git (master)... +Sep 05, 2023 1:12:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/imkwokyong/ip.git (master)... +Sep 05, 2023 1:12:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/imkwokyong/ip.git (master) completed! +Sep 05, 2023 1:12:05 AM reposense.report.ReportGenerator analyzeRepos INFO: [37/480] Analyzing https://github.com/SelwynAng/ip.git (master)... -Sep 04, 2023 1:43:24 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:05 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/SelwynAng/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/SelwynAng/ip.git (master)... -Sep 04, 2023 1:43:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/devanshubisht/ip.git completed! -Sep 04, 2023 1:43:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jx124/ip.git completed! -Sep 04, 2023 1:43:24 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kayabuttertoastt/ip.git... -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sheryew/ip.git... -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kayabuttertoastt/ip.git to complete... -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AryanG01/ip.git completed! -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sheryew/ip.git to complete... -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jonasongg/ip.git... -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jonasongg/ip.git to complete... -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Clin-lyx/ip.git completed! -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yiwen101/ip.git... -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yiwen101/ip.git to complete... -Sep 04, 2023 1:43:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/chuababyy/ip.git completed! +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kanna-1/ip.git... +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kanna-1/ip.git to complete... +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tiongMax/ip.git completed! +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/supermii2/ip.git completed! +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nicolengk/ip.git... +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nicolengk/ip.git to complete... +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/newway1814/ip.git... +Sep 05, 2023 1:12:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/joeng03/ip.git (master)... -Sep 04, 2023 1:43:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/newway1814/ip.git to complete... +Sep 05, 2023 1:12:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/joeng03/ip.git (master)... -Sep 04, 2023 1:43:25 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:05 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/joeng03/ip.git (master) completed! -Sep 04, 2023 1:43:25 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:05 AM reposense.report.ReportGenerator analyzeRepos INFO: [38/480] Analyzing https://github.com/jeffrey-jian/ip.git (master)... -Sep 04, 2023 1:43:25 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:05 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jeffrey-jian/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jeffrey-jian/ip.git (master)... -Sep 04, 2023 1:43:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/remuslum/ip.git completed! +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/glenngnng/ip.git... +Sep 05, 2023 1:12:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/glenngnng/ip.git to complete... +Sep 05, 2023 1:12:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/SelwynAng/ip.git (master)... -Sep 04, 2023 1:43:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/SelwynAng/ip.git (master)... -Sep 04, 2023 1:43:25 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/SelwynAng/ip.git (master) completed! -Sep 04, 2023 1:43:25 PM reposense.report.ReportGenerator analyzeRepos -INFO: [39/480] Analyzing https://github.com/JCSnap/ip.git (master)... -Sep 04, 2023 1:43:25 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/JCSnap/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/JCSnap/ip.git (master)... -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kayabuttertoastt/ip.git completed! -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sheryew/ip.git completed! -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jonasongg/ip.git completed! -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tiongMax/ip.git... -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/chuababyy/ip.git... -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/supermii2/ip.git... -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tiongMax/ip.git to complete... -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/supermii2/ip.git to complete... -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/chuababyy/ip.git to complete... -Sep 04, 2023 1:43:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [39/480] Analyzing https://github.com/tanyyyming/ip.git (master)... +Sep 05, 2023 1:12:06 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tanyyyming/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tanyyyming/ip.git (master)... +Sep 05, 2023 1:12:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kanna-1/ip.git completed! +Sep 05, 2023 1:12:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zsh-eng/ip.git... +Sep 05, 2023 1:12:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zsh-eng/ip.git to complete... +Sep 05, 2023 1:12:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jeffrey-jian/ip.git (master)... -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yiwen101/ip.git completed! -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/remuslum/ip.git... -Sep 04, 2023 1:43:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jeffrey-jian/ip.git (master)... -Sep 04, 2023 1:43:25 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jeffrey-jian/ip.git (master) completed! -Sep 04, 2023 1:43:25 PM reposense.report.ReportGenerator analyzeRepos -INFO: [40/480] Analyzing https://github.com/tanyyyming/ip.git (master)... -Sep 04, 2023 1:43:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/remuslum/ip.git to complete... -Sep 04, 2023 1:43:25 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tanyyyming/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tanyyyming/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [40/480] Analyzing https://github.com/JCSnap/ip.git (master)... +Sep 05, 2023 1:12:06 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/JCSnap/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/JCSnap/ip.git (master)... +Sep 05, 2023 1:12:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nicolengk/ip.git completed! +Sep 05, 2023 1:12:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/mingyuanc/ip.git... +Sep 05, 2023 1:12:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/mingyuanc/ip.git to complete... +Sep 05, 2023 1:12:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/glenngnng/ip.git completed! +Sep 05, 2023 1:12:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/newway1814/ip.git completed! +Sep 05, 2023 1:12:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LamJiuFong/ip.git... +Sep 05, 2023 1:12:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/GlendaChong/ip.git... +Sep 05, 2023 1:12:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LamJiuFong/ip.git to complete... +Sep 05, 2023 1:12:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/GlendaChong/ip.git to complete... +Sep 05, 2023 1:12:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/JCSnap/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/JCSnap/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/JCSnap/ip.git (master) completed! -Sep 04, 2023 1:43:26 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:06 AM reposense.report.ReportGenerator analyzeRepos INFO: [41/480] Analyzing https://github.com/AprupKale/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tanyyyming/ip.git (master)... +Sep 05, 2023 1:12:06 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AprupKale/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AprupKale/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tanyyyming/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AprupKale/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tanyyyming/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tanyyyming/ip.git (master) completed! -Sep 04, 2023 1:43:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AprupKale/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.report.ReportGenerator analyzeRepos -INFO: [42/480] Analyzing https://github.com/syamfarh/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AprupKale/ip.git (master) completed! -Sep 04, 2023 1:43:26 PM reposense.report.ReportGenerator analyzeRepos -INFO: [43/480] Analyzing https://github.com/woojiahao/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/syamfarh/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/syamfarh/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [42/480] Analyzing https://github.com/woojiahao/ip.git (master)... +Sep 05, 2023 1:12:06 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/woojiahao/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/woojiahao/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tiongMax/ip.git completed! -Sep 04, 2023 1:43:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/chuababyy/ip.git completed! -Sep 04, 2023 1:43:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/supermii2/ip.git completed! -Sep 04, 2023 1:43:26 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kanna-1/ip.git... -Sep 04, 2023 1:43:26 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nicolengk/ip.git... -Sep 04, 2023 1:43:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/remuslum/ip.git completed! -Sep 04, 2023 1:43:26 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/newway1814/ip.git... -Sep 04, 2023 1:43:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nicolengk/ip.git to complete... -Sep 04, 2023 1:43:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/newway1814/ip.git to complete... -Sep 04, 2023 1:43:26 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/glenngnng/ip.git... -Sep 04, 2023 1:43:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kanna-1/ip.git to complete... -Sep 04, 2023 1:43:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/glenngnng/ip.git to complete... -Sep 04, 2023 1:43:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/syamfarh/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/syamfarh/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/syamfarh/ip.git (master) completed! -Sep 04, 2023 1:43:26 PM reposense.report.ReportGenerator analyzeRepos -INFO: [44/480] Analyzing https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 04, 2023 1:43:26 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zsh-eng/ip.git completed! +Sep 05, 2023 1:12:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/starrylight99/ip.git... +Sep 05, 2023 1:12:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/starrylight99/ip.git to complete... +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mingyuanc/ip.git completed! +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AustinHuang1203/ip.git... +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/GlendaChong/ip.git completed! +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AustinHuang1203/ip.git to complete... +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/seewhyjay/ip.git... +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LamJiuFong/ip.git completed! +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/seewhyjay/ip.git to complete... +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ruth-lim/ip.git... +Sep 05, 2023 1:12:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AprupKale/ip.git (master)... +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ruth-lim/ip.git to complete... +Sep 05, 2023 1:12:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AprupKale/ip.git (master)... +Sep 05, 2023 1:12:07 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AprupKale/ip.git (master) completed! +Sep 05, 2023 1:12:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [43/480] Analyzing https://github.com/PetrichorPrecipice/ip.git (master)... +Sep 05, 2023 1:12:07 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/PetrichorPrecipice/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/woojiahao/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/woojiahao/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/woojiahao/ip.git (master) completed! -Sep 04, 2023 1:43:27 PM reposense.report.ReportGenerator analyzeRepos -INFO: [45/480] Analyzing https://github.com/D-Limiter/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/D-Limiter/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/D-Limiter/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [44/480] Analyzing https://github.com/syamfarh/ip.git (master)... +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/starrylight99/ip.git completed! +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/limzhenwy/ip.git... +Sep 05, 2023 1:12:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/syamfarh/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/syamfarh/ip.git (master)... +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/limzhenwy/ip.git to complete... +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/seewhyjay/ip.git completed! +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/xCOLOURx/ip.git... +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/xCOLOURx/ip.git to complete... +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ruth-lim/ip.git completed! +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AustinHuang1203/ip.git completed! +Sep 05, 2023 1:12:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zacwong2151/ip.git... +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Zjinnnn/ip.git... +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zacwong2151/ip.git to complete... +Sep 05, 2023 1:12:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Zjinnnn/ip.git to complete... +Sep 05, 2023 1:12:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/PetrichorPrecipice/ip.git (master) completed! -Sep 04, 2023 1:43:27 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [45/480] Analyzing https://github.com/D-Limiter/ip.git (master)... +Sep 05, 2023 1:12:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/D-Limiter/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/D-Limiter/ip.git (master)... +Sep 05, 2023 1:12:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/syamfarh/ip.git (master)... +Sep 05, 2023 1:12:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/syamfarh/ip.git (master)... +Sep 05, 2023 1:12:08 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/syamfarh/ip.git (master) completed! +Sep 05, 2023 1:12:08 AM reposense.report.ReportGenerator analyzeRepos INFO: [46/480] Analyzing https://github.com/coderhuang559/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nicolengk/ip.git completed! -Sep 04, 2023 1:43:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/newway1814/ip.git completed! -Sep 04, 2023 1:43:27 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zsh-eng/ip.git... -Sep 04, 2023 1:43:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/glenngnng/ip.git completed! -Sep 04, 2023 1:43:27 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/mingyuanc/ip.git... -Sep 04, 2023 1:43:27 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LamJiuFong/ip.git... -Sep 04, 2023 1:43:27 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:08 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/coderhuang559/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/coderhuang559/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zsh-eng/ip.git to complete... -Sep 04, 2023 1:43:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kanna-1/ip.git completed! -Sep 04, 2023 1:43:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/mingyuanc/ip.git to complete... -Sep 04, 2023 1:43:27 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/GlendaChong/ip.git... -Sep 04, 2023 1:43:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LamJiuFong/ip.git to complete... -Sep 04, 2023 1:43:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/GlendaChong/ip.git to complete... -Sep 04, 2023 1:43:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/D-Limiter/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/limzhenwy/ip.git completed! +Sep 05, 2023 1:12:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/D-Limiter/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/D-Limiter/ip.git (master) completed! -Sep 04, 2023 1:43:27 PM reposense.report.ReportGenerator analyzeRepos -INFO: [47/480] Analyzing https://github.com/pra-navi/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [47/480] Analyzing https://github.com/LINCHENYU2030S/ip.git (master)... +Sep 05, 2023 1:12:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/awhb/ip.git... +Sep 05, 2023 1:12:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/awhb/ip.git to complete... +Sep 05, 2023 1:12:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LINCHENYU2030S/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LINCHENYU2030S/ip.git (master)... +Sep 05, 2023 1:12:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/coderhuang559/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/pra-navi/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/pra-navi/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zacwong2151/ip.git completed! +Sep 05, 2023 1:12:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xCOLOURx/ip.git completed! +Sep 05, 2023 1:12:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Zjinnnn/ip.git completed! +Sep 05, 2023 1:12:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/teoks0199/ip.git... +Sep 05, 2023 1:12:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/qz1004/ip.git... +Sep 05, 2023 1:12:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/coderhuang559/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/qz1004/ip.git to complete... +Sep 05, 2023 1:12:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/coderhuang559/ip.git (master) completed! -Sep 04, 2023 1:43:27 PM reposense.report.ReportGenerator analyzeRepos -INFO: [48/480] Analyzing https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 04, 2023 1:43:27 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LINCHENYU2030S/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zsh-eng/ip.git completed! -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/GlendaChong/ip.git completed! -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LamJiuFong/ip.git completed! -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/starrylight99/ip.git... -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AustinHuang1203/ip.git... -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mingyuanc/ip.git completed! -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/starrylight99/ip.git to complete... -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/seewhyjay/ip.git... -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AustinHuang1203/ip.git to complete... -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/seewhyjay/ip.git to complete... -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ruth-lim/ip.git... -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ruth-lim/ip.git to complete... -Sep 04, 2023 1:43:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/pra-navi/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/pra-navi/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/pra-navi/ip.git (master) completed! -Sep 04, 2023 1:43:28 PM reposense.report.ReportGenerator analyzeRepos -INFO: [49/480] Analyzing https://github.com/phiphi-tan/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [48/480] Analyzing https://github.com/pra-navi/ip.git (master)... +Sep 05, 2023 1:12:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/pangyyen/ip.git... +Sep 05, 2023 1:12:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/teoks0199/ip.git to complete... +Sep 05, 2023 1:12:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/pangyyen/ip.git to complete... +Sep 05, 2023 1:12:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/pra-navi/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/pra-navi/ip.git (master)... +Sep 05, 2023 1:12:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/phiphi-tan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/phiphi-tan/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LINCHENYU2030S/ip.git (master) completed! -Sep 04, 2023 1:43:28 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [49/480] Analyzing https://github.com/phiphi-tan/ip.git (master)... +Sep 05, 2023 1:12:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/phiphi-tan/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/phiphi-tan/ip.git (master)... +Sep 05, 2023 1:12:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/awhb/ip.git completed! +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Mahidharah/ip.git... +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Mahidharah/ip.git to complete... +Sep 05, 2023 1:12:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/pra-navi/ip.git (master)... +Sep 05, 2023 1:12:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/pra-navi/ip.git (master)... +Sep 05, 2023 1:12:09 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/pra-navi/ip.git (master) completed! +Sep 05, 2023 1:12:09 AM reposense.report.ReportGenerator analyzeRepos INFO: [50/480] Analyzing https://github.com/ktzy0305/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:09 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ktzy0305/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ktzy0305/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/qz1004/ip.git completed! +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/teoks0199/ip.git completed! +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jason-raiin/ip.git... +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jason-raiin/ip.git to complete... +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ravern/ip.git... +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/pangyyen/ip.git completed! +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ravern/ip.git to complete... +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/bobscodedump/ip.git... +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/bobscodedump/ip.git to complete... +Sep 05, 2023 1:12:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/phiphi-tan/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/phiphi-tan/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/phiphi-tan/ip.git (master) completed! -Sep 04, 2023 1:43:28 PM reposense.report.ReportGenerator analyzeRepos -INFO: [51/480] Analyzing https://github.com/Chen1x/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Chen1x/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Chen1x/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/starrylight99/ip.git completed! -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/limzhenwy/ip.git... -Sep 04, 2023 1:43:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Chen1x/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/seewhyjay/ip.git completed! -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/limzhenwy/ip.git to complete... -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AustinHuang1203/ip.git completed! -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/xCOLOURx/ip.git... -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zacwong2151/ip.git... -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/xCOLOURx/ip.git to complete... -Sep 04, 2023 1:43:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Chen1x/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Chen1x/ip.git (master) completed! -Sep 04, 2023 1:43:28 PM reposense.report.ReportGenerator analyzeRepos -INFO: [52/480] Analyzing https://github.com/LordSaumya/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zacwong2151/ip.git to complete... -Sep 04, 2023 1:43:28 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [51/480] Analyzing https://github.com/LordSaumya/ip.git (master)... +Sep 05, 2023 1:12:09 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/LordSaumya/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/LordSaumya/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Mahidharah/ip.git completed! +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nixonwidjaja/ip.git... +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nixonwidjaja/ip.git to complete... +Sep 05, 2023 1:12:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ktzy0305/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ktzy0305/ip.git (master)... -Sep 04, 2023 1:43:28 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jason-raiin/ip.git completed! +Sep 05, 2023 1:12:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ktzy0305/ip.git (master) completed! -Sep 04, 2023 1:43:28 PM reposense.report.ReportGenerator analyzeRepos -INFO: [53/480] Analyzing https://github.com/yanghengtang/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yanghengtang/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yanghengtang/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LordSaumya/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yanghengtang/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [52/480] Analyzing https://github.com/Chen1x/ip.git (master)... +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ravern/ip.git completed! +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/techjay-c/ip.git... +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ryanozx/ip.git... +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/techjay-c/ip.git to complete... +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ryanozx/ip.git to complete... +Sep 05, 2023 1:12:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LordSaumya/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/bobscodedump/ip.git completed! +Sep 05, 2023 1:12:09 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Chen1x/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Chen1x/ip.git (master)... +Sep 05, 2023 1:12:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LordSaumya/ip.git (master) completed! -Sep 04, 2023 1:43:29 PM reposense.report.ReportGenerator analyzeRepos -INFO: [54/480] Analyzing https://github.com/p-xp/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yanghengtang/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yanghengtang/ip.git (master) completed! -Sep 04, 2023 1:43:29 PM reposense.report.ReportGenerator analyzeRepos -INFO: [55/480] Analyzing https://github.com/johnnythesnake12/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/p-xp/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/p-xp/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LuahJunYang/ip.git... +Sep 05, 2023 1:12:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [53/480] Analyzing https://github.com/yanghengtang/ip.git (master)... +Sep 05, 2023 1:12:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LuahJunYang/ip.git to complete... +Sep 05, 2023 1:12:09 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yanghengtang/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yanghengtang/ip.git (master)... +Sep 05, 2023 1:12:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Chen1x/ip.git (master)... +Sep 05, 2023 1:12:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Chen1x/ip.git (master)... +Sep 05, 2023 1:12:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Chen1x/ip.git (master) completed! +Sep 05, 2023 1:12:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [54/480] Analyzing https://github.com/johnnythesnake12/ip.git (master)... +Sep 05, 2023 1:12:10 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/johnnythesnake12/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/johnnythesnake12/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xCOLOURx/ip.git completed! -Sep 04, 2023 1:43:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zacwong2151/ip.git completed! -Sep 04, 2023 1:43:29 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Zjinnnn/ip.git... -Sep 04, 2023 1:43:29 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/awhb/ip.git... -Sep 04, 2023 1:43:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/awhb/ip.git to complete... -Sep 04, 2023 1:43:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Zjinnnn/ip.git to complete... -Sep 04, 2023 1:43:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/limzhenwy/ip.git completed! -Sep 04, 2023 1:43:29 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/teoks0199/ip.git... -Sep 04, 2023 1:43:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/teoks0199/ip.git to complete... -Sep 04, 2023 1:43:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nixonwidjaja/ip.git completed! +Sep 05, 2023 1:12:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/HEEaZ/ip.git... +Sep 05, 2023 1:12:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/HEEaZ/ip.git to complete... +Sep 05, 2023 1:12:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/johnnythesnake12/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/johnnythesnake12/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:10 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/johnnythesnake12/ip.git (master) completed! -Sep 04, 2023 1:43:29 PM reposense.report.ReportGenerator analyzeRepos -INFO: [56/480] Analyzing https://github.com/oeggy03/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [55/480] Analyzing https://github.com/oeggy03/ip.git (master)... +Sep 05, 2023 1:12:10 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/oeggy03/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/oeggy03/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/p-xp/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ruth-lim/ip.git completed! -Sep 04, 2023 1:43:29 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/p-xp/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/p-xp/ip.git (master) completed! -Sep 04, 2023 1:43:29 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/qz1004/ip.git... -Sep 04, 2023 1:43:29 PM reposense.report.ReportGenerator analyzeRepos -INFO: [57/480] Analyzing https://github.com/matochichap/ip.git (master)... -Sep 04, 2023 1:43:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/qz1004/ip.git to complete... -Sep 04, 2023 1:43:29 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/matochichap/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/matochichap/ip.git (master)... -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/awhb/ip.git completed! -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/pangyyen/ip.git... -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/pangyyen/ip.git to complete... -Sep 04, 2023 1:43:30 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yanghengtang/ip.git (master)... +Sep 05, 2023 1:12:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yanghengtang/ip.git (master)... +Sep 05, 2023 1:12:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yanghengtang/ip.git (master) completed! +Sep 05, 2023 1:12:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [56/480] Analyzing https://github.com/p-xp/ip.git (master)... +Sep 05, 2023 1:12:10 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/p-xp/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/p-xp/ip.git (master)... +Sep 05, 2023 1:12:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ryanozx/ip.git completed! +Sep 05, 2023 1:12:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/techjay-c/ip.git completed! +Sep 05, 2023 1:12:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dom-buri/ip.git... +Sep 05, 2023 1:12:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AlainS87/ip.git... +Sep 05, 2023 1:12:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AlainS87/ip.git to complete... +Sep 05, 2023 1:12:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dom-buri/ip.git to complete... +Sep 05, 2023 1:12:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LuahJunYang/ip.git completed! +Sep 05, 2023 1:12:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tiongjjyi/ip.git... +Sep 05, 2023 1:12:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tiongjjyi/ip.git to complete... +Sep 05, 2023 1:12:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/HEEaZ/ip.git completed! +Sep 05, 2023 1:12:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Vanessamae23/ip.git... +Sep 05, 2023 1:12:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Vanessamae23/ip.git to complete... +Sep 05, 2023 1:12:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/oeggy03/ip.git (master)... -Sep 04, 2023 1:43:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/oeggy03/ip.git (master)... -Sep 04, 2023 1:43:30 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:11 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/oeggy03/ip.git (master) completed! -Sep 04, 2023 1:43:30 PM reposense.report.ReportGenerator analyzeRepos -INFO: [58/480] Analyzing https://github.com/TiwKangXu/ip.git (master)... -Sep 04, 2023 1:43:30 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [57/480] Analyzing https://github.com/matochichap/ip.git (master)... +Sep 05, 2023 1:12:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/p-xp/ip.git (master)... +Sep 05, 2023 1:12:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/matochichap/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/matochichap/ip.git (master)... +Sep 05, 2023 1:12:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/p-xp/ip.git (master)... +Sep 05, 2023 1:12:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/p-xp/ip.git (master) completed! +Sep 05, 2023 1:12:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [58/480] Analyzing https://github.com/applepiofmyeye/ip.git (master)... +Sep 05, 2023 1:12:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/applepiofmyeye/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/applepiofmyeye/ip.git (master)... +Sep 05, 2023 1:12:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dom-buri/ip.git completed! +Sep 05, 2023 1:12:11 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/fuyiqiao/ip.git... +Sep 05, 2023 1:12:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tiongjjyi/ip.git completed! +Sep 05, 2023 1:12:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/fuyiqiao/ip.git to complete... +Sep 05, 2023 1:12:11 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/spatuly/ip.git... +Sep 05, 2023 1:12:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/spatuly/ip.git to complete... +Sep 05, 2023 1:12:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Vanessamae23/ip.git completed! +Sep 05, 2023 1:12:11 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tanshiyu1999/ip.git... +Sep 05, 2023 1:12:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tanshiyu1999/ip.git to complete... +Sep 05, 2023 1:12:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/applepiofmyeye/ip.git (master)... +Sep 05, 2023 1:12:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/applepiofmyeye/ip.git (master)... +Sep 05, 2023 1:12:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/applepiofmyeye/ip.git (master) completed! +Sep 05, 2023 1:12:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [59/480] Analyzing https://github.com/TiwKangXu/ip.git (master)... +Sep 05, 2023 1:12:11 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/TiwKangXu/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/TiwKangXu/ip.git (master)... -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Zjinnnn/ip.git completed! -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/teoks0199/ip.git completed! -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Mahidharah/ip.git... -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jason-raiin/ip.git... -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Mahidharah/ip.git to complete... -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jason-raiin/ip.git to complete... -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/qz1004/ip.git completed! -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ravern/ip.git... -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ravern/ip.git to complete... -Sep 04, 2023 1:43:30 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/matochichap/ip.git (master)... -Sep 04, 2023 1:43:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/fuyiqiao/ip.git completed! +Sep 05, 2023 1:12:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Kb-Tay/ip.git... +Sep 05, 2023 1:12:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/matochichap/ip.git (master)... -Sep 04, 2023 1:43:30 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/matochichap/ip.git (master) completed! -Sep 04, 2023 1:43:30 PM reposense.report.ReportGenerator analyzeRepos -INFO: [59/480] Analyzing https://github.com/applepiofmyeye/ip.git (master)... -Sep 04, 2023 1:43:30 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/applepiofmyeye/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/applepiofmyeye/ip.git (master)... -Sep 04, 2023 1:43:30 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Kb-Tay/ip.git to complete... +Sep 05, 2023 1:12:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [60/480] Analyzing https://github.com/ScarletBlanks/ip.git (master)... +Sep 05, 2023 1:12:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/spatuly/ip.git completed! +Sep 05, 2023 1:12:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/beatricecst/ip.git... +Sep 05, 2023 1:12:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/beatricecst/ip.git to complete... +Sep 05, 2023 1:12:12 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ScarletBlanks/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ScarletBlanks/ip.git (master)... +Sep 05, 2023 1:12:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tanshiyu1999/ip.git completed! +Sep 05, 2023 1:12:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tanveersingh10/ip.git... +Sep 05, 2023 1:12:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tanveersingh10/ip.git to complete... +Sep 05, 2023 1:12:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/TiwKangXu/ip.git (master)... -Sep 04, 2023 1:43:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ScarletBlanks/ip.git (master)... +Sep 05, 2023 1:12:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/TiwKangXu/ip.git (master)... -Sep 04, 2023 1:43:30 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/TiwKangXu/ip.git (master) completed! -Sep 04, 2023 1:43:30 PM reposense.report.ReportGenerator analyzeRepos -INFO: [60/480] Analyzing https://github.com/chiayunrong/ip.git (master)... -Sep 04, 2023 1:43:30 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [61/480] Analyzing https://github.com/chiayunrong/ip.git (master)... +Sep 05, 2023 1:12:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ScarletBlanks/ip.git (master)... +Sep 05, 2023 1:12:12 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ScarletBlanks/ip.git (master) completed! +Sep 05, 2023 1:12:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [62/480] Analyzing https://github.com/devanshubisht/ip.git (master)... +Sep 05, 2023 1:12:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/beatricecst/ip.git completed! +Sep 05, 2023 1:12:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Kb-Tay/ip.git completed! +Sep 05, 2023 1:12:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/thienmy0/ip.git... +Sep 05, 2023 1:12:12 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/chiayunrong/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/chiayunrong/ip.git (master)... -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Mahidharah/ip.git completed! -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jason-raiin/ip.git completed! -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/bobscodedump/ip.git... -Sep 04, 2023 1:43:30 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nixonwidjaja/ip.git... -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nixonwidjaja/ip.git to complete... -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/bobscodedump/ip.git to complete... -Sep 04, 2023 1:43:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/applepiofmyeye/ip.git (master)... -Sep 04, 2023 1:43:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/applepiofmyeye/ip.git (master)... -Sep 04, 2023 1:43:31 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/applepiofmyeye/ip.git (master) completed! -Sep 04, 2023 1:43:31 PM reposense.report.ReportGenerator analyzeRepos -INFO: [61/480] Analyzing https://github.com/ScarletBlanks/ip.git (master)... -Sep 04, 2023 1:43:31 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ScarletBlanks/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ScarletBlanks/ip.git (master)... -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ravern/ip.git completed! -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/techjay-c/ip.git... -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/techjay-c/ip.git to complete... -Sep 04, 2023 1:43:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/chiayunrong/ip.git (master)... -Sep 04, 2023 1:43:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ScarletBlanks/ip.git (master)... -Sep 04, 2023 1:43:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/chiayunrong/ip.git (master)... -Sep 04, 2023 1:43:31 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/chiayunrong/ip.git (master) completed! -Sep 04, 2023 1:43:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ScarletBlanks/ip.git (master)... -Sep 04, 2023 1:43:31 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ScarletBlanks/ip.git (master) completed! -Sep 04, 2023 1:43:31 PM reposense.report.ReportGenerator analyzeRepos -INFO: [62/480] Analyzing https://github.com/jx124/ip.git (master)... -Sep 04, 2023 1:43:31 PM reposense.report.ReportGenerator analyzeRepos -INFO: [63/480] Analyzing https://github.com/devanshubisht/ip.git (master)... -Sep 04, 2023 1:43:31 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jx124/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jx124/ip.git (master)... -Sep 04, 2023 1:43:31 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/s0ngyang/ip.git... +Sep 05, 2023 1:12:12 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/devanshubisht/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/devanshubisht/ip.git (master)... -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nixonwidjaja/ip.git completed! -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ryanozx/ip.git... -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/bobscodedump/ip.git completed! -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ryanozx/ip.git to complete... -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LuahJunYang/ip.git... -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LuahJunYang/ip.git to complete... -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/techjay-c/ip.git completed! -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/HEEaZ/ip.git... -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/pangyyen/ip.git completed! -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dom-buri/ip.git... -Sep 04, 2023 1:43:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/HEEaZ/ip.git to complete... -Sep 04, 2023 1:43:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dom-buri/ip.git to complete... -Sep 04, 2023 1:43:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/thienmy0/ip.git to complete... +Sep 05, 2023 1:12:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/s0ngyang/ip.git to complete... +Sep 05, 2023 1:12:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tanveersingh10/ip.git completed! +Sep 05, 2023 1:12:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ldinghan/ip.git... +Sep 05, 2023 1:12:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ldinghan/ip.git to complete... +Sep 05, 2023 1:12:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/devanshubisht/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/devanshubisht/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:13 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/devanshubisht/ip.git (master) completed! -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator analyzeRepos -INFO: [64/480] Analyzing https://github.com/AryanG01/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [63/480] Analyzing https://github.com/jx124/ip.git (master)... +Sep 05, 2023 1:12:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/chiayunrong/ip.git (master)... +Sep 05, 2023 1:12:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AlainS87/ip.git completed! +Sep 05, 2023 1:12:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/s0ngyang/ip.git completed! +Sep 05, 2023 1:12:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/chiayunrong/ip.git (master)... +Sep 05, 2023 1:12:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/feifeiraindrops/ip.git... +Sep 05, 2023 1:12:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jx124/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jx124/ip.git (master)... +Sep 05, 2023 1:12:13 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/chiayunrong/ip.git (master) completed! +Sep 05, 2023 1:12:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ryanongwx/ip.git... +Sep 05, 2023 1:12:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/thienmy0/ip.git completed! +Sep 05, 2023 1:12:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [64/480] Analyzing https://github.com/Clin-lyx/ip.git (master)... +Sep 05, 2023 1:12:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/feifeiraindrops/ip.git to complete... +Sep 05, 2023 1:12:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ryanongwx/ip.git to complete... +Sep 05, 2023 1:12:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kwangthiag/ip.git... +Sep 05, 2023 1:12:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kwangthiag/ip.git to complete... +Sep 05, 2023 1:12:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Clin-lyx/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Clin-lyx/ip.git (master)... +Sep 05, 2023 1:12:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ldinghan/ip.git completed! +Sep 05, 2023 1:12:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/elhy1999/ip.git... +Sep 05, 2023 1:12:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/elhy1999/ip.git to complete... +Sep 05, 2023 1:12:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Clin-lyx/ip.git (master)... +Sep 05, 2023 1:12:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Clin-lyx/ip.git (master)... +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Clin-lyx/ip.git (master) completed! +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [65/480] Analyzing https://github.com/AryanG01/ip.git (master)... +Sep 05, 2023 1:12:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jx124/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AryanG01/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AryanG01/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jx124/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jx124/ip.git (master) completed! -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator analyzeRepos -INFO: [65/480] Analyzing https://github.com/Clin-lyx/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Clin-lyx/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Clin-lyx/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AryanG01/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AryanG01/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AryanG01/ip.git (master) completed! -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator analyzeRepos INFO: [66/480] Analyzing https://github.com/sheryew/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sheryew/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sheryew/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Clin-lyx/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ryanozx/ip.git completed! -Sep 04, 2023 1:43:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Clin-lyx/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Clin-lyx/ip.git (master) completed! -Sep 04, 2023 1:43:32 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AlainS87/ip.git... -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/feifeiraindrops/ip.git completed! +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/songgthu/ip.git... +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/songgthu/ip.git to complete... +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kwangthiag/ip.git completed! +Sep 05, 2023 1:12:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AryanG01/ip.git (master)... +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/GohTengFong/ip.git... +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/GohTengFong/ip.git to complete... +Sep 05, 2023 1:12:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AryanG01/ip.git (master)... +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AryanG01/ip.git (master) completed! +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator analyzeRepos INFO: [67/480] Analyzing https://github.com/kayabuttertoastt/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AlainS87/ip.git to complete... -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ryanongwx/ip.git completed! +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/simbayippy/ip.git... +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/elhy1999/ip.git completed! +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kayabuttertoastt/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kayabuttertoastt/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dom-buri/ip.git completed! -Sep 04, 2023 1:43:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/HEEaZ/ip.git completed! -Sep 04, 2023 1:43:32 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tiongjjyi/ip.git... -Sep 04, 2023 1:43:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tiongjjyi/ip.git to complete... -Sep 04, 2023 1:43:32 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Vanessamae23/ip.git... -Sep 04, 2023 1:43:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Vanessamae23/ip.git to complete... -Sep 04, 2023 1:43:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/simbayippy/ip.git to complete... +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Khaleelur-Rahman/ip.git... +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Khaleelur-Rahman/ip.git to complete... +Sep 05, 2023 1:12:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sheryew/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sheryew/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sheryew/ip.git (master) completed! -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator analyzeRepos INFO: [68/480] Analyzing https://github.com/jonasongg/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jonasongg/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jonasongg/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/kayabuttertoastt/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kayabuttertoastt/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kayabuttertoastt/ip.git (master) completed! -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator analyzeRepos INFO: [69/480] Analyzing https://github.com/yiwen101/ip.git (master)... -Sep 04, 2023 1:43:32 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/yiwen101/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/yiwen101/ip.git (master)... -Sep 04, 2023 1:43:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jonasongg/ip.git (master)... -Sep 04, 2023 1:43:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/songgthu/ip.git completed! +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/proto-aiken-13/ip.git... +Sep 05, 2023 1:12:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jonasongg/ip.git (master)... -Sep 04, 2023 1:43:33 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jonasongg/ip.git (master) completed! -Sep 04, 2023 1:43:33 PM reposense.report.ReportGenerator analyzeRepos -INFO: [70/480] Analyzing https://github.com/supermii2/ip.git (master)... -Sep 04, 2023 1:43:33 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/supermii2/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/supermii2/ip.git (master)... -Sep 04, 2023 1:43:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tiongjjyi/ip.git completed! -Sep 04, 2023 1:43:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/fuyiqiao/ip.git... -Sep 04, 2023 1:43:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Vanessamae23/ip.git completed! -Sep 04, 2023 1:43:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/fuyiqiao/ip.git to complete... -Sep 04, 2023 1:43:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/spatuly/ip.git... -Sep 04, 2023 1:43:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/spatuly/ip.git to complete... -Sep 04, 2023 1:43:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LuahJunYang/ip.git completed! -Sep 04, 2023 1:43:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tanshiyu1999/ip.git... -Sep 04, 2023 1:43:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tanshiyu1999/ip.git to complete... -Sep 04, 2023 1:43:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/proto-aiken-13/ip.git to complete... +Sep 05, 2023 1:12:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [70/480] Analyzing https://github.com/chuababyy/ip.git (master)... +Sep 05, 2023 1:12:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/GohTengFong/ip.git completed! +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/bwangpj/ip.git... +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/simbayippy/ip.git completed! +Sep 05, 2023 1:12:15 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/chuababyy/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/chuababyy/ip.git (master)... +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/weeweh/ip.git... +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/bwangpj/ip.git to complete... +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/weeweh/ip.git to complete... +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Khaleelur-Rahman/ip.git completed! +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/s-peiran/ip.git... +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/s-peiran/ip.git to complete... +Sep 05, 2023 1:12:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yiwen101/ip.git (master)... -Sep 04, 2023 1:43:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yiwen101/ip.git (master)... -Sep 04, 2023 1:43:33 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:15 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yiwen101/ip.git (master) completed! -Sep 04, 2023 1:43:33 PM reposense.report.ReportGenerator analyzeRepos -INFO: [71/480] Analyzing https://github.com/chuababyy/ip.git (master)... -Sep 04, 2023 1:43:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/supermii2/ip.git (master)... -Sep 04, 2023 1:43:33 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/chuababyy/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/chuababyy/ip.git (master)... -Sep 04, 2023 1:43:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/supermii2/ip.git (master)... -Sep 04, 2023 1:43:33 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/supermii2/ip.git (master) completed! -Sep 04, 2023 1:43:33 PM reposense.report.ReportGenerator analyzeRepos -INFO: [72/480] Analyzing https://github.com/tiongMax/ip.git (master)... -Sep 04, 2023 1:43:33 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tiongMax/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tiongMax/ip.git (master)... -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/fuyiqiao/ip.git completed! -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/spatuly/ip.git completed! -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Kb-Tay/ip.git... -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Kb-Tay/ip.git to complete... -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/beatricecst/ip.git... -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/beatricecst/ip.git to complete... -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tanshiyu1999/ip.git completed! -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tanveersingh10/ip.git... -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tanveersingh10/ip.git to complete... -Sep 04, 2023 1:43:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:15 AM reposense.report.ReportGenerator analyzeRepos +INFO: [71/480] Analyzing https://github.com/tiongMax/ip.git (master)... +Sep 05, 2023 1:12:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/chuababyy/ip.git (master)... -Sep 04, 2023 1:43:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/chuababyy/ip.git (master)... -Sep 04, 2023 1:43:34 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:15 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/chuababyy/ip.git (master) completed! -Sep 04, 2023 1:43:34 PM reposense.report.ReportGenerator analyzeRepos -INFO: [73/480] Analyzing https://github.com/remuslum/ip.git (master)... -Sep 04, 2023 1:43:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:15 AM reposense.report.ReportGenerator analyzeRepos +INFO: [72/480] Analyzing https://github.com/supermii2/ip.git (master)... +Sep 05, 2023 1:12:15 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tiongMax/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tiongMax/ip.git (master)... +Sep 05, 2023 1:12:15 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/supermii2/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/supermii2/ip.git (master)... +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/proto-aiken-13/ip.git completed! +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jylow/ip.git... +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jylow/ip.git to complete... +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/bwangpj/ip.git completed! +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/s-peiran/ip.git completed! +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/weeweh/ip.git completed! +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lawruixi/ip.git... +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/JeremyYong128/ip.git... +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lawruixi/ip.git to complete... +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/brandon-nam/ip.git... +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/brandon-nam/ip.git to complete... +Sep 05, 2023 1:12:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/JeremyYong128/ip.git to complete... +Sep 05, 2023 1:12:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tiongMax/ip.git (master)... -Sep 04, 2023 1:43:34 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/remuslum/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/remuslum/ip.git (master)... -Sep 04, 2023 1:43:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tiongMax/ip.git (master)... -Sep 04, 2023 1:43:34 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:15 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tiongMax/ip.git (master) completed! -Sep 04, 2023 1:43:34 PM reposense.report.ReportGenerator analyzeRepos -INFO: [74/480] Analyzing https://github.com/newway1814/ip.git (master)... -Sep 04, 2023 1:43:34 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/newway1814/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/newway1814/ip.git (master)... -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Kb-Tay/ip.git completed! -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/thienmy0/ip.git... -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/thienmy0/ip.git to complete... -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/beatricecst/ip.git completed! -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/s0ngyang/ip.git... -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/s0ngyang/ip.git to complete... -Sep 04, 2023 1:43:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tanveersingh10/ip.git completed! -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ldinghan/ip.git... -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ldinghan/ip.git to complete... -Sep 04, 2023 1:43:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/newway1814/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/newway1814/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/newway1814/ip.git (master) completed! -Sep 04, 2023 1:43:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:15 AM reposense.report.ReportGenerator analyzeRepos +INFO: [73/480] Analyzing https://github.com/remuslum/ip.git (master)... +Sep 05, 2023 1:12:15 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/remuslum/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/remuslum/ip.git (master)... +Sep 05, 2023 1:12:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/supermii2/ip.git (master)... +Sep 05, 2023 1:12:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/supermii2/ip.git (master)... +Sep 05, 2023 1:12:15 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/supermii2/ip.git (master) completed! +Sep 05, 2023 1:12:16 AM reposense.report.ReportGenerator analyzeRepos +INFO: [74/480] Analyzing https://github.com/kanna-1/ip.git (master)... +Sep 05, 2023 1:12:16 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kanna-1/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kanna-1/ip.git (master)... +Sep 05, 2023 1:12:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jylow/ip.git completed! +Sep 05, 2023 1:12:16 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LHeng1/ip.git... +Sep 05, 2023 1:12:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LHeng1/ip.git to complete... +Sep 05, 2023 1:12:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/remuslum/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/remuslum/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:16 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/remuslum/ip.git (master) completed! -Sep 04, 2023 1:43:35 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:16 AM reposense.report.ReportGenerator analyzeRepos INFO: [75/480] Analyzing https://github.com/nicolengk/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.report.ReportGenerator analyzeRepos -INFO: [76/480] Analyzing https://github.com/glenngnng/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AlainS87/ip.git completed! -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/feifeiraindrops/ip.git... -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/feifeiraindrops/ip.git to complete... -Sep 04, 2023 1:43:35 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/glenngnng/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/glenngnng/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/brandon-nam/ip.git completed! +Sep 05, 2023 1:12:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lawruixi/ip.git completed! +Sep 05, 2023 1:12:16 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Leb14/ip.git... +Sep 05, 2023 1:12:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Leb14/ip.git to complete... +Sep 05, 2023 1:12:16 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/B-enguin/ip.git... +Sep 05, 2023 1:12:16 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nicolengk/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nicolengk/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/thienmy0/ip.git completed! -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ryanongwx/ip.git... -Sep 04, 2023 1:43:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/glenngnng/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ryanongwx/ip.git to complete... -Sep 04, 2023 1:43:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JeremyYong128/ip.git completed! +Sep 05, 2023 1:12:16 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/s-kybound/ip.git... +Sep 05, 2023 1:12:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/B-enguin/ip.git to complete... +Sep 05, 2023 1:12:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/s-kybound/ip.git to complete... +Sep 05, 2023 1:12:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kanna-1/ip.git (master)... +Sep 05, 2023 1:12:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kanna-1/ip.git (master)... +Sep 05, 2023 1:12:16 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kanna-1/ip.git (master) completed! +Sep 05, 2023 1:12:16 AM reposense.report.ReportGenerator analyzeRepos +INFO: [76/480] Analyzing https://github.com/newway1814/ip.git (master)... +Sep 05, 2023 1:12:16 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/newway1814/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/newway1814/ip.git (master)... +Sep 05, 2023 1:12:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nicolengk/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/glenngnng/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/glenngnng/ip.git (master) completed! -Sep 04, 2023 1:43:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nicolengk/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.report.ReportGenerator analyzeRepos -INFO: [77/480] Analyzing https://github.com/kanna-1/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:16 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nicolengk/ip.git (master) completed! -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/s0ngyang/ip.git completed! -Sep 04, 2023 1:43:35 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:16 AM reposense.report.ReportGenerator analyzeRepos +INFO: [77/480] Analyzing https://github.com/glenngnng/ip.git (master)... +Sep 05, 2023 1:12:16 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/glenngnng/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/glenngnng/ip.git (master)... +Sep 05, 2023 1:12:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LHeng1/ip.git completed! +Sep 05, 2023 1:12:16 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wesho1107/ip.git... +Sep 05, 2023 1:12:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wesho1107/ip.git to complete... +Sep 05, 2023 1:12:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/newway1814/ip.git (master)... +Sep 05, 2023 1:12:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/newway1814/ip.git (master)... +Sep 05, 2023 1:12:16 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/newway1814/ip.git (master) completed! +Sep 05, 2023 1:12:16 AM reposense.report.ReportGenerator analyzeRepos INFO: [78/480] Analyzing https://github.com/zsh-eng/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kwangthiag/ip.git... -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kwangthiag/ip.git to complete... -Sep 04, 2023 1:43:35 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kanna-1/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kanna-1/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/glenngnng/ip.git (master)... +Sep 05, 2023 1:12:17 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/zsh-eng/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/zsh-eng/ip.git (master)... -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ldinghan/ip.git completed! -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/elhy1999/ip.git... -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/feifeiraindrops/ip.git completed! -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/elhy1999/ip.git to complete... -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/songgthu/ip.git... -Sep 04, 2023 1:43:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/songgthu/ip.git to complete... -Sep 04, 2023 1:43:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kanna-1/ip.git (master)... -Sep 04, 2023 1:43:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kanna-1/ip.git (master)... -Sep 04, 2023 1:43:36 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kanna-1/ip.git (master) completed! -Sep 04, 2023 1:43:36 PM reposense.report.ReportGenerator analyzeRepos -INFO: [79/480] Analyzing https://github.com/GlendaChong/ip.git (master)... -Sep 04, 2023 1:43:36 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/GlendaChong/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/GlendaChong/ip.git (master)... -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kwangthiag/ip.git completed! -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ryanongwx/ip.git completed! -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/GohTengFong/ip.git... -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/simbayippy/ip.git... -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/GohTengFong/ip.git to complete... -Sep 04, 2023 1:43:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/glenngnng/ip.git (master)... +Sep 05, 2023 1:12:17 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/glenngnng/ip.git (master) completed! +Sep 05, 2023 1:12:17 AM reposense.report.ReportGenerator analyzeRepos +INFO: [79/480] Analyzing https://github.com/mingyuanc/ip.git (master)... +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/s-kybound/ip.git completed! +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Leb14/ip.git completed! +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/B-enguin/ip.git completed! +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yihfei/ip.git... +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AaronJT1/ip.git... +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yihfei/ip.git to complete... +Sep 05, 2023 1:12:17 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/mingyuanc/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/mingyuanc/ip.git (master)... +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AaronJT1/ip.git to complete... +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dlathyun/ip.git... +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dlathyun/ip.git to complete... +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wesho1107/ip.git completed! +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ricketytoc/ip.git... +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ricketytoc/ip.git to complete... +Sep 05, 2023 1:12:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/zsh-eng/ip.git (master)... -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/simbayippy/ip.git to complete... -Sep 04, 2023 1:43:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/zsh-eng/ip.git (master)... -Sep 04, 2023 1:43:36 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:17 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/zsh-eng/ip.git (master) completed! -Sep 04, 2023 1:43:36 PM reposense.report.ReportGenerator analyzeRepos -INFO: [80/480] Analyzing https://github.com/mingyuanc/ip.git (master)... -Sep 04, 2023 1:43:36 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/mingyuanc/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/mingyuanc/ip.git (master)... -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/elhy1999/ip.git completed! -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Khaleelur-Rahman/ip.git... -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Khaleelur-Rahman/ip.git to complete... -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/songgthu/ip.git completed! -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/proto-aiken-13/ip.git... -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/proto-aiken-13/ip.git to complete... -Sep 04, 2023 1:43:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/GlendaChong/ip.git (master)... -Sep 04, 2023 1:43:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/GlendaChong/ip.git (master)... -Sep 04, 2023 1:43:36 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/GlendaChong/ip.git (master) completed! -Sep 04, 2023 1:43:36 PM reposense.report.ReportGenerator analyzeRepos -INFO: [81/480] Analyzing https://github.com/LamJiuFong/ip.git (master)... -Sep 04, 2023 1:43:36 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LamJiuFong/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LamJiuFong/ip.git (master)... -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/GohTengFong/ip.git completed! -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/bwangpj/ip.git... -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/simbayippy/ip.git completed! -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/bwangpj/ip.git to complete... -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/weeweh/ip.git... -Sep 04, 2023 1:43:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/weeweh/ip.git to complete... -Sep 04, 2023 1:43:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:17 AM reposense.report.ReportGenerator analyzeRepos +INFO: [80/480] Analyzing https://github.com/GlendaChong/ip.git (master)... +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AaronJT1/ip.git completed! +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yihfei/ip.git completed! +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Angelyxx/ip.git... +Sep 05, 2023 1:12:17 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/GlendaChong/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/GlendaChong/ip.git (master)... +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jingting1412/ip.git... +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Angelyxx/ip.git to complete... +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jingting1412/ip.git to complete... +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dlathyun/ip.git completed! +Sep 05, 2023 1:12:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/mingyuanc/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/SinhaVedant/ip.git... +Sep 05, 2023 1:12:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/SinhaVedant/ip.git to complete... +Sep 05, 2023 1:12:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/mingyuanc/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:17 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/mingyuanc/ip.git (master) completed! -Sep 04, 2023 1:43:37 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:17 AM reposense.report.ReportGenerator analyzeRepos +INFO: [81/480] Analyzing https://github.com/LamJiuFong/ip.git (master)... +Sep 05, 2023 1:12:18 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LamJiuFong/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LamJiuFong/ip.git (master)... +Sep 05, 2023 1:12:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ricketytoc/ip.git completed! +Sep 05, 2023 1:12:18 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/freddychenyouren2/ip.git... +Sep 05, 2023 1:12:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/freddychenyouren2/ip.git to complete... +Sep 05, 2023 1:12:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/GlendaChong/ip.git (master)... +Sep 05, 2023 1:12:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/GlendaChong/ip.git (master)... +Sep 05, 2023 1:12:18 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/GlendaChong/ip.git (master) completed! +Sep 05, 2023 1:12:18 AM reposense.report.ReportGenerator analyzeRepos INFO: [82/480] Analyzing https://github.com/starrylight99/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:18 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/starrylight99/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/starrylight99/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/proto-aiken-13/ip.git completed! -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Khaleelur-Rahman/ip.git completed! -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/s-peiran/ip.git... -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/s-peiran/ip.git to complete... -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jylow/ip.git... -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jylow/ip.git to complete... -Sep 04, 2023 1:43:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/starrylight99/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/starrylight99/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LamJiuFong/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/starrylight99/ip.git (master) completed! -Sep 04, 2023 1:43:37 PM reposense.report.ReportGenerator analyzeRepos -INFO: [83/480] Analyzing https://github.com/AustinHuang1203/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LamJiuFong/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:18 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LamJiuFong/ip.git (master) completed! -Sep 04, 2023 1:43:37 PM reposense.report.ReportGenerator analyzeRepos -INFO: [84/480] Analyzing https://github.com/seewhyjay/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AustinHuang1203/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AustinHuang1203/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [83/480] Analyzing https://github.com/seewhyjay/ip.git (master)... +Sep 05, 2023 1:12:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Angelyxx/ip.git completed! +Sep 05, 2023 1:12:18 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jordankanghm/ip.git... +Sep 05, 2023 1:12:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jingting1412/ip.git completed! +Sep 05, 2023 1:12:18 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/seewhyjay/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/seewhyjay/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/bwangpj/ip.git completed! -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lawruixi/ip.git... -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lawruixi/ip.git to complete... -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/weeweh/ip.git completed! -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/JeremyYong128/ip.git... -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/JeremyYong128/ip.git to complete... -Sep 04, 2023 1:43:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AustinHuang1203/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/s-peiran/ip.git completed! -Sep 04, 2023 1:43:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jordankanghm/ip.git to complete... +Sep 05, 2023 1:12:18 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/adhigop13/ip.git... +Sep 05, 2023 1:12:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/adhigop13/ip.git to complete... +Sep 05, 2023 1:12:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/SinhaVedant/ip.git completed! +Sep 05, 2023 1:12:18 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/waseemingly/ip.git... +Sep 05, 2023 1:12:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/waseemingly/ip.git to complete... +Sep 05, 2023 1:12:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/starrylight99/ip.git (master)... +Sep 05, 2023 1:12:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/starrylight99/ip.git (master)... +Sep 05, 2023 1:12:18 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/starrylight99/ip.git (master) completed! +Sep 05, 2023 1:12:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [84/480] Analyzing https://github.com/ruth-lim/ip.git (master)... +Sep 05, 2023 1:12:18 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ruth-lim/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ruth-lim/ip.git (master)... +Sep 05, 2023 1:12:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/seewhyjay/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AustinHuang1203/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/brandon-nam/ip.git... -Sep 04, 2023 1:43:37 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AustinHuang1203/ip.git (master) completed! -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/brandon-nam/ip.git to complete... -Sep 04, 2023 1:43:37 PM reposense.report.ReportGenerator analyzeRepos -INFO: [85/480] Analyzing https://github.com/xCOLOURx/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/seewhyjay/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:18 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/seewhyjay/ip.git (master) completed! -Sep 04, 2023 1:43:37 PM reposense.report.ReportGenerator analyzeRepos -INFO: [86/480] Analyzing https://github.com/zacwong2151/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jylow/ip.git completed! -Sep 04, 2023 1:43:37 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/xCOLOURx/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/xCOLOURx/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [85/480] Analyzing https://github.com/AustinHuang1203/ip.git (master)... +Sep 05, 2023 1:12:18 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AustinHuang1203/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AustinHuang1203/ip.git (master)... +Sep 05, 2023 1:12:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/freddychenyouren2/ip.git completed! +Sep 05, 2023 1:12:18 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/raydenlim/ip.git... +Sep 05, 2023 1:12:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/raydenlim/ip.git to complete... +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/adhigop13/ip.git completed! +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jingyu987/ip.git... +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/waseemingly/ip.git completed! +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jordankanghm/ip.git completed! +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/FerdiHS/ip.git... +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jingyu987/ip.git to complete... +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/FerdiHS/ip.git to complete... +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jrchoo/ip.git... +Sep 05, 2023 1:12:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AustinHuang1203/ip.git (master)... +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jrchoo/ip.git to complete... +Sep 05, 2023 1:12:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AustinHuang1203/ip.git (master)... +Sep 05, 2023 1:12:19 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AustinHuang1203/ip.git (master) completed! +Sep 05, 2023 1:12:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [86/480] Analyzing https://github.com/limzhenwy/ip.git (master)... +Sep 05, 2023 1:12:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/limzhenwy/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/limzhenwy/ip.git (master)... +Sep 05, 2023 1:12:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ruth-lim/ip.git (master)... +Sep 05, 2023 1:12:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ruth-lim/ip.git (master)... +Sep 05, 2023 1:12:19 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ruth-lim/ip.git (master) completed! +Sep 05, 2023 1:12:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [87/480] Analyzing https://github.com/zacwong2151/ip.git (master)... +Sep 05, 2023 1:12:19 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/zacwong2151/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/zacwong2151/ip.git (master)... -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LHeng1/ip.git... -Sep 04, 2023 1:43:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LHeng1/ip.git to complete... -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lawruixi/ip.git completed! -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Leb14/ip.git... -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Leb14/ip.git to complete... -Sep 04, 2023 1:43:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/raydenlim/ip.git completed! +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/RiyaMehta2211/ip.git... +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/RiyaMehta2211/ip.git to complete... +Sep 05, 2023 1:12:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/limzhenwy/ip.git (master)... +Sep 05, 2023 1:12:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/limzhenwy/ip.git (master)... +Sep 05, 2023 1:12:19 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/limzhenwy/ip.git (master) completed! +Sep 05, 2023 1:12:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [88/480] Analyzing https://github.com/xCOLOURx/ip.git (master)... +Sep 05, 2023 1:12:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/xCOLOURx/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/xCOLOURx/ip.git (master)... +Sep 05, 2023 1:12:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/zacwong2151/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/zacwong2151/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:19 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/zacwong2151/ip.git (master) completed! -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JeremyYong128/ip.git completed! -Sep 04, 2023 1:43:38 PM reposense.report.ReportGenerator analyzeRepos -INFO: [87/480] Analyzing https://github.com/limzhenwy/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/B-enguin/ip.git... -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/B-enguin/ip.git to complete... -Sep 04, 2023 1:43:38 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/limzhenwy/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/limzhenwy/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [89/480] Analyzing https://github.com/Zjinnnn/ip.git (master)... +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/FerdiHS/ip.git completed! +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jingyu987/ip.git completed! +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/leezhanpeng/ip.git... +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jrchoo/ip.git completed! +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/juzzztinsoong/ip.git... +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/leezhanpeng/ip.git to complete... +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/juzzztinsoong/ip.git to complete... +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/darrentfy/ip.git... +Sep 05, 2023 1:12:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Zjinnnn/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Zjinnnn/ip.git (master)... +Sep 05, 2023 1:12:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/darrentfy/ip.git to complete... +Sep 05, 2023 1:12:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/xCOLOURx/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/xCOLOURx/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:20 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/xCOLOURx/ip.git (master) completed! -Sep 04, 2023 1:43:38 PM reposense.report.ReportGenerator analyzeRepos -INFO: [88/480] Analyzing https://github.com/ruth-lim/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ruth-lim/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ruth-lim/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/brandon-nam/ip.git completed! -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/s-kybound/ip.git... -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LHeng1/ip.git completed! -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/s-kybound/ip.git to complete... -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wesho1107/ip.git... -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wesho1107/ip.git to complete... -Sep 04, 2023 1:43:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/limzhenwy/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/limzhenwy/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/limzhenwy/ip.git (master) completed! -Sep 04, 2023 1:43:38 PM reposense.report.ReportGenerator analyzeRepos -INFO: [89/480] Analyzing https://github.com/awhb/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [90/480] Analyzing https://github.com/awhb/ip.git (master)... +Sep 05, 2023 1:12:20 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/awhb/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/awhb/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Leb14/ip.git completed! -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yihfei/ip.git... -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yihfei/ip.git to complete... -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/B-enguin/ip.git completed! -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AaronJT1/ip.git... -Sep 04, 2023 1:43:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ruth-lim/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AaronJT1/ip.git to complete... -Sep 04, 2023 1:43:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ruth-lim/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ruth-lim/ip.git (master) completed! -Sep 04, 2023 1:43:38 PM reposense.report.ReportGenerator analyzeRepos -INFO: [90/480] Analyzing https://github.com/Zjinnnn/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/awhb/ip.git (master)... -Sep 04, 2023 1:43:38 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Zjinnnn/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Zjinnnn/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/awhb/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/awhb/ip.git (master) completed! -Sep 04, 2023 1:43:39 PM reposense.report.ReportGenerator analyzeRepos -INFO: [91/480] Analyzing https://github.com/teoks0199/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/s-kybound/ip.git completed! -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dlathyun/ip.git... -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dlathyun/ip.git to complete... -Sep 04, 2023 1:43:39 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/teoks0199/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/teoks0199/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wesho1107/ip.git completed! -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ricketytoc/ip.git... -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ricketytoc/ip.git to complete... -Sep 04, 2023 1:43:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/RiyaMehta2211/ip.git completed! +Sep 05, 2023 1:12:20 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/redtailedfox/ip.git... +Sep 05, 2023 1:12:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/redtailedfox/ip.git to complete... +Sep 05, 2023 1:12:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Zjinnnn/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Zjinnnn/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:20 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Zjinnnn/ip.git (master) completed! -Sep 04, 2023 1:43:39 PM reposense.report.ReportGenerator analyzeRepos -INFO: [92/480] Analyzing https://github.com/qz1004/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [91/480] Analyzing https://github.com/qz1004/ip.git (master)... +Sep 05, 2023 1:12:20 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/qz1004/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/qz1004/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/awhb/ip.git (master)... +Sep 05, 2023 1:12:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/awhb/ip.git (master)... +Sep 05, 2023 1:12:20 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/awhb/ip.git (master) completed! +Sep 05, 2023 1:12:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [92/480] Analyzing https://github.com/teoks0199/ip.git (master)... +Sep 05, 2023 1:12:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/juzzztinsoong/ip.git completed! +Sep 05, 2023 1:12:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/leezhanpeng/ip.git completed! +Sep 05, 2023 1:12:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/darrentfy/ip.git completed! +Sep 05, 2023 1:12:20 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/teoks0199/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/teoks0199/ip.git (master)... +Sep 05, 2023 1:12:20 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Fallman2/ip.git... +Sep 05, 2023 1:12:20 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Heran9/ip.git... +Sep 05, 2023 1:12:20 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/VN-Hao/ip.git... +Sep 05, 2023 1:12:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Heran9/ip.git to complete... +Sep 05, 2023 1:12:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Fallman2/ip.git to complete... +Sep 05, 2023 1:12:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/VN-Hao/ip.git to complete... +Sep 05, 2023 1:12:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/qz1004/ip.git (master)... +Sep 05, 2023 1:12:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/teoks0199/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/qz1004/ip.git (master)... +Sep 05, 2023 1:12:20 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/qz1004/ip.git (master) completed! +Sep 05, 2023 1:12:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/teoks0199/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [93/480] Analyzing https://github.com/pangyyen/ip.git (master)... +Sep 05, 2023 1:12:20 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/teoks0199/ip.git (master) completed! -Sep 04, 2023 1:43:39 PM reposense.report.ReportGenerator analyzeRepos -INFO: [93/480] Analyzing https://github.com/Mahidharah/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yihfei/ip.git completed! -Sep 04, 2023 1:43:39 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [94/480] Analyzing https://github.com/Mahidharah/ip.git (master)... +Sep 05, 2023 1:12:20 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/pangyyen/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/pangyyen/ip.git (master)... +Sep 05, 2023 1:12:20 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Mahidharah/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Mahidharah/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Angelyxx/ip.git... -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Angelyxx/ip.git to complete... -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AaronJT1/ip.git completed! -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jingting1412/ip.git... -Sep 04, 2023 1:43:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/redtailedfox/ip.git completed! +Sep 05, 2023 1:12:20 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jingjie88/ip.git... +Sep 05, 2023 1:12:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jingjie88/ip.git to complete... +Sep 05, 2023 1:12:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Mahidharah/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jingting1412/ip.git to complete... -Sep 04, 2023 1:43:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Mahidharah/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:21 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Mahidharah/ip.git (master) completed! -Sep 04, 2023 1:43:39 PM reposense.report.ReportGenerator analyzeRepos -INFO: [94/480] Analyzing https://github.com/jason-raiin/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:21 AM reposense.report.ReportGenerator analyzeRepos +INFO: [95/480] Analyzing https://github.com/jason-raiin/ip.git (master)... +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Fallman2/ip.git completed! +Sep 05, 2023 1:12:21 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jason-raiin/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jason-raiin/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dlathyun/ip.git completed! -Sep 04, 2023 1:43:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/qz1004/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/SinhaVedant/ip.git... -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/SinhaVedant/ip.git to complete... -Sep 04, 2023 1:43:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/qz1004/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/qz1004/ip.git (master) completed! -Sep 04, 2023 1:43:39 PM reposense.report.ReportGenerator analyzeRepos -INFO: [95/480] Analyzing https://github.com/ravern/ip.git (master)... -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ricketytoc/ip.git completed! -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/freddychenyouren2/ip.git... -Sep 04, 2023 1:43:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/freddychenyouren2/ip.git to complete... -Sep 04, 2023 1:43:39 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/H1410101/ip.git... +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/H1410101/ip.git to complete... +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/VN-Hao/ip.git completed! +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Heran9/ip.git completed! +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kimshitong/ip.git... +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kimshitong/ip.git to complete... +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ivanleekk/ip.git... +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ivanleekk/ip.git to complete... +Sep 05, 2023 1:12:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/pangyyen/ip.git (master)... +Sep 05, 2023 1:12:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/pangyyen/ip.git (master)... +Sep 05, 2023 1:12:21 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/pangyyen/ip.git (master) completed! +Sep 05, 2023 1:12:21 AM reposense.report.ReportGenerator analyzeRepos +INFO: [96/480] Analyzing https://github.com/ravern/ip.git (master)... +Sep 05, 2023 1:12:21 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ravern/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ravern/ip.git (master)... -Sep 04, 2023 1:43:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jason-raiin/ip.git (master)... -Sep 04, 2023 1:43:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Angelyxx/ip.git completed! -Sep 04, 2023 1:43:40 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jordankanghm/ip.git... -Sep 04, 2023 1:43:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jordankanghm/ip.git to complete... -Sep 04, 2023 1:43:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jason-raiin/ip.git (master)... -Sep 04, 2023 1:43:40 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:21 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jason-raiin/ip.git (master) completed! -Sep 04, 2023 1:43:40 PM reposense.report.ReportGenerator analyzeRepos -INFO: [96/480] Analyzing https://github.com/nixonwidjaja/ip.git (master)... -Sep 04, 2023 1:43:40 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nixonwidjaja/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nixonwidjaja/ip.git (master)... -Sep 04, 2023 1:43:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jingting1412/ip.git completed! -Sep 04, 2023 1:43:40 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/adhigop13/ip.git... -Sep 04, 2023 1:43:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/SinhaVedant/ip.git completed! -Sep 04, 2023 1:43:40 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/waseemingly/ip.git... -Sep 04, 2023 1:43:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/adhigop13/ip.git to complete... -Sep 04, 2023 1:43:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/waseemingly/ip.git to complete... -Sep 04, 2023 1:43:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/freddychenyouren2/ip.git completed! -Sep 04, 2023 1:43:40 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/raydenlim/ip.git... -Sep 04, 2023 1:43:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/raydenlim/ip.git to complete... -Sep 04, 2023 1:43:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ravern/ip.git (master)... -Sep 04, 2023 1:43:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ravern/ip.git (master)... -Sep 04, 2023 1:43:40 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ravern/ip.git (master) completed! -Sep 04, 2023 1:43:40 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:21 AM reposense.report.ReportGenerator analyzeRepos INFO: [97/480] Analyzing https://github.com/bobscodedump/ip.git (master)... -Sep 04, 2023 1:43:40 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:21 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/bobscodedump/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/bobscodedump/ip.git (master)... -Sep 04, 2023 1:43:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nixonwidjaja/ip.git (master)... -Sep 04, 2023 1:43:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nixonwidjaja/ip.git (master)... -Sep 04, 2023 1:43:40 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nixonwidjaja/ip.git (master) completed! -Sep 04, 2023 1:43:40 PM reposense.report.ReportGenerator analyzeRepos -INFO: [98/480] Analyzing https://github.com/techjay-c/ip.git (master)... -Sep 04, 2023 1:43:40 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/techjay-c/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/techjay-c/ip.git (master)... -Sep 04, 2023 1:43:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jordankanghm/ip.git completed! -Sep 04, 2023 1:43:40 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jingyu987/ip.git... -Sep 04, 2023 1:43:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jingyu987/ip.git to complete... -Sep 04, 2023 1:43:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jingjie88/ip.git completed! +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lamchenghou/ip.git... +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lamchenghou/ip.git to complete... +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/H1410101/ip.git completed! +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tayruxin/ip.git... +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kimshitong/ip.git completed! +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ivanleekk/ip.git completed! +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tayruxin/ip.git to complete... +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/raynertjx/ip.git... +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/raynertjx/ip.git to complete... +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zhengyup/ip.git... +Sep 05, 2023 1:12:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zhengyup/ip.git to complete... +Sep 05, 2023 1:12:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ravern/ip.git (master)... +Sep 05, 2023 1:12:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ravern/ip.git (master)... +Sep 05, 2023 1:12:22 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ravern/ip.git (master) completed! +Sep 05, 2023 1:12:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [98/480] Analyzing https://github.com/nixonwidjaja/ip.git (master)... +Sep 05, 2023 1:12:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/bobscodedump/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:22 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nixonwidjaja/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nixonwidjaja/ip.git (master)... +Sep 05, 2023 1:12:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/bobscodedump/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:22 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/bobscodedump/ip.git (master) completed! -Sep 04, 2023 1:43:41 PM reposense.report.ReportGenerator analyzeRepos -INFO: [99/480] Analyzing https://github.com/pangyyen/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/adhigop13/ip.git completed! -Sep 04, 2023 1:43:41 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/pangyyen/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/pangyyen/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/waseemingly/ip.git completed! -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/FerdiHS/ip.git... -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/FerdiHS/ip.git to complete... -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/raydenlim/ip.git completed! -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jrchoo/ip.git... -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/RiyaMehta2211/ip.git... -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/RiyaMehta2211/ip.git to complete... -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jrchoo/ip.git to complete... -Sep 04, 2023 1:43:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/techjay-c/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/techjay-c/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/techjay-c/ip.git (master) completed! -Sep 04, 2023 1:43:41 PM reposense.report.ReportGenerator analyzeRepos -INFO: [100/480] Analyzing https://github.com/ryanozx/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [99/480] Analyzing https://github.com/ryanozx/ip.git (master)... +Sep 05, 2023 1:12:22 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ryanozx/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ryanozx/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jingyu987/ip.git completed! -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/leezhanpeng/ip.git... -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/leezhanpeng/ip.git to complete... -Sep 04, 2023 1:43:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/pangyyen/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/pangyyen/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/pangyyen/ip.git (master) completed! -Sep 04, 2023 1:43:41 PM reposense.report.ReportGenerator analyzeRepos -INFO: [101/480] Analyzing https://github.com/dom-buri/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dom-buri/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dom-buri/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lamchenghou/ip.git completed! +Sep 05, 2023 1:12:22 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/larrywang0701/ip.git... +Sep 05, 2023 1:12:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tayruxin/ip.git completed! +Sep 05, 2023 1:12:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/larrywang0701/ip.git to complete... +Sep 05, 2023 1:12:22 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Carlintyj/ip.git... +Sep 05, 2023 1:12:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/raynertjx/ip.git completed! +Sep 05, 2023 1:12:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Carlintyj/ip.git to complete... +Sep 05, 2023 1:12:22 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wxwern/ip.git... +Sep 05, 2023 1:12:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zhengyup/ip.git completed! +Sep 05, 2023 1:12:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wxwern/ip.git to complete... +Sep 05, 2023 1:12:22 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nubnubyas/ip.git... +Sep 05, 2023 1:12:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nubnubyas/ip.git to complete... +Sep 05, 2023 1:12:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nixonwidjaja/ip.git (master)... +Sep 05, 2023 1:12:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ryanozx/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nixonwidjaja/ip.git (master)... +Sep 05, 2023 1:12:22 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nixonwidjaja/ip.git (master) completed! +Sep 05, 2023 1:12:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [100/480] Analyzing https://github.com/techjay-c/ip.git (master)... +Sep 05, 2023 1:12:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ryanozx/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:22 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ryanozx/ip.git (master) completed! -Sep 04, 2023 1:43:41 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [101/480] Analyzing https://github.com/LuahJunYang/ip.git (master)... +Sep 05, 2023 1:12:22 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/techjay-c/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/techjay-c/ip.git (master)... +Sep 05, 2023 1:12:22 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LuahJunYang/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LuahJunYang/ip.git (master)... +Sep 05, 2023 1:12:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LuahJunYang/ip.git (master)... +Sep 05, 2023 1:12:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LuahJunYang/ip.git (master)... +Sep 05, 2023 1:12:22 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LuahJunYang/ip.git (master) completed! +Sep 05, 2023 1:12:22 AM reposense.report.ReportGenerator analyzeRepos INFO: [102/480] Analyzing https://github.com/HEEaZ/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:22 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/HEEaZ/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/HEEaZ/ip.git (master)... -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/FerdiHS/ip.git completed! -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/juzzztinsoong/ip.git... -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/juzzztinsoong/ip.git to complete... -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/RiyaMehta2211/ip.git completed! -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jrchoo/ip.git completed! -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/darrentfy/ip.git... -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/redtailedfox/ip.git... -Sep 04, 2023 1:43:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/darrentfy/ip.git to complete... -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/redtailedfox/ip.git to complete... -Sep 04, 2023 1:43:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/techjay-c/ip.git (master)... +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/larrywang0701/ip.git completed! +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/aslam341/ip.git... +Sep 05, 2023 1:12:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/techjay-c/ip.git (master)... +Sep 05, 2023 1:12:23 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/techjay-c/ip.git (master) completed! +Sep 05, 2023 1:12:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [103/480] Analyzing https://github.com/dom-buri/ip.git (master)... +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/aslam341/ip.git to complete... +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wxwern/ip.git completed! +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LWZ19/ip.git... +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LWZ19/ip.git to complete... +Sep 05, 2023 1:12:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/HEEaZ/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/leezhanpeng/ip.git completed! -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Fallman2/ip.git... -Sep 04, 2023 1:43:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Carlintyj/ip.git completed! +Sep 05, 2023 1:12:23 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dom-buri/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dom-buri/ip.git (master)... +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/timleow/ip.git... +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nubnubyas/ip.git completed! +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/timleow/ip.git to complete... +Sep 05, 2023 1:12:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/HEEaZ/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:23 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/HEEaZ/ip.git (master) completed! -Sep 04, 2023 1:43:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [103/480] Analyzing https://github.com/tiongjjyi/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Fallman2/ip.git to complete... -Sep 04, 2023 1:43:42 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [104/480] Analyzing https://github.com/tiongjjyi/ip.git (master)... +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/rayshawntan/ip.git... +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/rayshawntan/ip.git to complete... +Sep 05, 2023 1:12:23 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tiongjjyi/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tiongjjyi/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tiongjjyi/ip.git (master)... +Sep 05, 2023 1:12:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/dom-buri/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tiongjjyi/ip.git (master)... +Sep 05, 2023 1:12:23 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tiongjjyi/ip.git (master) completed! +Sep 05, 2023 1:12:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dom-buri/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:23 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dom-buri/ip.git (master) completed! -Sep 04, 2023 1:43:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [104/480] Analyzing https://github.com/Vanessamae23/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [105/480] Analyzing https://github.com/Vanessamae23/ip.git (master)... +Sep 05, 2023 1:12:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [106/480] Analyzing https://github.com/fuyiqiao/ip.git (master)... +Sep 05, 2023 1:12:23 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Vanessamae23/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Vanessamae23/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tiongjjyi/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tiongjjyi/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tiongjjyi/ip.git (master) completed! -Sep 04, 2023 1:43:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [105/480] Analyzing https://github.com/LuahJunYang/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LuahJunYang/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LuahJunYang/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/redtailedfox/ip.git completed! -Sep 04, 2023 1:43:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LuahJunYang/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/darrentfy/ip.git completed! -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/juzzztinsoong/ip.git completed! -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Heran9/ip.git... -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/VN-Hao/ip.git... -Sep 04, 2023 1:43:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LuahJunYang/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LuahJunYang/ip.git (master) completed! -Sep 04, 2023 1:43:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [106/480] Analyzing https://github.com/fuyiqiao/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Heran9/ip.git to complete... -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jingjie88/ip.git... -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jingjie88/ip.git to complete... -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/VN-Hao/ip.git to complete... -Sep 04, 2023 1:43:42 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:23 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/fuyiqiao/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/fuyiqiao/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Fallman2/ip.git completed! -Sep 04, 2023 1:43:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Vanessamae23/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/H1410101/ip.git... -Sep 04, 2023 1:43:42 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/H1410101/ip.git to complete... -Sep 04, 2023 1:43:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Vanessamae23/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Vanessamae23/ip.git (master) completed! -Sep 04, 2023 1:43:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [107/480] Analyzing https://github.com/spatuly/ip.git (master)... -Sep 04, 2023 1:43:42 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/spatuly/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/spatuly/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/aslam341/ip.git completed! +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/aexolate/ip.git... +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/aexolate/ip.git to complete... +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/timleow/ip.git completed! +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LWZ19/ip.git completed! +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Sheeepen/ip.git... +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Sheeepen/ip.git to complete... +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/rayshawntan/ip.git completed! +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/shuyangk/ip.git... +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ncmathan/ip.git... +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/shuyangk/ip.git to complete... +Sep 05, 2023 1:12:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ncmathan/ip.git to complete... +Sep 05, 2023 1:12:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/fuyiqiao/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/fuyiqiao/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:24 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/fuyiqiao/ip.git (master) completed! -Sep 04, 2023 1:43:43 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:24 AM reposense.report.ReportGenerator analyzeRepos +INFO: [107/480] Analyzing https://github.com/spatuly/ip.git (master)... +Sep 05, 2023 1:12:24 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/spatuly/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/spatuly/ip.git (master)... +Sep 05, 2023 1:12:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Vanessamae23/ip.git (master)... +Sep 05, 2023 1:12:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Vanessamae23/ip.git (master)... +Sep 05, 2023 1:12:24 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Vanessamae23/ip.git (master) completed! +Sep 05, 2023 1:12:24 AM reposense.report.ReportGenerator analyzeRepos INFO: [108/480] Analyzing https://github.com/tanshiyu1999/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:24 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tanshiyu1999/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tanshiyu1999/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/spatuly/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/aexolate/ip.git completed! +Sep 05, 2023 1:12:24 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/iyioon/ip.git... +Sep 05, 2023 1:12:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/iyioon/ip.git to complete... +Sep 05, 2023 1:12:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/spatuly/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:24 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/spatuly/ip.git (master) completed! -Sep 04, 2023 1:43:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [109/480] Analyzing https://github.com/Kb-Tay/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Kb-Tay/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Kb-Tay/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jingjie88/ip.git completed! -Sep 04, 2023 1:43:43 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kimshitong/ip.git... -Sep 04, 2023 1:43:43 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kimshitong/ip.git to complete... -Sep 04, 2023 1:43:43 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/VN-Hao/ip.git completed! -Sep 04, 2023 1:43:43 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ivanleekk/ip.git... -Sep 04, 2023 1:43:43 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Heran9/ip.git completed! -Sep 04, 2023 1:43:43 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lamchenghou/ip.git... -Sep 04, 2023 1:43:43 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ivanleekk/ip.git to complete... -Sep 04, 2023 1:43:43 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lamchenghou/ip.git to complete... -Sep 04, 2023 1:43:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:24 AM reposense.report.ReportGenerator analyzeRepos +INFO: [109/480] Analyzing https://github.com/beatricecst/ip.git (master)... +Sep 05, 2023 1:12:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tanshiyu1999/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Sheeepen/ip.git completed! +Sep 05, 2023 1:12:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tanshiyu1999/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:24 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tanshiyu1999/ip.git (master) completed! -Sep 04, 2023 1:43:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [110/480] Analyzing https://github.com/beatricecst/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/H1410101/ip.git completed! -Sep 04, 2023 1:43:43 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tayruxin/ip.git... -Sep 04, 2023 1:43:43 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:24 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/beatricecst/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:24 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kiwibang/ip.git... +Sep 05, 2023 1:12:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/beatricecst/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tayruxin/ip.git to complete... -Sep 04, 2023 1:43:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Kb-Tay/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Kb-Tay/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Kb-Tay/ip.git (master) completed! -Sep 04, 2023 1:43:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [111/480] Analyzing https://github.com/tanveersingh10/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:24 AM reposense.report.ReportGenerator analyzeRepos +INFO: [110/480] Analyzing https://github.com/Kb-Tay/ip.git (master)... +Sep 05, 2023 1:12:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kiwibang/ip.git to complete... +Sep 05, 2023 1:12:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ncmathan/ip.git completed! +Sep 05, 2023 1:12:24 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/mingyu-wan/ip.git... +Sep 05, 2023 1:12:24 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Kb-Tay/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Kb-Tay/ip.git (master)... +Sep 05, 2023 1:12:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/mingyu-wan/ip.git to complete... +Sep 05, 2023 1:12:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/shuyangk/ip.git completed! +Sep 05, 2023 1:12:24 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LuoZYi/ip.git... +Sep 05, 2023 1:12:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LuoZYi/ip.git to complete... +Sep 05, 2023 1:12:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/beatricecst/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/beatricecst/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:24 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/beatricecst/ip.git (master) completed! -Sep 04, 2023 1:43:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [112/480] Analyzing https://github.com/AlainS87/ip.git (master)... -Sep 04, 2023 1:43:43 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:24 AM reposense.report.ReportGenerator analyzeRepos +INFO: [111/480] Analyzing https://github.com/tanveersingh10/ip.git (master)... +Sep 05, 2023 1:12:24 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tanveersingh10/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tanveersingh10/ip.git (master)... -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kimshitong/ip.git completed! -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/raynertjx/ip.git... -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/raynertjx/ip.git to complete... -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ivanleekk/ip.git completed! -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lamchenghou/ip.git completed! -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zhengyup/ip.git... -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/larrywang0701/ip.git... -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tayruxin/ip.git completed! -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zhengyup/ip.git to complete... -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/larrywang0701/ip.git to complete... -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Carlintyj/ip.git... -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Carlintyj/ip.git to complete... -Sep 04, 2023 1:43:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Kb-Tay/ip.git (master)... +Sep 05, 2023 1:12:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Kb-Tay/ip.git (master)... +Sep 05, 2023 1:12:25 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Kb-Tay/ip.git (master) completed! +Sep 05, 2023 1:12:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [112/480] Analyzing https://github.com/s0ngyang/ip.git (master)... +Sep 05, 2023 1:12:25 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/s0ngyang/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/s0ngyang/ip.git (master)... +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/iyioon/ip.git completed! +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/asdfghjkxd/ip.git... +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/asdfghjkxd/ip.git to complete... +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kiwibang/ip.git completed! +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sushiyade/ip.git... +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sushiyade/ip.git to complete... +Sep 05, 2023 1:12:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tanveersingh10/ip.git (master)... -Sep 04, 2023 1:43:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mingyu-wan/ip.git completed! +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Nid21cs/ip.git... +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LuoZYi/ip.git completed! +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Nid21cs/ip.git to complete... +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/McNaBry/ip.git... +Sep 05, 2023 1:12:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tanveersingh10/ip.git (master)... -Sep 04, 2023 1:43:44 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:25 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tanveersingh10/ip.git (master) completed! -Sep 04, 2023 1:43:44 PM reposense.report.ReportGenerator analyzeRepos -INFO: [113/480] Analyzing https://github.com/thienmy0/ip.git (master)... -Sep 04, 2023 1:43:44 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [113/480] Analyzing https://github.com/AlainS87/ip.git (master)... +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/McNaBry/ip.git to complete... +Sep 05, 2023 1:12:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/s0ngyang/ip.git (master)... +Sep 05, 2023 1:12:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/s0ngyang/ip.git (master)... +Sep 05, 2023 1:12:25 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/s0ngyang/ip.git (master) completed! +Sep 05, 2023 1:12:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [114/480] Analyzing https://github.com/thienmy0/ip.git (master)... +Sep 05, 2023 1:12:25 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/thienmy0/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/thienmy0/ip.git (master)... -Sep 04, 2023 1:43:44 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AlainS87/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AlainS87/ip.git (master)... -Sep 04, 2023 1:43:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/thienmy0/ip.git (master)... -Sep 04, 2023 1:43:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/thienmy0/ip.git (master)... -Sep 04, 2023 1:43:44 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:25 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/thienmy0/ip.git (master) completed! -Sep 04, 2023 1:43:44 PM reposense.report.ReportGenerator analyzeRepos -INFO: [114/480] Analyzing https://github.com/s0ngyang/ip.git (master)... -Sep 04, 2023 1:43:44 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/s0ngyang/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/s0ngyang/ip.git (master)... -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/raynertjx/ip.git completed! -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wxwern/ip.git... -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wxwern/ip.git to complete... -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/larrywang0701/ip.git completed! -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nubnubyas/ip.git... -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nubnubyas/ip.git to complete... -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zhengyup/ip.git completed! -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/aslam341/ip.git... -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Carlintyj/ip.git completed! -Sep 04, 2023 1:43:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/aslam341/ip.git to complete... -Sep 04, 2023 1:43:45 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LWZ19/ip.git... -Sep 04, 2023 1:43:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LWZ19/ip.git to complete... -Sep 04, 2023 1:43:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/s0ngyang/ip.git (master)... -Sep 04, 2023 1:43:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/s0ngyang/ip.git (master)... -Sep 04, 2023 1:43:45 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/s0ngyang/ip.git (master) completed! -Sep 04, 2023 1:43:45 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:25 AM reposense.report.ReportGenerator analyzeRepos INFO: [115/480] Analyzing https://github.com/ldinghan/ip.git (master)... -Sep 04, 2023 1:43:45 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:25 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ldinghan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ldinghan/ip.git (master)... -Sep 04, 2023 1:43:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sushiyade/ip.git completed! +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/miljyy/ip.git... +Sep 05, 2023 1:12:25 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AlainS87/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AlainS87/ip.git (master)... +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/miljyy/ip.git to complete... +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/asdfghjkxd/ip.git completed! +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ncduy0303/ip.git... +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ncduy0303/ip.git to complete... +Sep 05, 2023 1:12:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Nid21cs/ip.git completed! +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/eyelessrhyme7/ip.git... +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/eyelessrhyme7/ip.git to complete... +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/McNaBry/ip.git completed! +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ruishanteo/ip.git... +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ruishanteo/ip.git to complete... +Sep 05, 2023 1:12:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ldinghan/ip.git (master)... -Sep 04, 2023 1:43:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ldinghan/ip.git (master)... -Sep 04, 2023 1:43:45 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:26 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ldinghan/ip.git (master) completed! -Sep 04, 2023 1:43:45 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:26 AM reposense.report.ReportGenerator analyzeRepos INFO: [116/480] Analyzing https://github.com/feifeiraindrops/ip.git (master)... -Sep 04, 2023 1:43:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wxwern/ip.git completed! -Sep 04, 2023 1:43:45 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:26 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/feifeiraindrops/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/feifeiraindrops/ip.git (master)... -Sep 04, 2023 1:43:45 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/timleow/ip.git... -Sep 04, 2023 1:43:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/timleow/ip.git to complete... -Sep 04, 2023 1:43:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/aslam341/ip.git completed! -Sep 04, 2023 1:43:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nubnubyas/ip.git completed! -Sep 04, 2023 1:43:45 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/rayshawntan/ip.git... -Sep 04, 2023 1:43:45 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/aexolate/ip.git... -Sep 04, 2023 1:43:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/rayshawntan/ip.git to complete... -Sep 04, 2023 1:43:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/aexolate/ip.git to complete... -Sep 04, 2023 1:43:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/miljyy/ip.git completed! +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/m1oojv/ip.git... +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/m1oojv/ip.git to complete... +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ncduy0303/ip.git completed! +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/eyelessrhyme7/ip.git completed! +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ruishanteo/ip.git completed! +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Nixx162/ip.git... +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Gabriel4357/ip.git... +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Nixx162/ip.git to complete... +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Gabriel4357/ip.git to complete... +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/mfjkri/ip.git... +Sep 05, 2023 1:12:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/mfjkri/ip.git to complete... +Sep 05, 2023 1:12:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/feifeiraindrops/ip.git (master)... -Sep 04, 2023 1:43:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/feifeiraindrops/ip.git (master)... -Sep 04, 2023 1:43:45 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:26 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/feifeiraindrops/ip.git (master) completed! -Sep 04, 2023 1:43:45 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:26 AM reposense.report.ReportGenerator analyzeRepos INFO: [117/480] Analyzing https://github.com/kwangthiag/ip.git (master)... -Sep 04, 2023 1:43:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LWZ19/ip.git completed! -Sep 04, 2023 1:43:45 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Sheeepen/ip.git... -Sep 04, 2023 1:43:45 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:26 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kwangthiag/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kwangthiag/ip.git (master)... -Sep 04, 2023 1:43:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Sheeepen/ip.git to complete... -Sep 04, 2023 1:43:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/timleow/ip.git completed! -Sep 04, 2023 1:43:46 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/shuyangk/ip.git... -Sep 04, 2023 1:43:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/shuyangk/ip.git to complete... -Sep 04, 2023 1:43:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/kwangthiag/ip.git (master)... -Sep 04, 2023 1:43:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/rayshawntan/ip.git completed! -Sep 04, 2023 1:43:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/aexolate/ip.git completed! -Sep 04, 2023 1:43:46 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ncmathan/ip.git... -Sep 04, 2023 1:43:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kwangthiag/ip.git (master)... -Sep 04, 2023 1:43:46 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kwangthiag/ip.git (master) completed! -Sep 04, 2023 1:43:46 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:27 AM reposense.report.ReportGenerator analyzeRepos INFO: [118/480] Analyzing https://github.com/ryanongwx/ip.git (master)... -Sep 04, 2023 1:43:46 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/iyioon/ip.git... -Sep 04, 2023 1:43:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ncmathan/ip.git to complete... -Sep 04, 2023 1:43:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/iyioon/ip.git to complete... -Sep 04, 2023 1:43:46 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:27 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ryanongwx/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ryanongwx/ip.git (master)... -Sep 04, 2023 1:43:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ryanongwx/ip.git (master)... -Sep 04, 2023 1:43:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Sheeepen/ip.git completed! -Sep 04, 2023 1:43:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ryanongwx/ip.git (master)... -Sep 04, 2023 1:43:46 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kiwibang/ip.git... -Sep 04, 2023 1:43:46 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ryanongwx/ip.git (master) completed! -Sep 04, 2023 1:43:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [119/480] Analyzing https://github.com/elhy1999/ip.git (master)... -Sep 04, 2023 1:43:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kiwibang/ip.git to complete... -Sep 04, 2023 1:43:46 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/elhy1999/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/elhy1999/ip.git (master)... -Sep 04, 2023 1:43:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/shuyangk/ip.git completed! -Sep 04, 2023 1:43:46 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/mingyu-wan/ip.git... -Sep 04, 2023 1:43:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/mingyu-wan/ip.git to complete... -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ncmathan/ip.git completed! -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LuoZYi/ip.git... -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LuoZYi/ip.git to complete... -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/iyioon/ip.git completed! -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/asdfghjkxd/ip.git... -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/asdfghjkxd/ip.git to complete... -Sep 04, 2023 1:43:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AlainS87/ip.git (master)... -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kiwibang/ip.git completed! -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sushiyade/ip.git... -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sushiyade/ip.git to complete... -Sep 04, 2023 1:43:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/elhy1999/ip.git (master)... -Sep 04, 2023 1:43:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/elhy1999/ip.git (master)... -Sep 04, 2023 1:43:47 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/elhy1999/ip.git (master) completed! -Sep 04, 2023 1:43:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [120/480] Analyzing https://github.com/songgthu/ip.git (master)... -Sep 04, 2023 1:43:47 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/songgthu/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/songgthu/ip.git (master)... -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mingyu-wan/ip.git completed! -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Nid21cs/ip.git... -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Nid21cs/ip.git to complete... -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LuoZYi/ip.git completed! -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/McNaBry/ip.git... -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/McNaBry/ip.git to complete... -Sep 04, 2023 1:43:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AlainS87/ip.git (master)... -Sep 04, 2023 1:43:47 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AlainS87/ip.git (master) completed! -Sep 04, 2023 1:43:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [121/480] Analyzing https://github.com/GohTengFong/ip.git (master)... -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/asdfghjkxd/ip.git completed! -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/miljyy/ip.git... -Sep 04, 2023 1:43:47 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/GohTengFong/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/GohTengFong/ip.git (master)... -Sep 04, 2023 1:43:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/miljyy/ip.git to complete... -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sushiyade/ip.git completed! -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ncduy0303/ip.git... -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ncduy0303/ip.git to complete... -Sep 04, 2023 1:43:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/songgthu/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/songgthu/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/songgthu/ip.git (master) completed! -Sep 04, 2023 1:43:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/GohTengFong/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Nid21cs/ip.git completed! -Sep 04, 2023 1:43:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [122/480] Analyzing https://github.com/simbayippy/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/GohTengFong/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/GohTengFong/ip.git (master) completed! -Sep 04, 2023 1:43:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [123/480] Analyzing https://github.com/proto-aiken-13/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/eyelessrhyme7/ip.git... -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/eyelessrhyme7/ip.git to complete... -Sep 04, 2023 1:43:48 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/simbayippy/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/simbayippy/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/proto-aiken-13/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/proto-aiken-13/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/proto-aiken-13/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/proto-aiken-13/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/proto-aiken-13/ip.git (master) completed! -Sep 04, 2023 1:43:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [124/480] Analyzing https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/McNaBry/ip.git completed! -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ruishanteo/ip.git... -Sep 04, 2023 1:43:48 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Khaleelur-Rahman/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ruishanteo/ip.git to complete... -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/miljyy/ip.git completed! -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/m1oojv/ip.git... -Sep 04, 2023 1:43:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/simbayippy/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/m1oojv/ip.git to complete... -Sep 04, 2023 1:43:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/simbayippy/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/simbayippy/ip.git (master) completed! -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ncduy0303/ip.git completed! -Sep 04, 2023 1:43:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [125/480] Analyzing https://github.com/bwangpj/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Nixx162/ip.git... -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Nixx162/ip.git to complete... -Sep 04, 2023 1:43:48 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/bwangpj/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/bwangpj/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Khaleelur-Rahman/ip.git (master) completed! -Sep 04, 2023 1:43:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [126/480] Analyzing https://github.com/weeweh/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/weeweh/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/weeweh/ip.git (master)... -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/eyelessrhyme7/ip.git completed! -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Gabriel4357/ip.git... -Sep 04, 2023 1:43:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Gabriel4357/ip.git to complete... -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ruishanteo/ip.git completed! -Sep 04, 2023 1:43:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/bwangpj/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/mfjkri/ip.git... -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/mfjkri/ip.git to complete... -Sep 04, 2023 1:43:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/bwangpj/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/bwangpj/ip.git (master) completed! -Sep 04, 2023 1:43:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [127/480] Analyzing https://github.com/s-peiran/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/s-peiran/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/s-peiran/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/m1oojv/ip.git completed! -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/junhonglow/ip.git... -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/junhonglow/ip.git to complete... -Sep 04, 2023 1:43:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/weeweh/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/weeweh/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/weeweh/ip.git (master) completed! -Sep 04, 2023 1:43:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [128/480] Analyzing https://github.com/jylow/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Nixx162/ip.git completed! -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/RoeReRe/ip.git... -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/RoeReRe/ip.git to complete... -Sep 04, 2023 1:43:49 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jylow/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jylow/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Gabriel4357/ip.git completed! -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:27 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mfjkri/ip.git completed! +Sep 05, 2023 1:12:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AlainS87/ip.git (master)... +Sep 05, 2023 1:12:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Badatprogrammiing/ip.git... -Sep 04, 2023 1:43:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/s-peiran/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Badatprogrammiing/ip.git to complete... -Sep 04, 2023 1:43:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/s-peiran/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/s-peiran/ip.git (master) completed! -Sep 04, 2023 1:43:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [129/480] Analyzing https://github.com/lawruixi/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lawruixi/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lawruixi/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mfjkri/ip.git completed! -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:27 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Gabriel4357/ip.git completed! +Sep 05, 2023 1:12:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nknguyenhc/ip.git... -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AlainS87/ip.git (master)... +Sep 05, 2023 1:12:27 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AlainS87/ip.git (master) completed! +Sep 05, 2023 1:12:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nknguyenhc/ip.git to complete... -Sep 04, 2023 1:43:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jylow/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jylow/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jylow/ip.git (master) completed! -Sep 04, 2023 1:43:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [130/480] Analyzing https://github.com/JeremyYong128/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/JeremyYong128/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/JeremyYong128/ip.git (master)... -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [119/480] Analyzing https://github.com/elhy1999/ip.git (master)... +Sep 05, 2023 1:12:27 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/elhy1999/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/elhy1999/ip.git (master)... +Sep 05, 2023 1:12:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ryanongwx/ip.git (master)... +Sep 05, 2023 1:12:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ryanongwx/ip.git (master)... +Sep 05, 2023 1:12:27 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ryanongwx/ip.git (master) completed! +Sep 05, 2023 1:12:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [120/480] Analyzing https://github.com/songgthu/ip.git (master)... +Sep 05, 2023 1:12:27 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/songgthu/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/songgthu/ip.git (master)... +Sep 05, 2023 1:12:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/songgthu/ip.git (master)... +Sep 05, 2023 1:12:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/junhonglow/ip.git completed! -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/winson8222/ip.git... -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/songgthu/ip.git (master)... +Sep 05, 2023 1:12:27 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/songgthu/ip.git (master) completed! +Sep 05, 2023 1:12:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/winson8222/ip.git to complete... -Sep 04, 2023 1:43:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [121/480] Analyzing https://github.com/GohTengFong/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Badatprogrammiing/ip.git completed! +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/GohTengFong/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/GohTengFong/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/RoeReRe/ip.git completed! -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wujy28/ip.git... -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wujy28/ip.git to complete... -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Badatprogrammiing/ip.git completed! -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/SimWPEric/ip.git... -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wujy28/ip.git to complete... +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/SimWPEric/ip.git to complete... -Sep 04, 2023 1:43:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lawruixi/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lawruixi/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lawruixi/ip.git (master) completed! -Sep 04, 2023 1:43:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [131/480] Analyzing https://github.com/brandon-nam/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/brandon-nam/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/brandon-nam/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/JeremyYong128/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/JeremyYong128/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/JeremyYong128/ip.git (master) completed! -Sep 04, 2023 1:43:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [132/480] Analyzing https://github.com/LHeng1/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/brandon-nam/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/brandon-nam/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/brandon-nam/ip.git (master) completed! -Sep 04, 2023 1:43:50 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LHeng1/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LHeng1/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [133/480] Analyzing https://github.com/Leb14/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Leb14/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Leb14/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/nknguyenhc/ip.git completed! -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/HugeNoob/ip.git... -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/HugeNoob/ip.git to complete... -Sep 04, 2023 1:43:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LHeng1/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wujy28/ip.git completed! -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lerxuann/ip.git... -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/elhy1999/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/elhy1999/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/elhy1999/ip.git (master) completed! +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [122/480] Analyzing https://github.com/simbayippy/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/simbayippy/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/simbayippy/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/GohTengFong/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/GohTengFong/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/GohTengFong/ip.git (master) completed! +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [123/480] Analyzing https://github.com/Khaleelur-Rahman/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Khaleelur-Rahman/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Khaleelur-Rahman/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/simbayippy/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/simbayippy/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/simbayippy/ip.git (master) completed! +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [124/480] Analyzing https://github.com/proto-aiken-13/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/proto-aiken-13/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/proto-aiken-13/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/winson8222/ip.git completed! -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lerxuann/ip.git... +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lerxuann/ip.git to complete... -Sep 04, 2023 1:43:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LHeng1/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LHeng1/ip.git (master) completed! -Sep 04, 2023 1:43:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [134/480] Analyzing https://github.com/B-enguin/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/HugeNoob/ip.git completed! +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Weiennn/ip.git... -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Weiennn/ip.git to complete... -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wujy28/ip.git completed! +Sep 05, 2023 1:12:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/proto-aiken-13/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/SimWPEric/ip.git completed! -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Weiennn/ip.git to complete... +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/maj0-0/ip.git... -Sep 04, 2023 1:43:50 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/B-enguin/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/B-enguin/ip.git (master)... -Sep 04, 2023 1:43:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/maj0-0/ip.git to complete... -Sep 04, 2023 1:43:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Leb14/ip.git (master)... -Sep 04, 2023 1:43:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Leb14/ip.git (master)... -Sep 04, 2023 1:43:51 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Leb14/ip.git (master) completed! -Sep 04, 2023 1:43:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [135/480] Analyzing https://github.com/s-kybound/ip.git (master)... -Sep 04, 2023 1:43:51 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/s-kybound/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/s-kybound/ip.git (master)... -Sep 04, 2023 1:43:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/HugeNoob/ip.git completed! -Sep 04, 2023 1:43:51 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/qyaner/ip.git... -Sep 04, 2023 1:43:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/proto-aiken-13/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/proto-aiken-13/ip.git (master) completed! +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [125/480] Analyzing https://github.com/s-peiran/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/qyaner/ip.git to complete... -Sep 04, 2023 1:43:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/s-peiran/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/s-peiran/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Khaleelur-Rahman/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Khaleelur-Rahman/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Khaleelur-Rahman/ip.git (master) completed! +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [126/480] Analyzing https://github.com/bwangpj/ip.git (master)... +Sep 05, 2023 1:12:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/bwangpj/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/bwangpj/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/s-peiran/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/s-peiran/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/s-peiran/ip.git (master) completed! +Sep 05, 2023 1:12:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [127/480] Analyzing https://github.com/weeweh/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/bwangpj/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/weeweh/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/weeweh/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/bwangpj/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/bwangpj/ip.git (master) completed! +Sep 05, 2023 1:12:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [128/480] Analyzing https://github.com/jylow/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lerxuann/ip.git completed! -Sep 04, 2023 1:43:51 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jylow/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jylow/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ruiyangzh/ip.git... -Sep 04, 2023 1:43:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ruiyangzh/ip.git to complete... -Sep 04, 2023 1:43:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/B-enguin/ip.git (master)... -Sep 04, 2023 1:43:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/qyaner/ip.git completed! +Sep 05, 2023 1:12:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/maj0-0/ip.git completed! -Sep 04, 2023 1:43:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Weiennn/ip.git completed! -Sep 04, 2023 1:43:51 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:29 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Bombbird2001/ip.git... -Sep 04, 2023 1:43:51 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Weiennn/ip.git completed! +Sep 05, 2023 1:12:29 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/hyc17003/ip.git... -Sep 04, 2023 1:43:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Bombbird2001/ip.git to complete... -Sep 04, 2023 1:43:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/B-enguin/ip.git (master)... -Sep 04, 2023 1:43:51 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/B-enguin/ip.git (master) completed! -Sep 04, 2023 1:43:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [136/480] Analyzing https://github.com/wesho1107/ip.git (master)... -Sep 04, 2023 1:43:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/hyc17003/ip.git to complete... -Sep 04, 2023 1:43:51 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wesho1107/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wesho1107/ip.git (master)... -Sep 04, 2023 1:43:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/s-kybound/ip.git (master)... -Sep 04, 2023 1:43:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/s-kybound/ip.git (master)... -Sep 04, 2023 1:43:51 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/s-kybound/ip.git (master) completed! -Sep 04, 2023 1:43:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [137/480] Analyzing https://github.com/yihfei/ip.git (master)... -Sep 04, 2023 1:43:51 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yihfei/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yihfei/ip.git (master)... -Sep 04, 2023 1:43:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wesho1107/ip.git (master)... -Sep 04, 2023 1:43:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/qyaner/ip.git completed! -Sep 04, 2023 1:43:51 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:29 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/adammangzijun/ip.git... -Sep 04, 2023 1:43:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wesho1107/ip.git (master)... -Sep 04, 2023 1:43:51 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wesho1107/ip.git (master) completed! -Sep 04, 2023 1:43:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:29 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/adammangzijun/ip.git to complete... -Sep 04, 2023 1:43:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [138/480] Analyzing https://github.com/AaronJT1/ip.git (master)... -Sep 04, 2023 1:43:51 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AaronJT1/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AaronJT1/ip.git (master)... -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/weeweh/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/weeweh/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/weeweh/ip.git (master) completed! +Sep 05, 2023 1:12:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [129/480] Analyzing https://github.com/brandon-nam/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/brandon-nam/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/brandon-nam/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jylow/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jylow/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jylow/ip.git (master) completed! +Sep 05, 2023 1:12:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [130/480] Analyzing https://github.com/lawruixi/ip.git (master)... +Sep 05, 2023 1:12:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lawruixi/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lawruixi/ip.git (master)... +Sep 05, 2023 1:12:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/brandon-nam/ip.git (master)... +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ruiyangzh/ip.git completed! -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/brandon-nam/ip.git (master)... +Sep 05, 2023 1:12:30 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/brandon-nam/ip.git (master) completed! +Sep 05, 2023 1:12:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [131/480] Analyzing https://github.com/JeremyYong128/ip.git (master)... +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/andytoh1/ip.git... -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/andytoh1/ip.git to complete... -Sep 04, 2023 1:43:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yihfei/ip.git (master)... -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/hyc17003/ip.git completed! -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Bombbird2001/ip.git completed! -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/hyc17003/ip.git completed! +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Originalidk/ip.git... -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Originalidk/ip.git to complete... -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/quzhetao01/ip.git... -Sep 04, 2023 1:43:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yihfei/ip.git (master)... -Sep 04, 2023 1:43:52 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yihfei/ip.git (master) completed! -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/JeremyYong128/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/JeremyYong128/ip.git (master)... +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/quzhetao01/ip.git to complete... -Sep 04, 2023 1:43:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [139/480] Analyzing https://github.com/dlathyun/ip.git (master)... -Sep 04, 2023 1:43:52 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dlathyun/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dlathyun/ip.git (master)... -Sep 04, 2023 1:43:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AaronJT1/ip.git (master)... -Sep 04, 2023 1:43:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AaronJT1/ip.git (master)... -Sep 04, 2023 1:43:52 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AaronJT1/ip.git (master) completed! -Sep 04, 2023 1:43:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [140/480] Analyzing https://github.com/ricketytoc/ip.git (master)... -Sep 04, 2023 1:43:52 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ricketytoc/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ricketytoc/ip.git (master)... -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/adammangzijun/ip.git completed! -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/InfiBeyond/ip.git... -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/InfiBeyond/ip.git to complete... -Sep 04, 2023 1:43:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dlathyun/ip.git (master)... -Sep 04, 2023 1:43:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/dlathyun/ip.git (master)... -Sep 04, 2023 1:43:52 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/dlathyun/ip.git (master) completed! -Sep 04, 2023 1:43:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [141/480] Analyzing https://github.com/Angelyxx/ip.git (master)... -Sep 04, 2023 1:43:52 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Angelyxx/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Angelyxx/ip.git (master)... -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lawruixi/ip.git (master)... +Sep 05, 2023 1:12:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/JeremyYong128/ip.git (master)... +Sep 05, 2023 1:12:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lawruixi/ip.git (master)... +Sep 05, 2023 1:12:30 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lawruixi/ip.git (master) completed! +Sep 05, 2023 1:12:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [132/480] Analyzing https://github.com/LHeng1/ip.git (master)... +Sep 05, 2023 1:12:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/JeremyYong128/ip.git (master)... +Sep 05, 2023 1:12:30 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/JeremyYong128/ip.git (master) completed! +Sep 05, 2023 1:12:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [133/480] Analyzing https://github.com/Leb14/ip.git (master)... +Sep 05, 2023 1:12:30 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LHeng1/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LHeng1/ip.git (master)... +Sep 05, 2023 1:12:30 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Leb14/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Leb14/ip.git (master)... +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/quzhetao01/ip.git completed! +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/andytoh1/ip.git completed! -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Bearypop/ip.git... -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Originalidk/ip.git completed! -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/quzhetao01/ip.git completed! -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sp4ce-cowboy/ip.git... -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/JasonLCY-Temp/ip.git... -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Bearypop/ip.git to complete... -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sp4ce-cowboy/ip.git to complete... -Sep 04, 2023 1:43:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/JasonLCY-Temp/ip.git to complete... -Sep 04, 2023 1:43:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Angelyxx/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ricketytoc/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Angelyxx/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Angelyxx/ip.git (master) completed! -Sep 04, 2023 1:43:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [142/480] Analyzing https://github.com/jingting1412/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ricketytoc/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ricketytoc/ip.git (master) completed! -Sep 04, 2023 1:43:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [143/480] Analyzing https://github.com/SinhaVedant/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sp4ce-cowboy/ip.git... +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/InfiBeyond/ip.git completed! -Sep 04, 2023 1:43:53 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/JasonLCY-Temp/ip.git... +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wjayee/ip.git... -Sep 04, 2023 1:43:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sp4ce-cowboy/ip.git to complete... +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/wjayee/ip.git to complete... -Sep 04, 2023 1:43:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/SinhaVedant/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/SinhaVedant/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jingting1412/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jingting1412/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SinhaVedant/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SinhaVedant/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SinhaVedant/ip.git (master) completed! -Sep 04, 2023 1:43:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [144/480] Analyzing https://github.com/freddychenyouren2/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/freddychenyouren2/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/freddychenyouren2/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:30 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/JasonLCY-Temp/ip.git to complete... +Sep 05, 2023 1:12:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LHeng1/ip.git (master)... +Sep 05, 2023 1:12:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LHeng1/ip.git (master)... +Sep 05, 2023 1:12:30 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LHeng1/ip.git (master) completed! +Sep 05, 2023 1:12:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [134/480] Analyzing https://github.com/s-kybound/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/s-kybound/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/s-kybound/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Leb14/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Leb14/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Leb14/ip.git (master) completed! +Sep 05, 2023 1:12:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [135/480] Analyzing https://github.com/B-enguin/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/B-enguin/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/B-enguin/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/s-kybound/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/s-kybound/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/s-kybound/ip.git (master) completed! +Sep 05, 2023 1:12:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [136/480] Analyzing https://github.com/wesho1107/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wesho1107/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wesho1107/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Bearypop/ip.git completed! -Sep 04, 2023 1:43:53 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sp4ce-cowboy/ip.git completed! -Sep 04, 2023 1:43:53 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:31 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/vivienherq/ip.git... -Sep 04, 2023 1:43:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jingting1412/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jamesebond/ip.git... -Sep 04, 2023 1:43:53 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JasonLCY-Temp/ip.git completed! -Sep 04, 2023 1:43:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/vivienherq/ip.git to complete... -Sep 04, 2023 1:43:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jingting1412/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jingting1412/ip.git (master) completed! -Sep 04, 2023 1:43:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [145/480] Analyzing https://github.com/jordankanghm/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:31 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JasonLCY-Temp/ip.git completed! +Sep 05, 2023 1:12:31 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jamesebond/ip.git... +Sep 05, 2023 1:12:31 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sp4ce-cowboy/ip.git completed! +Sep 05, 2023 1:12:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jamesebond/ip.git to complete... -Sep 04, 2023 1:43:53 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jonyeokj/ip.git... -Sep 04, 2023 1:43:53 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jonyeokj/ip.git to complete... -Sep 04, 2023 1:43:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jordankanghm/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jordankanghm/ip.git (master)... -Sep 04, 2023 1:43:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/wjayee/ip.git completed! -Sep 04, 2023 1:43:53 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:31 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jonyeokj/ip.git... +Sep 05, 2023 1:12:31 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/victorlaiyeeteng/ip.git... -Sep 04, 2023 1:43:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:31 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jonyeokj/ip.git to complete... +Sep 05, 2023 1:12:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/victorlaiyeeteng/ip.git to complete... -Sep 04, 2023 1:43:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/freddychenyouren2/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/freddychenyouren2/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/freddychenyouren2/ip.git (master) completed! -Sep 04, 2023 1:43:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [146/480] Analyzing https://github.com/adhigop13/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/adhigop13/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/adhigop13/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wesho1107/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wesho1107/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wesho1107/ip.git (master) completed! +Sep 05, 2023 1:12:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/B-enguin/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [137/480] Analyzing https://github.com/yihfei/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/B-enguin/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/B-enguin/ip.git (master) completed! +Sep 05, 2023 1:12:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [138/480] Analyzing https://github.com/AaronJT1/ip.git (master)... +Sep 05, 2023 1:12:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yihfei/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yihfei/ip.git (master)... +Sep 05, 2023 1:12:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AaronJT1/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AaronJT1/ip.git (master)... +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jamesebond/ip.git completed! -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lyuanww/ip.git... -Sep 04, 2023 1:43:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/adhigop13/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lyuanww/ip.git to complete... -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jonyeokj/ip.git completed! -Sep 04, 2023 1:43:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/adhigop13/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/adhigop13/ip.git (master) completed! -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/vivienherq/ip.git completed! -Sep 04, 2023 1:43:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [147/480] Analyzing https://github.com/waseemingly/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yongning0310/ip.git... -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Cloud7050/ip.git... -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Cloud7050/ip.git to complete... -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yongning0310/ip.git to complete... -Sep 04, 2023 1:43:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/waseemingly/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/waseemingly/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jordankanghm/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jordankanghm/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jordankanghm/ip.git (master) completed! -Sep 04, 2023 1:43:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [148/480] Analyzing https://github.com/raydenlim/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/victorlaiyeeteng/ip.git completed! -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yongning0310/ip.git to complete... +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LoMaply/ip.git... -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LoMaply/ip.git to complete... -Sep 04, 2023 1:43:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/raydenlim/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/raydenlim/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/waseemingly/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/waseemingly/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/waseemingly/ip.git (master) completed! -Sep 04, 2023 1:43:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [149/480] Analyzing https://github.com/jingyu987/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jingyu987/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jingyu987/ip.git (master)... -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Cloud7050/ip.git completed! -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AaronJT1/ip.git (master)... +Sep 05, 2023 1:12:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yihfei/ip.git (master)... +Sep 05, 2023 1:12:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AaronJT1/ip.git (master)... +Sep 05, 2023 1:12:32 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AaronJT1/ip.git (master) completed! +Sep 05, 2023 1:12:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [139/480] Analyzing https://github.com/dlathyun/ip.git (master)... +Sep 05, 2023 1:12:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yihfei/ip.git (master)... +Sep 05, 2023 1:12:32 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yihfei/ip.git (master) completed! +Sep 05, 2023 1:12:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [140/480] Analyzing https://github.com/ricketytoc/ip.git (master)... +Sep 05, 2023 1:12:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dlathyun/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dlathyun/ip.git (master)... +Sep 05, 2023 1:12:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ricketytoc/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ricketytoc/ip.git (master)... +Sep 05, 2023 1:12:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dlathyun/ip.git (master)... +Sep 05, 2023 1:12:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/dlathyun/ip.git (master)... +Sep 05, 2023 1:12:32 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/dlathyun/ip.git (master) completed! +Sep 05, 2023 1:12:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [141/480] Analyzing https://github.com/Angelyxx/ip.git (master)... +Sep 05, 2023 1:12:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Angelyxx/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Angelyxx/ip.git (master)... +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yongning0310/ip.git completed! +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tllshan/ip.git... -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LoMaply/ip.git completed! +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tllshan/ip.git to complete... -Sep 04, 2023 1:43:54 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lyuanww/ip.git completed! -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Gavino3o/ip.git... -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Cloud7050/ip.git completed! +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Gavino3o/ip.git to complete... -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yongning0310/ip.git completed! -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lyuanww/ip.git completed! +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/HollaG/ip.git... -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/HollaG/ip.git to complete... -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LoMaply/ip.git completed! -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/cheeggered/ip.git... -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/HollaG/ip.git to complete... +Sep 05, 2023 1:12:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/cheeggered/ip.git to complete... -Sep 04, 2023 1:43:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/raydenlim/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jingyu987/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jingyu987/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jingyu987/ip.git (master) completed! -Sep 04, 2023 1:43:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [150/480] Analyzing https://github.com/FerdiHS/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/raydenlim/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/raydenlim/ip.git (master) completed! -Sep 04, 2023 1:43:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [151/480] Analyzing https://github.com/jrchoo/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/FerdiHS/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/FerdiHS/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jrchoo/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jrchoo/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ricketytoc/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ricketytoc/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ricketytoc/ip.git (master) completed! +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [142/480] Analyzing https://github.com/jingting1412/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jingting1412/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jingting1412/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Angelyxx/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jingting1412/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Angelyxx/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Angelyxx/ip.git (master) completed! +Sep 05, 2023 1:12:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jingting1412/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [143/480] Analyzing https://github.com/SinhaVedant/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jingting1412/ip.git (master) completed! +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [144/480] Analyzing https://github.com/freddychenyouren2/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/SinhaVedant/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/SinhaVedant/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/freddychenyouren2/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/freddychenyouren2/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SinhaVedant/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SinhaVedant/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SinhaVedant/ip.git (master) completed! +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [145/480] Analyzing https://github.com/adhigop13/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tllshan/ip.git completed! -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:33 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/xenosf/ip.git... -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/xenosf/ip.git to complete... -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/adhigop13/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/adhigop13/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Gavino3o/ip.git completed! -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/TehOPanas/ip.git... -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/TehOPanas/ip.git to complete... -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/HollaG/ip.git completed! -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:33 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/TehOPanas/ip.git... +Sep 05, 2023 1:12:33 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/neyapraveen/ip.git... -Sep 04, 2023 1:43:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/FerdiHS/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/neyapraveen/ip.git to complete... -Sep 04, 2023 1:43:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jrchoo/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/FerdiHS/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/FerdiHS/ip.git (master) completed! -Sep 04, 2023 1:43:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [152/480] Analyzing https://github.com/RiyaMehta2211/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jrchoo/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jrchoo/ip.git (master) completed! -Sep 04, 2023 1:43:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [153/480] Analyzing https://github.com/leezhanpeng/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/RiyaMehta2211/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/RiyaMehta2211/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/leezhanpeng/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/leezhanpeng/ip.git (master)... -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:33 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/TehOPanas/ip.git to complete... +Sep 05, 2023 1:12:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/cheeggered/ip.git completed! -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:33 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/richiehx/ip.git... -Sep 04, 2023 1:43:55 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:33 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/neyapraveen/ip.git to complete... +Sep 05, 2023 1:12:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/richiehx/ip.git to complete... -Sep 04, 2023 1:43:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/RiyaMehta2211/ip.git (master)... -Sep 04, 2023 1:43:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/RiyaMehta2211/ip.git (master)... -Sep 04, 2023 1:43:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/RiyaMehta2211/ip.git (master) completed! -Sep 04, 2023 1:43:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [154/480] Analyzing https://github.com/darrentfy/ip.git (master)... -Sep 04, 2023 1:43:56 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/darrentfy/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/darrentfy/ip.git (master)... -Sep 04, 2023 1:43:56 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xenosf/ip.git completed! -Sep 04, 2023 1:43:56 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/freddychenyouren2/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/freddychenyouren2/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/freddychenyouren2/ip.git (master) completed! +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [146/480] Analyzing https://github.com/waseemingly/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/waseemingly/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/waseemingly/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/adhigop13/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/adhigop13/ip.git (master)... +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/adhigop13/ip.git (master) completed! +Sep 05, 2023 1:12:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [147/480] Analyzing https://github.com/jordankanghm/ip.git (master)... +Sep 05, 2023 1:12:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jordankanghm/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jordankanghm/ip.git (master)... +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/neyapraveen/ip.git completed! +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AlyssaPng/ip.git... -Sep 04, 2023 1:43:56 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AlyssaPng/ip.git to complete... -Sep 04, 2023 1:43:56 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/TehOPanas/ip.git completed! -Sep 04, 2023 1:43:56 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/leezhengjing/ip.git... -Sep 04, 2023 1:43:56 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/richiehx/ip.git completed! +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/leezhengjing/ip.git to complete... -Sep 04, 2023 1:43:56 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/neyapraveen/ip.git completed! -Sep 04, 2023 1:43:56 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xenosf/ip.git completed! +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/seantehds/ip.git... -Sep 04, 2023 1:43:56 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/seantehds/ip.git to complete... -Sep 04, 2023 1:43:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/leezhanpeng/ip.git (master)... -Sep 04, 2023 1:43:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/leezhanpeng/ip.git (master)... -Sep 04, 2023 1:43:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/leezhanpeng/ip.git (master) completed! -Sep 04, 2023 1:43:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [155/480] Analyzing https://github.com/redtailedfox/ip.git (master)... -Sep 04, 2023 1:43:56 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/richiehx/ip.git completed! -Sep 04, 2023 1:43:56 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/redtailedfox/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/redtailedfox/ip.git (master)... -Sep 04, 2023 1:43:56 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ceilingFan456/ip.git... -Sep 04, 2023 1:43:56 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ceilingFan456/ip.git to complete... -Sep 04, 2023 1:43:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/darrentfy/ip.git (master)... -Sep 04, 2023 1:43:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/darrentfy/ip.git (master)... -Sep 04, 2023 1:43:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/darrentfy/ip.git (master) completed! -Sep 04, 2023 1:43:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [156/480] Analyzing https://github.com/juzzztinsoong/ip.git (master)... -Sep 04, 2023 1:43:56 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/juzzztinsoong/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/juzzztinsoong/ip.git (master)... -Sep 04, 2023 1:43:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/redtailedfox/ip.git (master)... -Sep 04, 2023 1:43:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/redtailedfox/ip.git (master)... -Sep 04, 2023 1:43:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/redtailedfox/ip.git (master) completed! -Sep 04, 2023 1:43:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [157/480] Analyzing https://github.com/Fallman2/ip.git (master)... -Sep 04, 2023 1:43:56 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Fallman2/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Fallman2/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/seantehds/ip.git to complete... +Sep 05, 2023 1:12:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/waseemingly/ip.git (master)... +Sep 05, 2023 1:12:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/waseemingly/ip.git (master)... +Sep 05, 2023 1:12:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/waseemingly/ip.git (master) completed! +Sep 05, 2023 1:12:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [148/480] Analyzing https://github.com/raydenlim/ip.git (master)... +Sep 05, 2023 1:12:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/raydenlim/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/raydenlim/ip.git (master)... +Sep 05, 2023 1:12:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jordankanghm/ip.git (master)... +Sep 05, 2023 1:12:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jordankanghm/ip.git (master)... +Sep 05, 2023 1:12:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jordankanghm/ip.git (master) completed! +Sep 05, 2023 1:12:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [149/480] Analyzing https://github.com/FerdiHS/ip.git (master)... +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/leezhengjing/ip.git completed! -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/seantehds/ip.git completed! -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lihongguang00/ip.git... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AlyssaPng/ip.git completed! +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Singa-pirate/ip.git... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/FerdiHS/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/FerdiHS/ip.git (master)... +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lihongguang00/ip.git to complete... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Singa-pirate/ip.git to complete... -Sep 04, 2023 1:43:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Fallman2/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AlyssaPng/ip.git completed! -Sep 04, 2023 1:43:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Fallman2/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Fallman2/ip.git (master) completed! -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/songfangyl/ip.git... -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [158/480] Analyzing https://github.com/jingjie88/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ceilingFan456/ip.git completed! -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/songfangyl/ip.git to complete... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/seantehds/ip.git completed! +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/songfangyl/ip.git... +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/vansh284/ip.git... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:34 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/songfangyl/ip.git to complete... +Sep 05, 2023 1:12:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/vansh284/ip.git to complete... -Sep 04, 2023 1:43:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/juzzztinsoong/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jingjie88/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jingjie88/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/juzzztinsoong/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/juzzztinsoong/ip.git (master) completed! -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [159/480] Analyzing https://github.com/VN-Hao/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/VN-Hao/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/VN-Hao/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/VN-Hao/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/VN-Hao/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/VN-Hao/ip.git (master) completed! -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [160/480] Analyzing https://github.com/Heran9/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Heran9/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Heran9/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jingjie88/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jingjie88/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jingjie88/ip.git (master) completed! -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [161/480] Analyzing https://github.com/H1410101/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/H1410101/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/H1410101/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Heran9/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Singa-pirate/ip.git completed! -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/raydenlim/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/raydenlim/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/raydenlim/ip.git (master) completed! +Sep 05, 2023 1:12:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [150/480] Analyzing https://github.com/jingyu987/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jingyu987/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jingyu987/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/FerdiHS/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/FerdiHS/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/FerdiHS/ip.git (master) completed! +Sep 05, 2023 1:12:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [151/480] Analyzing https://github.com/jrchoo/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jrchoo/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jrchoo/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jingyu987/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/songfangyl/ip.git completed! +Sep 05, 2023 1:12:35 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/YeoBohShin/ip.git... -Sep 04, 2023 1:43:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Heran9/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Heran9/ip.git (master) completed! -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lihongguang00/ip.git completed! -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/YeoBohShin/ip.git to complete... -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [162/480] Analyzing https://github.com/kimshitong/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Singa-pirate/ip.git completed! +Sep 05, 2023 1:12:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jingyu987/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/shuenj/ip.git... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/songfangyl/ip.git completed! -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jingyu987/ip.git (master) completed! +Sep 05, 2023 1:12:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/YeoBohShin/ip.git to complete... +Sep 05, 2023 1:12:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [152/480] Analyzing https://github.com/RiyaMehta2211/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lihongguang00/ip.git completed! +Sep 05, 2023 1:12:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/vansh284/ip.git completed! +Sep 05, 2023 1:12:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/shuenj/ip.git to complete... -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kimshitong/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kimshitong/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:35 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lunaroddity/ip.git... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lunaroddity/ip.git to complete... -Sep 04, 2023 1:43:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/H1410101/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/vansh284/ip.git completed! -Sep 04, 2023 1:43:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/H1410101/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/H1410101/ip.git (master) completed! -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [163/480] Analyzing https://github.com/ivanleekk/ip.git (master)... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:35 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/andrechuakj/ip.git... -Sep 04, 2023 1:43:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lunaroddity/ip.git to complete... +Sep 05, 2023 1:12:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/andrechuakj/ip.git to complete... -Sep 04, 2023 1:43:57 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ivanleekk/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ivanleekk/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ivanleekk/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ivanleekk/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ivanleekk/ip.git (master) completed! -Sep 04, 2023 1:43:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [164/480] Analyzing https://github.com/lamchenghou/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kimshitong/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lamchenghou/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lamchenghou/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kimshitong/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kimshitong/ip.git (master) completed! -Sep 04, 2023 1:43:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [165/480] Analyzing https://github.com/tayruxin/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tayruxin/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tayruxin/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/RiyaMehta2211/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/RiyaMehta2211/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jrchoo/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jrchoo/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jrchoo/ip.git (master) completed! +Sep 05, 2023 1:12:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [153/480] Analyzing https://github.com/darrentfy/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/darrentfy/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/darrentfy/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/RiyaMehta2211/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/RiyaMehta2211/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/RiyaMehta2211/ip.git (master) completed! +Sep 05, 2023 1:12:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [154/480] Analyzing https://github.com/leezhanpeng/ip.git (master)... +Sep 05, 2023 1:12:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/leezhanpeng/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/leezhanpeng/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/darrentfy/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/darrentfy/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/darrentfy/ip.git (master) completed! +Sep 05, 2023 1:12:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [155/480] Analyzing https://github.com/juzzztinsoong/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/juzzztinsoong/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/juzzztinsoong/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/YeoBohShin/ip.git completed! +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/andrechuakj/ip.git completed! -Sep 04, 2023 1:43:58 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/WeeMingQing/ip.git... -Sep 04, 2023 1:43:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/WeeMingQing/ip.git to complete... -Sep 04, 2023 1:43:58 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/shuenj/ip.git completed! -Sep 04, 2023 1:43:58 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/YeoBohShin/ip.git completed! -Sep 04, 2023 1:43:58 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/aliciamichellew/ip.git... -Sep 04, 2023 1:43:58 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/samuelmui8/ip.git... -Sep 04, 2023 1:43:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lunaroddity/ip.git completed! -Sep 04, 2023 1:43:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/aliciamichellew/ip.git to complete... -Sep 04, 2023 1:43:58 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/samuelmui8/ip.git to complete... -Sep 04, 2023 1:43:58 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/shuenj/ip.git completed! +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/samuelmui8/ip.git... +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/antonTan96/ip.git... -Sep 04, 2023 1:43:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/samuelmui8/ip.git to complete... +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/antonTan96/ip.git to complete... -Sep 04, 2023 1:43:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tayruxin/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lamchenghou/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tayruxin/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tayruxin/ip.git (master) completed! -Sep 04, 2023 1:43:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [166/480] Analyzing https://github.com/raynertjx/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lamchenghou/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/raynertjx/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/raynertjx/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lamchenghou/ip.git (master) completed! -Sep 04, 2023 1:43:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [167/480] Analyzing https://github.com/larrywang0701/ip.git (master)... -Sep 04, 2023 1:43:58 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/larrywang0701/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/larrywang0701/ip.git (master)... -Sep 04, 2023 1:43:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/raynertjx/ip.git (master)... -Sep 04, 2023 1:43:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/larrywang0701/ip.git (master)... -Sep 04, 2023 1:43:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/larrywang0701/ip.git (master)... -Sep 04, 2023 1:43:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/raynertjx/ip.git (master)... -Sep 04, 2023 1:43:59 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/raynertjx/ip.git (master) completed! -Sep 04, 2023 1:43:59 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/larrywang0701/ip.git (master) completed! -Sep 04, 2023 1:43:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [168/480] Analyzing https://github.com/zhengyup/ip.git (master)... -Sep 04, 2023 1:43:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [169/480] Analyzing https://github.com/Carlintyj/ip.git (master)... -Sep 04, 2023 1:43:59 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/WeeMingQing/ip.git completed! -Sep 04, 2023 1:43:59 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/owenyeo/ip.git... -Sep 04, 2023 1:43:59 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Carlintyj/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Carlintyj/ip.git (master)... -Sep 04, 2023 1:43:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/leezhanpeng/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/leezhanpeng/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/leezhanpeng/ip.git (master) completed! +Sep 05, 2023 1:12:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [156/480] Analyzing https://github.com/redtailedfox/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/redtailedfox/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/redtailedfox/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/juzzztinsoong/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/juzzztinsoong/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/redtailedfox/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/juzzztinsoong/ip.git (master) completed! +Sep 05, 2023 1:12:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [157/480] Analyzing https://github.com/Fallman2/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/redtailedfox/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/redtailedfox/ip.git (master) completed! +Sep 05, 2023 1:12:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [158/480] Analyzing https://github.com/VN-Hao/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Fallman2/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Fallman2/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/VN-Hao/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/VN-Hao/ip.git (master)... +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/aliciamichellew/ip.git completed! -Sep 04, 2023 1:43:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/owenyeo/ip.git... +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/WeeMingQing/ip.git completed! +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/owenyeo/ip.git to complete... -Sep 04, 2023 1:43:59 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/samuelmui8/ip.git completed! -Sep 04, 2023 1:43:59 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zhengyup/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zhengyup/ip.git (master)... -Sep 04, 2023 1:43:59 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/gongg21/ip.git... -Sep 04, 2023 1:43:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/gongg21/ip.git to complete... +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/samuelmui8/ip.git completed! +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/antonTan96/ip.git completed! -Sep 04, 2023 1:43:59 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nabonitasen/ip.git... -Sep 04, 2023 1:43:59 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/gongg21/ip.git to complete... -Sep 04, 2023 1:43:59 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nabonitasen/ip.git to complete... -Sep 04, 2023 1:43:59 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/erohsikivar/ip.git... -Sep 04, 2023 1:43:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nabonitasen/ip.git to complete... +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/erohsikivar/ip.git to complete... -Sep 04, 2023 1:43:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zhengyup/ip.git (master)... -Sep 04, 2023 1:43:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Carlintyj/ip.git (master)... -Sep 04, 2023 1:43:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zhengyup/ip.git (master)... -Sep 04, 2023 1:43:59 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zhengyup/ip.git (master) completed! -Sep 04, 2023 1:43:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [170/480] Analyzing https://github.com/wxwern/ip.git (master)... -Sep 04, 2023 1:43:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Carlintyj/ip.git (master)... -Sep 04, 2023 1:43:59 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Carlintyj/ip.git (master) completed! -Sep 04, 2023 1:43:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [171/480] Analyzing https://github.com/aslam341/ip.git (master)... -Sep 04, 2023 1:43:59 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wxwern/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:43:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wxwern/ip.git (master)... -Sep 04, 2023 1:44:00 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/aslam341/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/aslam341/ip.git (master)... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/VN-Hao/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/VN-Hao/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/VN-Hao/ip.git (master) completed! +Sep 05, 2023 1:12:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [159/480] Analyzing https://github.com/Heran9/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Heran9/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Heran9/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Fallman2/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Fallman2/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Fallman2/ip.git (master) completed! +Sep 05, 2023 1:12:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [160/480] Analyzing https://github.com/jingjie88/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jingjie88/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jingjie88/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Heran9/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Heran9/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Heran9/ip.git (master) completed! +Sep 05, 2023 1:12:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [161/480] Analyzing https://github.com/H1410101/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/H1410101/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/H1410101/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/owenyeo/ip.git completed! -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/gongg21/ip.git completed! +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/pzl111/ip.git... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/pzl111/ip.git to complete... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/gongg21/ip.git completed! -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nabonitasen/ip.git completed! -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/H1410101/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/teozern1/ip.git... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Elijah5399/ip.git... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/teozern1/ip.git to complete... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/H1410101/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/erohsikivar/ip.git completed! -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Elijah5399/ip.git to complete... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/H1410101/ip.git (master) completed! +Sep 05, 2023 1:12:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [162/480] Analyzing https://github.com/kimshitong/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nabonitasen/ip.git completed! +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Elijah5399/ip.git... +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nicleongyj/ip.git... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nicleongyj/ip.git to complete... -Sep 04, 2023 1:44:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/aslam341/ip.git (master)... -Sep 04, 2023 1:44:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/aslam341/ip.git (master)... -Sep 04, 2023 1:44:00 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/aslam341/ip.git (master) completed! -Sep 04, 2023 1:44:00 PM reposense.report.ReportGenerator analyzeRepos -INFO: [172/480] Analyzing https://github.com/nubnubyas/ip.git (master)... -Sep 04, 2023 1:44:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wxwern/ip.git (master)... -Sep 04, 2023 1:44:00 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nubnubyas/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nubnubyas/ip.git (master)... -Sep 04, 2023 1:44:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wxwern/ip.git (master)... -Sep 04, 2023 1:44:00 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wxwern/ip.git (master) completed! -Sep 04, 2023 1:44:00 PM reposense.report.ReportGenerator analyzeRepos -INFO: [173/480] Analyzing https://github.com/LWZ19/ip.git (master)... -Sep 04, 2023 1:44:00 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LWZ19/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LWZ19/ip.git (master)... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Elijah5399/ip.git to complete... +Sep 05, 2023 1:12:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kimshitong/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kimshitong/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jingjie88/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jingjie88/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jingjie88/ip.git (master) completed! +Sep 05, 2023 1:12:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [163/480] Analyzing https://github.com/ivanleekk/ip.git (master)... +Sep 05, 2023 1:12:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ivanleekk/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ivanleekk/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ivanleekk/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ivanleekk/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ivanleekk/ip.git (master) completed! +Sep 05, 2023 1:12:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kimshitong/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [164/480] Analyzing https://github.com/lamchenghou/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kimshitong/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lamchenghou/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lamchenghou/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kimshitong/ip.git (master) completed! +Sep 05, 2023 1:12:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [165/480] Analyzing https://github.com/tayruxin/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tayruxin/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tayruxin/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/pzl111/ip.git completed! -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/teozern1/ip.git completed! -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/WinSheng1/ip.git... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/WinSheng1/ip.git to complete... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Elijah5399/ip.git completed! -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ryamgoh/ip.git... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:38 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Elijah5399/ip.git completed! +Sep 05, 2023 1:12:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/nicleongyj/ip.git completed! -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yucongkoo/ip.git... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ryamgoh/ip.git to complete... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yucongkoo/ip.git to complete... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:38 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yucongkoo/ip.git... +Sep 05, 2023 1:12:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Chen-Kuei/ip.git... -Sep 04, 2023 1:44:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nubnubyas/ip.git (master)... -Sep 04, 2023 1:44:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Chen-Kuei/ip.git to complete... -Sep 04, 2023 1:44:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nubnubyas/ip.git (master)... -Sep 04, 2023 1:44:01 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nubnubyas/ip.git (master) completed! -Sep 04, 2023 1:44:01 PM reposense.report.ReportGenerator analyzeRepos -INFO: [174/480] Analyzing https://github.com/timleow/ip.git (master)... -Sep 04, 2023 1:44:01 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/timleow/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/timleow/ip.git (master)... -Sep 04, 2023 1:44:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LWZ19/ip.git (master)... -Sep 04, 2023 1:44:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LWZ19/ip.git (master)... -Sep 04, 2023 1:44:01 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LWZ19/ip.git (master) completed! -Sep 04, 2023 1:44:01 PM reposense.report.ReportGenerator analyzeRepos -INFO: [175/480] Analyzing https://github.com/rayshawntan/ip.git (master)... -Sep 04, 2023 1:44:01 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/rayshawntan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/rayshawntan/ip.git (master)... -Sep 04, 2023 1:44:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/timleow/ip.git (master)... -Sep 04, 2023 1:44:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/timleow/ip.git (master)... -Sep 04, 2023 1:44:01 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/timleow/ip.git (master) completed! -Sep 04, 2023 1:44:01 PM reposense.report.ReportGenerator analyzeRepos -INFO: [176/480] Analyzing https://github.com/aexolate/ip.git (master)... -Sep 04, 2023 1:44:01 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/aexolate/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/aexolate/ip.git (master)... -Sep 04, 2023 1:44:01 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/WinSheng1/ip.git completed! -Sep 04, 2023 1:44:01 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:38 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yucongkoo/ip.git to complete... +Sep 05, 2023 1:12:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tayruxin/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tayruxin/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tayruxin/ip.git (master) completed! +Sep 05, 2023 1:12:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [166/480] Analyzing https://github.com/raynertjx/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/raynertjx/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/raynertjx/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lamchenghou/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lamchenghou/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lamchenghou/ip.git (master) completed! +Sep 05, 2023 1:12:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [167/480] Analyzing https://github.com/zhengyup/ip.git (master)... +Sep 05, 2023 1:12:38 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zhengyup/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zhengyup/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ryamgoh/ip.git completed! +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/conradsoon/ip.git... -Sep 04, 2023 1:44:01 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/conradsoon/ip.git to complete... -Sep 04, 2023 1:44:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Chen-Kuei/ip.git completed! -Sep 04, 2023 1:44:01 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/conradsoon/ip.git to complete... +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/GSgiansen/ip.git... -Sep 04, 2023 1:44:01 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yucongkoo/ip.git completed! -Sep 04, 2023 1:44:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/GSgiansen/ip.git to complete... -Sep 04, 2023 1:44:01 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/WinSheng1/ip.git completed! +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/et-irl/ip.git... -Sep 04, 2023 1:44:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yucongkoo/ip.git completed! +Sep 05, 2023 1:12:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/raynertjx/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/et-irl/ip.git to complete... -Sep 04, 2023 1:44:01 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ryamgoh/ip.git completed! -Sep 04, 2023 1:44:01 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/marioalvaro/ip.git... -Sep 04, 2023 1:44:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/marioalvaro/ip.git to complete... -Sep 04, 2023 1:44:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/rayshawntan/ip.git (master)... -Sep 04, 2023 1:44:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/rayshawntan/ip.git (master)... -Sep 04, 2023 1:44:01 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/rayshawntan/ip.git (master) completed! -Sep 04, 2023 1:44:01 PM reposense.report.ReportGenerator analyzeRepos -INFO: [177/480] Analyzing https://github.com/Sheeepen/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/aexolate/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Sheeepen/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Sheeepen/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/aexolate/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/aexolate/ip.git (master) completed! -Sep 04, 2023 1:44:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [178/480] Analyzing https://github.com/shuyangk/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/shuyangk/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/shuyangk/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/conradsoon/ip.git completed! -Sep 04, 2023 1:44:02 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Seonlo99/ip.git... -Sep 04, 2023 1:44:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Seonlo99/ip.git to complete... -Sep 04, 2023 1:44:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/shuyangk/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/shuyangk/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/shuyangk/ip.git (master) completed! -Sep 04, 2023 1:44:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [179/480] Analyzing https://github.com/ncmathan/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Sheeepen/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ncmathan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ncmathan/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Sheeepen/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Sheeepen/ip.git (master) completed! -Sep 04, 2023 1:44:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [180/480] Analyzing https://github.com/iyioon/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/raynertjx/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/raynertjx/ip.git (master) completed! +Sep 05, 2023 1:12:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [168/480] Analyzing https://github.com/larrywang0701/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/larrywang0701/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/larrywang0701/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zhengyup/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zhengyup/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zhengyup/ip.git (master) completed! +Sep 05, 2023 1:12:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [169/480] Analyzing https://github.com/wxwern/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wxwern/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wxwern/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/larrywang0701/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/larrywang0701/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/larrywang0701/ip.git (master) completed! +Sep 05, 2023 1:12:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [170/480] Analyzing https://github.com/Carlintyj/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Carlintyj/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Carlintyj/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/GSgiansen/ip.git completed! -Sep 04, 2023 1:44:02 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Seonlo99/ip.git... +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Seonlo99/ip.git to complete... +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/marioalvaro/ip.git completed! +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/joel-foo/ip.git... -Sep 04, 2023 1:44:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/joel-foo/ip.git to complete... -Sep 04, 2023 1:44:02 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/iyioon/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/iyioon/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/et-irl/ip.git completed! -Sep 04, 2023 1:44:02 PM reposense.report.RepoCloner spawnCloneProcess +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/conradsoon/ip.git completed! +Sep 05, 2023 1:12:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wxwern/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tim-pipi/ip.git... -Sep 04, 2023 1:44:02 PM reposense.report.RepoCloner waitForCloneProcess +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/joel-foo/ip.git to complete... +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/marcellaantania/ip.git... +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tim-pipi/ip.git to complete... -Sep 04, 2023 1:44:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/marcellaantania/ip.git to complete... +Sep 05, 2023 1:12:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wxwern/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wxwern/ip.git (master) completed! +Sep 05, 2023 1:12:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [171/480] Analyzing https://github.com/nubnubyas/ip.git (master)... +Sep 05, 2023 1:12:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nubnubyas/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nubnubyas/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nubnubyas/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nubnubyas/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nubnubyas/ip.git (master) completed! +Sep 05, 2023 1:12:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [172/480] Analyzing https://github.com/aslam341/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Carlintyj/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Carlintyj/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/aslam341/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/aslam341/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Carlintyj/ip.git (master) completed! +Sep 05, 2023 1:12:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [173/480] Analyzing https://github.com/timleow/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/timleow/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/timleow/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Seonlo99/ip.git completed! +Sep 05, 2023 1:12:40 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/brendanneojw/ip.git... +Sep 05, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/brendanneojw/ip.git to complete... +Sep 05, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tim-pipi/ip.git completed! +Sep 05, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/joel-foo/ip.git completed! +Sep 05, 2023 1:12:40 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/li-rongzhi/ip.git... +Sep 05, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/marcellaantania/ip.git completed! +Sep 05, 2023 1:12:40 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/KamiliArsyad/ip.git... +Sep 05, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/li-rongzhi/ip.git to complete... +Sep 05, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/KamiliArsyad/ip.git to complete... +Sep 05, 2023 1:12:40 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/seraphimstreets/ip.git... +Sep 05, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/seraphimstreets/ip.git to complete... +Sep 05, 2023 1:12:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/aslam341/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/aslam341/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/aslam341/ip.git (master) completed! +Sep 05, 2023 1:12:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [174/480] Analyzing https://github.com/LWZ19/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LWZ19/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LWZ19/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/timleow/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/timleow/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/timleow/ip.git (master) completed! +Sep 05, 2023 1:12:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [175/480] Analyzing https://github.com/rayshawntan/ip.git (master)... +Sep 05, 2023 1:12:40 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/rayshawntan/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/rayshawntan/ip.git (master)... +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/brendanneojw/ip.git completed! +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/trgao/ip.git... +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/trgao/ip.git to complete... +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/KamiliArsyad/ip.git completed! +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lilozz2/ip.git... +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/li-rongzhi/ip.git completed! +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/seraphimstreets/ip.git completed! +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lilozz2/ip.git to complete... +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jean-cq/ip.git... +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jedkohjk/ip.git... +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jean-cq/ip.git to complete... +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jedkohjk/ip.git to complete... +Sep 05, 2023 1:12:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/rayshawntan/ip.git (master)... +Sep 05, 2023 1:12:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/rayshawntan/ip.git (master)... +Sep 05, 2023 1:12:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LWZ19/ip.git (master)... +Sep 05, 2023 1:12:41 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/rayshawntan/ip.git (master) completed! +Sep 05, 2023 1:12:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [176/480] Analyzing https://github.com/aexolate/ip.git (master)... +Sep 05, 2023 1:12:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LWZ19/ip.git (master)... +Sep 05, 2023 1:12:41 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LWZ19/ip.git (master) completed! +Sep 05, 2023 1:12:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [177/480] Analyzing https://github.com/Sheeepen/ip.git (master)... +Sep 05, 2023 1:12:41 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/aexolate/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/aexolate/ip.git (master)... +Sep 05, 2023 1:12:41 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Sheeepen/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Sheeepen/ip.git (master)... +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/trgao/ip.git completed! +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yytan25/ip.git... +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yytan25/ip.git to complete... +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jean-cq/ip.git completed! +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lilozz2/ip.git completed! +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ryantzr1/ip.git... +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/maypfv/ip.git... +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/maypfv/ip.git to complete... +Sep 05, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ryantzr1/ip.git to complete... +Sep 05, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jedkohjk/ip.git completed! +Sep 05, 2023 1:12:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/TohLiYuan/ip.git... +Sep 05, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/TohLiYuan/ip.git to complete... +Sep 05, 2023 1:12:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Sheeepen/ip.git (master)... +Sep 05, 2023 1:12:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/aexolate/ip.git (master)... +Sep 05, 2023 1:12:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Sheeepen/ip.git (master)... +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Sheeepen/ip.git (master) completed! +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [178/480] Analyzing https://github.com/ncmathan/ip.git (master)... +Sep 05, 2023 1:12:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/aexolate/ip.git (master)... +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/aexolate/ip.git (master) completed! +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [179/480] Analyzing https://github.com/shuyangk/ip.git (master)... +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ncmathan/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ncmathan/ip.git (master)... +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/shuyangk/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/shuyangk/ip.git (master)... +Sep 05, 2023 1:12:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ncmathan/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/shuyangk/ip.git (master)... +Sep 05, 2023 1:12:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ncmathan/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ncmathan/ip.git (master) completed! -Sep 04, 2023 1:44:02 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [180/480] Analyzing https://github.com/iyioon/ip.git (master)... +Sep 05, 2023 1:12:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/shuyangk/ip.git (master)... +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/shuyangk/ip.git (master) completed! +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepos INFO: [181/480] Analyzing https://github.com/kiwibang/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/marioalvaro/ip.git completed! -Sep 04, 2023 1:44:02 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/marcellaantania/ip.git... -Sep 04, 2023 1:44:02 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/iyioon/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/iyioon/ip.git (master)... +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kiwibang/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kiwibang/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/marcellaantania/ip.git to complete... -Sep 04, 2023 1:44:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Seonlo99/ip.git completed! -Sep 04, 2023 1:44:02 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/brendanneojw/ip.git... -Sep 04, 2023 1:44:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/brendanneojw/ip.git to complete... -Sep 04, 2023 1:44:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yytan25/ip.git completed! +Sep 05, 2023 1:12:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/JizhuoChen/ip.git... +Sep 05, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/JizhuoChen/ip.git to complete... +Sep 05, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/maypfv/ip.git completed! +Sep 05, 2023 1:12:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ChongWeiJie29/ip.git... +Sep 05, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ChongWeiJie29/ip.git to complete... +Sep 05, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/TohLiYuan/ip.git completed! +Sep 05, 2023 1:12:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Goh-Li-Ting/ip.git... +Sep 05, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Goh-Li-Ting/ip.git to complete... +Sep 05, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ryantzr1/ip.git completed! +Sep 05, 2023 1:12:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kristayeo/ip.git... +Sep 05, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kristayeo/ip.git to complete... +Sep 05, 2023 1:12:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/iyioon/ip.git (master)... -Sep 04, 2023 1:44:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/iyioon/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/iyioon/ip.git (master) completed! -Sep 04, 2023 1:44:03 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepos INFO: [182/480] Analyzing https://github.com/mingyu-wan/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kiwibang/ip.git (master)... +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/mingyu-wan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/mingyu-wan/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/joel-foo/ip.git completed! -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/li-rongzhi/ip.git... -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/li-rongzhi/ip.git to complete... -Sep 04, 2023 1:44:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kiwibang/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kiwibang/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tim-pipi/ip.git completed! -Sep 04, 2023 1:44:03 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kiwibang/ip.git (master) completed! -Sep 04, 2023 1:44:03 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepos INFO: [183/480] Analyzing https://github.com/LuoZYi/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/KamiliArsyad/ip.git... -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/KamiliArsyad/ip.git to complete... -Sep 04, 2023 1:44:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mingyu-wan/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:43 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/LuoZYi/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/LuoZYi/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/mingyu-wan/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mingyu-wan/ip.git (master) completed! -Sep 04, 2023 1:44:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [184/480] Analyzing https://github.com/asdfghjkxd/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/asdfghjkxd/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/asdfghjkxd/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/marcellaantania/ip.git completed! -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/seraphimstreets/ip.git... -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/brendanneojw/ip.git completed! -Sep 04, 2023 1:44:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LuoZYi/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/trgao/ip.git... -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/seraphimstreets/ip.git to complete... -Sep 04, 2023 1:44:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JizhuoChen/ip.git completed! +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/derekjxtan/ip.git... +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/derekjxtan/ip.git to complete... +Sep 05, 2023 1:12:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LuoZYi/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/trgao/ip.git to complete... -Sep 04, 2023 1:44:03 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LuoZYi/ip.git (master) completed! -Sep 04, 2023 1:44:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [185/480] Analyzing https://github.com/sushiyade/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:43 AM reposense.report.ReportGenerator analyzeRepos +INFO: [184/480] Analyzing https://github.com/sushiyade/ip.git (master)... +Sep 05, 2023 1:12:43 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sushiyade/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sushiyade/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Goh-Li-Ting/ip.git completed! +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ChongWeiJie29/ip.git completed! +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/shashahchk/ip.git... +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Chandan8186/ip.git... +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Chandan8186/ip.git to complete... +Sep 05, 2023 1:12:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mingyu-wan/ip.git (master)... +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/shashahchk/ip.git to complete... +Sep 05, 2023 1:12:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/mingyu-wan/ip.git (master)... +Sep 05, 2023 1:12:43 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mingyu-wan/ip.git (master) completed! +Sep 05, 2023 1:12:43 AM reposense.report.ReportGenerator analyzeRepos +INFO: [185/480] Analyzing https://github.com/asdfghjkxd/ip.git (master)... +Sep 05, 2023 1:12:43 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/asdfghjkxd/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/asdfghjkxd/ip.git (master)... +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kristayeo/ip.git completed! +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/alyssaongyx/ip.git... +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/alyssaongyx/ip.git to complete... +Sep 05, 2023 1:12:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sushiyade/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sushiyade/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sushiyade/ip.git (master) completed! -Sep 04, 2023 1:44:03 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:43 AM reposense.report.ReportGenerator analyzeRepos INFO: [186/480] Analyzing https://github.com/Nid21cs/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:43 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Nid21cs/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Nid21cs/ip.git (master)... -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/li-rongzhi/ip.git completed! -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lilozz2/ip.git... -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lilozz2/ip.git to complete... -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/KamiliArsyad/ip.git completed! -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jean-cq/ip.git... -Sep 04, 2023 1:44:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jean-cq/ip.git to complete... -Sep 04, 2023 1:44:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Nid21cs/ip.git (master)... -Sep 04, 2023 1:44:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/derekjxtan/ip.git completed! +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AndrewJanong/ip.git... +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AndrewJanong/ip.git to complete... +Sep 05, 2023 1:12:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Nid21cs/ip.git (master)... -Sep 04, 2023 1:44:04 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Nid21cs/ip.git (master) completed! -Sep 04, 2023 1:44:04 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:43 AM reposense.report.ReportGenerator analyzeRepos INFO: [187/480] Analyzing https://github.com/McNaBry/ip.git (master)... -Sep 04, 2023 1:44:04 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Chandan8186/ip.git completed! +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Kailash201/ip.git... +Sep 05, 2023 1:12:43 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/McNaBry/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/McNaBry/ip.git (master)... -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/trgao/ip.git completed! -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/seraphimstreets/ip.git completed! -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jedkohjk/ip.git... -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jedkohjk/ip.git to complete... -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yytan25/ip.git... -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yytan25/ip.git to complete... -Sep 04, 2023 1:44:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/shashahchk/ip.git completed! +Sep 05, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Kailash201/ip.git to complete... +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/laurenlim2112/ip.git... +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/laurenlim2112/ip.git to complete... +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/alyssaongyx/ip.git completed! +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lambraydon/ip.git... +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lambraydon/ip.git to complete... +Sep 05, 2023 1:12:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/asdfghjkxd/ip.git (master)... -Sep 04, 2023 1:44:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/asdfghjkxd/ip.git (master)... -Sep 04, 2023 1:44:04 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/asdfghjkxd/ip.git (master) completed! -Sep 04, 2023 1:44:04 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:44 AM reposense.report.ReportGenerator analyzeRepos INFO: [188/480] Analyzing https://github.com/miljyy/ip.git (master)... -Sep 04, 2023 1:44:04 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/miljyy/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/miljyy/ip.git (master)... -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lilozz2/ip.git completed! -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ryantzr1/ip.git... -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ryantzr1/ip.git to complete... -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jean-cq/ip.git completed! -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/maypfv/ip.git... -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/maypfv/ip.git to complete... -Sep 04, 2023 1:44:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/McNaBry/ip.git (master)... +Sep 05, 2023 1:12:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/miljyy/ip.git (master)... -Sep 04, 2023 1:44:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/miljyy/ip.git (master)... -Sep 04, 2023 1:44:04 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/miljyy/ip.git (master) completed! -Sep 04, 2023 1:44:04 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:44 AM reposense.report.ReportGenerator analyzeRepos INFO: [189/480] Analyzing https://github.com/ncduy0303/ip.git (master)... -Sep 04, 2023 1:44:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/McNaBry/ip.git (master)... -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jedkohjk/ip.git completed! -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yytan25/ip.git completed! -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/TohLiYuan/ip.git... -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/TohLiYuan/ip.git to complete... -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/JizhuoChen/ip.git... -Sep 04, 2023 1:44:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/JizhuoChen/ip.git to complete... -Sep 04, 2023 1:44:04 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ncduy0303/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ncduy0303/ip.git (master)... -Sep 04, 2023 1:44:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/McNaBry/ip.git (master)... -Sep 04, 2023 1:44:04 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/McNaBry/ip.git (master) completed! -Sep 04, 2023 1:44:04 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:44 AM reposense.report.ReportGenerator analyzeRepos INFO: [190/480] Analyzing https://github.com/eyelessrhyme7/ip.git (master)... -Sep 04, 2023 1:44:04 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:44 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ncduy0303/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ncduy0303/ip.git (master)... +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AndrewJanong/ip.git completed! +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Kailash201/ip.git completed! +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sk2001git/ip.git... +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/chonguschonguschongus/ip.git... +Sep 05, 2023 1:12:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/eyelessrhyme7/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/eyelessrhyme7/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sk2001git/ip.git to complete... +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/chonguschonguschongus/ip.git to complete... +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/laurenlim2112/ip.git completed! +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lshaoqin/ip.git... +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lambraydon/ip.git completed! +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lshaoqin/ip.git to complete... +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/peasantbird/ip.git... +Sep 05, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/peasantbird/ip.git to complete... +Sep 05, 2023 1:12:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/eyelessrhyme7/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ncduy0303/ip.git (master)... +Sep 05, 2023 1:12:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/eyelessrhyme7/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:45 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/eyelessrhyme7/ip.git (master) completed! -Sep 04, 2023 1:44:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [191/480] Analyzing https://github.com/ruishanteo/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ruishanteo/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ruishanteo/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ncduy0303/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ncduy0303/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [191/480] Analyzing https://github.com/ruishanteo/ip.git (master)... +Sep 05, 2023 1:12:45 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ncduy0303/ip.git (master) completed! -Sep 04, 2023 1:44:05 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:45 AM reposense.report.ReportGenerator analyzeRepos INFO: [192/480] Analyzing https://github.com/m1oojv/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:45 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/m1oojv/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/m1oojv/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ryantzr1/ip.git completed! -Sep 04, 2023 1:44:05 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ChongWeiJie29/ip.git... -Sep 04, 2023 1:44:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ChongWeiJie29/ip.git to complete... -Sep 04, 2023 1:44:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/maypfv/ip.git completed! -Sep 04, 2023 1:44:05 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Goh-Li-Ting/ip.git... -Sep 04, 2023 1:44:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Goh-Li-Ting/ip.git to complete... -Sep 04, 2023 1:44:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/TohLiYuan/ip.git completed! -Sep 04, 2023 1:44:05 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kristayeo/ip.git... -Sep 04, 2023 1:44:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kristayeo/ip.git to complete... -Sep 04, 2023 1:44:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JizhuoChen/ip.git completed! -Sep 04, 2023 1:44:05 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/derekjxtan/ip.git... -Sep 04, 2023 1:44:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/derekjxtan/ip.git to complete... -Sep 04, 2023 1:44:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ruishanteo/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ruishanteo/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ruishanteo/ip.git (master) completed! -Sep 04, 2023 1:44:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [193/480] Analyzing https://github.com/Nixx162/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Nixx162/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Nixx162/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/m1oojv/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ruishanteo/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ruishanteo/ip.git (master)... +Sep 05, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/peasantbird/ip.git completed! +Sep 05, 2023 1:12:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/WangCheng0116/ip.git... +Sep 05, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sk2001git/ip.git completed! +Sep 05, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lshaoqin/ip.git completed! +Sep 05, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/chonguschonguschongus/ip.git completed! +Sep 05, 2023 1:12:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/teozhengyang/ip.git... +Sep 05, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/WangCheng0116/ip.git to complete... +Sep 05, 2023 1:12:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/chewjh1234/ip.git... +Sep 05, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/chewjh1234/ip.git to complete... +Sep 05, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/teozhengyang/ip.git to complete... +Sep 05, 2023 1:12:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/elaineshijie/ip.git... +Sep 05, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/elaineshijie/ip.git to complete... +Sep 05, 2023 1:12:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/m1oojv/ip.git (master)... +Sep 05, 2023 1:12:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ruishanteo/ip.git (master)... +Sep 05, 2023 1:12:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/m1oojv/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:45 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/m1oojv/ip.git (master) completed! -Sep 04, 2023 1:44:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [194/480] Analyzing https://github.com/Gabriel4357/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Gabriel4357/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Gabriel4357/ip.git (master)... -Sep 04, 2023 1:44:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ChongWeiJie29/ip.git completed! -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/shashahchk/ip.git... -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/shashahchk/ip.git to complete... -Sep 04, 2023 1:44:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ruishanteo/ip.git (master)... +Sep 05, 2023 1:12:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [193/480] Analyzing https://github.com/Nixx162/ip.git (master)... +Sep 05, 2023 1:12:45 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ruishanteo/ip.git (master) completed! +Sep 05, 2023 1:12:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [194/480] Analyzing https://github.com/mfjkri/ip.git (master)... +Sep 05, 2023 1:12:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Nixx162/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Nixx162/ip.git (master)... +Sep 05, 2023 1:12:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/mfjkri/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/mfjkri/ip.git (master)... +Sep 05, 2023 1:12:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Nixx162/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/chewjh1234/ip.git completed! +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lynnlow175/ip.git... +Sep 05, 2023 1:12:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Nixx162/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:46 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Nixx162/ip.git (master) completed! -Sep 04, 2023 1:44:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [195/480] Analyzing https://github.com/mfjkri/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Goh-Li-Ting/ip.git completed! -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Chandan8186/ip.git... -Sep 04, 2023 1:44:06 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/mfjkri/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/mfjkri/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kristayeo/ip.git completed! -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Chandan8186/ip.git to complete... -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/alyssaongyx/ip.git... -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/alyssaongyx/ip.git to complete... -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/derekjxtan/ip.git completed! -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AndrewJanong/ip.git... -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AndrewJanong/ip.git to complete... -Sep 04, 2023 1:44:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Gabriel4357/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Gabriel4357/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Gabriel4357/ip.git (master) completed! -Sep 04, 2023 1:44:06 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [195/480] Analyzing https://github.com/Gabriel4357/ip.git (master)... +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lynnlow175/ip.git to complete... +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/teozhengyang/ip.git completed! +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/elaineshijie/ip.git completed! +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lordidiot/ip.git... +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/WangCheng0116/ip.git completed! +Sep 05, 2023 1:12:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Gabriel4357/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Gabriel4357/ip.git (master)... +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/chew01/ip.git... +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lordidiot/ip.git to complete... +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/RSXIX/ip.git... +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/chew01/ip.git to complete... +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/RSXIX/ip.git to complete... +Sep 05, 2023 1:12:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mfjkri/ip.git (master)... +Sep 05, 2023 1:12:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/mfjkri/ip.git (master)... +Sep 05, 2023 1:12:46 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mfjkri/ip.git (master) completed! +Sep 05, 2023 1:12:46 AM reposense.report.ReportGenerator analyzeRepos INFO: [196/480] Analyzing https://github.com/junhonglow/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:46 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/junhonglow/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/junhonglow/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Gabriel4357/ip.git (master)... +Sep 05, 2023 1:12:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Gabriel4357/ip.git (master)... +Sep 05, 2023 1:12:46 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Gabriel4357/ip.git (master) completed! +Sep 05, 2023 1:12:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [197/480] Analyzing https://github.com/Badatprogrammiing/ip.git (master)... +Sep 05, 2023 1:12:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Badatprogrammiing/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Badatprogrammiing/ip.git (master)... +Sep 05, 2023 1:12:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/junhonglow/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mfjkri/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/shashahchk/ip.git completed! -Sep 04, 2023 1:44:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lynnlow175/ip.git completed! +Sep 05, 2023 1:12:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/junhonglow/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:46 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/junhonglow/ip.git (master) completed! -Sep 04, 2023 1:44:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [197/480] Analyzing https://github.com/RoeReRe/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Kailash201/ip.git... -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Kailash201/ip.git to complete... -Sep 04, 2023 1:44:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/mfjkri/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mfjkri/ip.git (master) completed! -Sep 04, 2023 1:44:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [198/480] Analyzing https://github.com/Badatprogrammiing/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [198/480] Analyzing https://github.com/RoeReRe/ip.git (master)... +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/juliusgambe/ip.git... +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/juliusgambe/ip.git to complete... +Sep 05, 2023 1:12:46 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/RoeReRe/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/RoeReRe/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Badatprogrammiing/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Badatprogrammiing/ip.git (master)... -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/alyssaongyx/ip.git completed! -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/laurenlim2112/ip.git... -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/laurenlim2112/ip.git to complete... -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Chandan8186/ip.git completed! -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lambraydon/ip.git... -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lambraydon/ip.git to complete... -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AndrewJanong/ip.git completed! -Sep 04, 2023 1:44:06 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sk2001git/ip.git... -Sep 04, 2023 1:44:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sk2001git/ip.git to complete... -Sep 04, 2023 1:44:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/chew01/ip.git completed! +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/RSXIX/ip.git completed! +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lordidiot/ip.git completed! +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zhonghan721/ip.git... +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/WZWren/ip.git... +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zhonghan721/ip.git to complete... +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/inezkok/ip.git... +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/inezkok/ip.git to complete... +Sep 05, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/WZWren/ip.git to complete... +Sep 05, 2023 1:12:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Badatprogrammiing/ip.git (master)... +Sep 05, 2023 1:12:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/RoeReRe/ip.git (master)... -Sep 04, 2023 1:44:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Badatprogrammiing/ip.git (master)... +Sep 05, 2023 1:12:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Badatprogrammiing/ip.git (master) completed! +Sep 05, 2023 1:12:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/RoeReRe/ip.git (master)... -Sep 04, 2023 1:44:07 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/RoeReRe/ip.git (master) completed! -Sep 04, 2023 1:44:07 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:47 AM reposense.report.ReportGenerator analyzeRepos INFO: [199/480] Analyzing https://github.com/nknguyenhc/ip.git (master)... -Sep 04, 2023 1:44:07 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/RoeReRe/ip.git (master) completed! +Sep 05, 2023 1:12:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [200/480] Analyzing https://github.com/winson8222/ip.git (master)... +Sep 05, 2023 1:12:47 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nknguyenhc/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nknguyenhc/ip.git (master)... -Sep 04, 2023 1:44:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Badatprogrammiing/ip.git (master)... -Sep 04, 2023 1:44:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Badatprogrammiing/ip.git (master)... -Sep 04, 2023 1:44:07 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Badatprogrammiing/ip.git (master) completed! -Sep 04, 2023 1:44:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [200/480] Analyzing https://github.com/wujy28/ip.git (master)... -Sep 04, 2023 1:44:07 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wujy28/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wujy28/ip.git (master)... -Sep 04, 2023 1:44:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Kailash201/ip.git completed! -Sep 04, 2023 1:44:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/laurenlim2112/ip.git completed! -Sep 04, 2023 1:44:07 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/chonguschonguschongus/ip.git... -Sep 04, 2023 1:44:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wujy28/ip.git (master)... -Sep 04, 2023 1:44:07 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lshaoqin/ip.git... -Sep 04, 2023 1:44:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/chonguschonguschongus/ip.git to complete... -Sep 04, 2023 1:44:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sk2001git/ip.git completed! -Sep 04, 2023 1:44:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lambraydon/ip.git completed! -Sep 04, 2023 1:44:07 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/peasantbird/ip.git... -Sep 04, 2023 1:44:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lshaoqin/ip.git to complete... -Sep 04, 2023 1:44:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/peasantbird/ip.git to complete... -Sep 04, 2023 1:44:07 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/WangCheng0116/ip.git... -Sep 04, 2023 1:44:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wujy28/ip.git (master)... -Sep 04, 2023 1:44:07 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wujy28/ip.git (master) completed! -Sep 04, 2023 1:44:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [201/480] Analyzing https://github.com/winson8222/ip.git (master)... -Sep 04, 2023 1:44:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/WangCheng0116/ip.git to complete... -Sep 04, 2023 1:44:07 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:47 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/winson8222/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/winson8222/ip.git (master)... -Sep 04, 2023 1:44:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nknguyenhc/ip.git (master)... -Sep 04, 2023 1:44:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nknguyenhc/ip.git (master)... -Sep 04, 2023 1:44:07 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nknguyenhc/ip.git (master) completed! -Sep 04, 2023 1:44:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [202/480] Analyzing https://github.com/SimWPEric/ip.git (master)... -Sep 04, 2023 1:44:07 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/SimWPEric/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/SimWPEric/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/juliusgambe/ip.git completed! +Sep 05, 2023 1:12:47 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wasjoe1/ip.git... +Sep 05, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wasjoe1/ip.git to complete... +Sep 05, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/inezkok/ip.git completed! +Sep 05, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zhonghan721/ip.git completed! +Sep 05, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/WZWren/ip.git completed! +Sep 05, 2023 1:12:47 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kokrui/ip.git... +Sep 05, 2023 1:12:47 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jinyang628/ip.git... +Sep 05, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jinyang628/ip.git to complete... +Sep 05, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kokrui/ip.git to complete... +Sep 05, 2023 1:12:47 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nananakx-x/ip.git... +Sep 05, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nananakx-x/ip.git to complete... +Sep 05, 2023 1:12:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/winson8222/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/winson8222/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:47 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/winson8222/ip.git (master) completed! -Sep 04, 2023 1:44:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [203/480] Analyzing https://github.com/HugeNoob/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [201/480] Analyzing https://github.com/HugeNoob/ip.git (master)... +Sep 05, 2023 1:12:47 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/HugeNoob/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/HugeNoob/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/chonguschonguschongus/ip.git completed! -Sep 04, 2023 1:44:08 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/teozhengyang/ip.git... -Sep 04, 2023 1:44:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/teozhengyang/ip.git to complete... -Sep 04, 2023 1:44:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/WangCheng0116/ip.git completed! -Sep 04, 2023 1:44:08 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/chewjh1234/ip.git... -Sep 04, 2023 1:44:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lshaoqin/ip.git completed! -Sep 04, 2023 1:44:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/peasantbird/ip.git completed! -Sep 04, 2023 1:44:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SimWPEric/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/chewjh1234/ip.git to complete... -Sep 04, 2023 1:44:08 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/elaineshijie/ip.git... -Sep 04, 2023 1:44:08 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lynnlow175/ip.git... -Sep 04, 2023 1:44:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/elaineshijie/ip.git to complete... -Sep 04, 2023 1:44:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SimWPEric/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SimWPEric/ip.git (master) completed! -Sep 04, 2023 1:44:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [204/480] Analyzing https://github.com/lerxuann/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lynnlow175/ip.git to complete... -Sep 04, 2023 1:44:08 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lerxuann/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lerxuann/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nknguyenhc/ip.git (master)... +Sep 05, 2023 1:12:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nknguyenhc/ip.git (master)... +Sep 05, 2023 1:12:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nknguyenhc/ip.git (master) completed! +Sep 05, 2023 1:12:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [202/480] Analyzing https://github.com/wujy28/ip.git (master)... +Sep 05, 2023 1:12:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wujy28/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wujy28/ip.git (master)... +Sep 05, 2023 1:12:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wujy28/ip.git (master)... +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wasjoe1/ip.git completed! +Sep 05, 2023 1:12:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wujy28/ip.git (master)... +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ylyma/ip.git... +Sep 05, 2023 1:12:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wujy28/ip.git (master) completed! +Sep 05, 2023 1:12:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [203/480] Analyzing https://github.com/SimWPEric/ip.git (master)... +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ylyma/ip.git to complete... +Sep 05, 2023 1:12:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/HugeNoob/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:48 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/SimWPEric/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/SimWPEric/ip.git (master)... +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nananakx-x/ip.git completed! +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jinyang628/ip.git completed! +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AnnabelTing/ip.git... +Sep 05, 2023 1:12:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/HugeNoob/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AnnabelTing/ip.git to complete... +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/timetraveller-123/ip.git... +Sep 05, 2023 1:12:48 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/HugeNoob/ip.git (master) completed! -Sep 04, 2023 1:44:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [205/480] Analyzing https://github.com/maj0-0/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/maj0-0/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/maj0-0/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [204/480] Analyzing https://github.com/lerxuann/ip.git (master)... +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kokrui/ip.git completed! +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/timetraveller-123/ip.git to complete... +Sep 05, 2023 1:12:48 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lerxuann/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lerxuann/ip.git (master)... +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LicongHuang/ip.git... +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LicongHuang/ip.git to complete... +Sep 05, 2023 1:12:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lerxuann/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/maj0-0/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lerxuann/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:48 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lerxuann/ip.git (master) completed! -Sep 04, 2023 1:44:08 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [205/480] Analyzing https://github.com/qyaner/ip.git (master)... +Sep 05, 2023 1:12:48 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/qyaner/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/qyaner/ip.git (master)... +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ylyma/ip.git completed! +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Jweng88/ip.git... +Sep 05, 2023 1:12:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SimWPEric/ip.git (master)... +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Jweng88/ip.git to complete... +Sep 05, 2023 1:12:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SimWPEric/ip.git (master)... +Sep 05, 2023 1:12:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SimWPEric/ip.git (master) completed! +Sep 05, 2023 1:12:48 AM reposense.report.ReportGenerator analyzeRepos INFO: [206/480] Analyzing https://github.com/Weiennn/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/maj0-0/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/maj0-0/ip.git (master) completed! -Sep 04, 2023 1:44:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [207/480] Analyzing https://github.com/qyaner/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/timetraveller-123/ip.git completed! +Sep 05, 2023 1:12:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Weiennn/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Weiennn/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/qyaner/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/qyaner/ip.git (master)... -Sep 04, 2023 1:44:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/teozhengyang/ip.git completed! -Sep 04, 2023 1:44:08 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lordidiot/ip.git... -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lordidiot/ip.git to complete... -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lynnlow175/ip.git completed! -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/elaineshijie/ip.git completed! -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/chew01/ip.git... -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/chew01/ip.git to complete... -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/chewjh1234/ip.git completed! -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/RSXIX/ip.git... -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/RSXIX/ip.git to complete... -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/juliusgambe/ip.git... -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/juliusgambe/ip.git to complete... -Sep 04, 2023 1:44:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/EricXiong420/ip.git... +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/EricXiong420/ip.git to complete... +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LicongHuang/ip.git completed! +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AnnabelTing/ip.git completed! +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jovkusuma/ip.git... +Sep 05, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/bhnuka/ip.git... +Sep 05, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jovkusuma/ip.git to complete... +Sep 05, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/bhnuka/ip.git to complete... +Sep 05, 2023 1:12:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/qyaner/ip.git (master)... -Sep 04, 2023 1:44:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/qyaner/ip.git (master)... -Sep 04, 2023 1:44:09 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/qyaner/ip.git (master) completed! -Sep 04, 2023 1:44:09 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [207/480] Analyzing https://github.com/maj0-0/ip.git (master)... +Sep 05, 2023 1:12:49 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/maj0-0/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/maj0-0/ip.git (master)... +Sep 05, 2023 1:12:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/maj0-0/ip.git (master)... +Sep 05, 2023 1:12:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/maj0-0/ip.git (master)... +Sep 05, 2023 1:12:49 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/maj0-0/ip.git (master) completed! +Sep 05, 2023 1:12:49 AM reposense.report.ReportGenerator analyzeRepos INFO: [208/480] Analyzing https://github.com/ruiyangzh/ip.git (master)... -Sep 04, 2023 1:44:09 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Weiennn/ip.git (master)... +Sep 05, 2023 1:12:49 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ruiyangzh/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ruiyangzh/ip.git (master)... -Sep 04, 2023 1:44:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Weiennn/ip.git (master)... -Sep 04, 2023 1:44:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Weiennn/ip.git (master)... -Sep 04, 2023 1:44:09 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Weiennn/ip.git (master) completed! -Sep 04, 2023 1:44:09 PM reposense.report.ReportGenerator analyzeRepos -INFO: [209/480] Analyzing https://github.com/Bombbird2001/ip.git (master)... -Sep 04, 2023 1:44:09 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Bombbird2001/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Bombbird2001/ip.git (master)... -Sep 04, 2023 1:44:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ruiyangzh/ip.git (master)... -Sep 04, 2023 1:44:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ruiyangzh/ip.git (master)... -Sep 04, 2023 1:44:09 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ruiyangzh/ip.git (master) completed! -Sep 04, 2023 1:44:09 PM reposense.report.ReportGenerator analyzeRepos -INFO: [210/480] Analyzing https://github.com/hyc17003/ip.git (master)... -Sep 04, 2023 1:44:09 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [209/480] Analyzing https://github.com/hyc17003/ip.git (master)... +Sep 05, 2023 1:12:49 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/hyc17003/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/hyc17003/ip.git (master)... -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lordidiot/ip.git completed! -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zhonghan721/ip.git... -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zhonghan721/ip.git to complete... -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/chew01/ip.git completed! -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/WZWren/ip.git... -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/WZWren/ip.git to complete... -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/RSXIX/ip.git completed! -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/juliusgambe/ip.git completed! -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/inezkok/ip.git... -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wasjoe1/ip.git... -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/inezkok/ip.git to complete... -Sep 04, 2023 1:44:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wasjoe1/ip.git to complete... -Sep 04, 2023 1:44:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Jweng88/ip.git completed! +Sep 05, 2023 1:12:49 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/J-hta-n/ip.git... +Sep 05, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/J-hta-n/ip.git to complete... +Sep 05, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/EricXiong420/ip.git completed! +Sep 05, 2023 1:12:49 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Tim-Siu/ip.git... +Sep 05, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Tim-Siu/ip.git to complete... +Sep 05, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/bhnuka/ip.git completed! +Sep 05, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jovkusuma/ip.git completed! +Sep 05, 2023 1:12:49 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yarnmengnus/ip.git... +Sep 05, 2023 1:12:49 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sopa301/ip.git... +Sep 05, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yarnmengnus/ip.git to complete... +Sep 05, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sopa301/ip.git to complete... +Sep 05, 2023 1:12:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/hyc17003/ip.git (master)... -Sep 04, 2023 1:44:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/hyc17003/ip.git (master)... -Sep 04, 2023 1:44:09 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/hyc17003/ip.git (master) completed! -Sep 04, 2023 1:44:09 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [210/480] Analyzing https://github.com/Bombbird2001/ip.git (master)... +Sep 05, 2023 1:12:49 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Bombbird2001/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Bombbird2001/ip.git (master)... +Sep 05, 2023 1:12:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ruiyangzh/ip.git (master)... +Sep 05, 2023 1:12:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ruiyangzh/ip.git (master)... +Sep 05, 2023 1:12:49 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ruiyangzh/ip.git (master) completed! +Sep 05, 2023 1:12:49 AM reposense.report.ReportGenerator analyzeRepos INFO: [211/480] Analyzing https://github.com/adammangzijun/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:49 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/adammangzijun/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/adammangzijun/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Bombbird2001/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/J-hta-n/ip.git completed! +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ngeeyonglim/ip.git... +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ngeeyonglim/ip.git to complete... +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Tim-Siu/ip.git completed! +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/flexibo/ip.git... +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/flexibo/ip.git to complete... +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yarnmengnus/ip.git completed! +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ItsTYtan/ip.git... +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sopa301/ip.git completed! +Sep 05, 2023 1:12:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/adammangzijun/ip.git (master)... +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ItsTYtan/ip.git to complete... +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/javinchua/ip.git... +Sep 05, 2023 1:12:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/adammangzijun/ip.git (master)... +Sep 05, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/adammangzijun/ip.git (master) completed! +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/javinchua/ip.git to complete... +Sep 05, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [212/480] Analyzing https://github.com/quzhetao01/ip.git (master)... +Sep 05, 2023 1:12:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/quzhetao01/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/quzhetao01/ip.git (master)... +Sep 05, 2023 1:12:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Bombbird2001/ip.git (master)... +Sep 05, 2023 1:12:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Bombbird2001/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Bombbird2001/ip.git (master) completed! -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [212/480] Analyzing https://github.com/andytoh1/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [213/480] Analyzing https://github.com/andytoh1/ip.git (master)... +Sep 05, 2023 1:12:50 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/andytoh1/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/andytoh1/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/andytoh1/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/andytoh1/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/andytoh1/ip.git (master) completed! -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [213/480] Analyzing https://github.com/Originalidk/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/adammangzijun/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [214/480] Analyzing https://github.com/Originalidk/ip.git (master)... +Sep 05, 2023 1:12:50 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Originalidk/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Originalidk/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/adammangzijun/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/adammangzijun/ip.git (master) completed! -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [214/480] Analyzing https://github.com/quzhetao01/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/quzhetao01/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/quzhetao01/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zhonghan721/ip.git completed! -Sep 04, 2023 1:44:10 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kokrui/ip.git... -Sep 04, 2023 1:44:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kokrui/ip.git to complete... -Sep 04, 2023 1:44:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/WZWren/ip.git completed! -Sep 04, 2023 1:44:10 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jinyang628/ip.git... -Sep 04, 2023 1:44:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jinyang628/ip.git to complete... -Sep 04, 2023 1:44:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Originalidk/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wasjoe1/ip.git completed! -Sep 04, 2023 1:44:10 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nananakx-x/ip.git... -Sep 04, 2023 1:44:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Originalidk/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Originalidk/ip.git (master) completed! -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [215/480] Analyzing https://github.com/InfiBeyond/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nananakx-x/ip.git to complete... -Sep 04, 2023 1:44:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/inezkok/ip.git completed! -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/InfiBeyond/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/InfiBeyond/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ylyma/ip.git... -Sep 04, 2023 1:44:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ylyma/ip.git to complete... -Sep 04, 2023 1:44:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/quzhetao01/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ngeeyonglim/ip.git completed! +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/amosting/ip.git... +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/flexibo/ip.git completed! +Sep 05, 2023 1:12:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/quzhetao01/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/amosting/ip.git to complete... +Sep 05, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/quzhetao01/ip.git (master) completed! -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [216/480] Analyzing https://github.com/Bearypop/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Bearypop/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Bearypop/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [215/480] Analyzing https://github.com/InfiBeyond/ip.git (master)... +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Cleon2/ip.git... +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Cleon2/ip.git to complete... +Sep 05, 2023 1:12:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/InfiBeyond/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/InfiBeyond/ip.git (master)... +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ItsTYtan/ip.git completed! +Sep 05, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/javinchua/ip.git completed! +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ketweeen/ip.git... +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ketweeen/ip.git to complete... +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sudarshan2401/ip.git... +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sudarshan2401/ip.git to complete... +Sep 05, 2023 1:12:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/InfiBeyond/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/InfiBeyond/ip.git (master)... -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:51 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/InfiBeyond/ip.git (master) completed! -Sep 04, 2023 1:44:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [217/480] Analyzing https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 04, 2023 1:44:11 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/sp4ce-cowboy/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 04, 2023 1:44:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kokrui/ip.git completed! -Sep 04, 2023 1:44:11 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AnnabelTing/ip.git... -Sep 04, 2023 1:44:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AnnabelTing/ip.git to complete... -Sep 04, 2023 1:44:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jinyang628/ip.git completed! -Sep 04, 2023 1:44:11 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/timetraveller-123/ip.git... -Sep 04, 2023 1:44:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nananakx-x/ip.git completed! -Sep 04, 2023 1:44:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/timetraveller-123/ip.git to complete... -Sep 04, 2023 1:44:11 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LicongHuang/ip.git... -Sep 04, 2023 1:44:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LicongHuang/ip.git to complete... -Sep 04, 2023 1:44:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ylyma/ip.git completed! -Sep 04, 2023 1:44:11 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Jweng88/ip.git... -Sep 04, 2023 1:44:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Jweng88/ip.git to complete... -Sep 04, 2023 1:44:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [216/480] Analyzing https://github.com/Bearypop/ip.git (master)... +Sep 05, 2023 1:12:51 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Bearypop/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Bearypop/ip.git (master)... +Sep 05, 2023 1:12:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Originalidk/ip.git (master)... +Sep 05, 2023 1:12:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Originalidk/ip.git (master)... +Sep 05, 2023 1:12:51 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Originalidk/ip.git (master) completed! +Sep 05, 2023 1:12:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [217/480] Analyzing https://github.com/JasonLCY-Temp/ip.git (master)... +Sep 05, 2023 1:12:51 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/JasonLCY-Temp/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/JasonLCY-Temp/ip.git (master)... +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/amosting/ip.git completed! +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wui-hong/ip.git... +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Cleon2/ip.git completed! +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wui-hong/ip.git to complete... +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Respirayson/ip.git... +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Respirayson/ip.git to complete... +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ketweeen/ip.git completed! +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Chrainx/ip.git... +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Chrainx/ip.git to complete... +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sudarshan2401/ip.git completed! +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/shishirbychapur/ip.git... +Sep 05, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/shishirbychapur/ip.git to complete... +Sep 05, 2023 1:12:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Bearypop/ip.git (master)... -Sep 04, 2023 1:44:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 04, 2023 1:44:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Bearypop/ip.git (master)... -Sep 04, 2023 1:44:11 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:51 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Bearypop/ip.git (master) completed! -Sep 04, 2023 1:44:11 PM reposense.report.ReportGenerator analyzeRepos -INFO: [218/480] Analyzing https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 04, 2023 1:44:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 04, 2023 1:44:11 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/sp4ce-cowboy/ip.git (master) completed! -Sep 04, 2023 1:44:11 PM reposense.report.ReportGenerator analyzeRepos -INFO: [219/480] Analyzing https://github.com/wjayee/ip.git (master)... -Sep 04, 2023 1:44:11 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/JasonLCY-Temp/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 04, 2023 1:44:11 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wjayee/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wjayee/ip.git (master)... -Sep 04, 2023 1:44:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AnnabelTing/ip.git completed! -Sep 04, 2023 1:44:11 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/EricXiong420/ip.git... -Sep 04, 2023 1:44:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/EricXiong420/ip.git to complete... -Sep 04, 2023 1:44:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [218/480] Analyzing https://github.com/sp4ce-cowboy/ip.git (master)... +Sep 05, 2023 1:12:51 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/sp4ce-cowboy/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/sp4ce-cowboy/ip.git (master)... +Sep 05, 2023 1:12:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 04, 2023 1:44:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wjayee/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:52 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/JasonLCY-Temp/ip.git (master) completed! -Sep 04, 2023 1:44:12 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [219/480] Analyzing https://github.com/wjayee/ip.git (master)... +Sep 05, 2023 1:12:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wjayee/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wjayee/ip.git (master)... +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wui-hong/ip.git completed! +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sunzihan23/ip.git... +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sunzihan23/ip.git to complete... +Sep 05, 2023 1:12:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/sp4ce-cowboy/ip.git (master)... +Sep 05, 2023 1:12:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/sp4ce-cowboy/ip.git (master)... +Sep 05, 2023 1:12:52 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/sp4ce-cowboy/ip.git (master) completed! +Sep 05, 2023 1:12:52 AM reposense.report.ReportGenerator analyzeRepos INFO: [220/480] Analyzing https://github.com/jamesebond/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/timetraveller-123/ip.git completed! -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jovkusuma/ip.git... -Sep 04, 2023 1:44:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wjayee/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wjayee/ip.git (master) completed! -Sep 04, 2023 1:44:12 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:52 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jamesebond/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jamesebond/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Respirayson/ip.git completed! +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wj331/ip.git... +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wj331/ip.git to complete... +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Chrainx/ip.git completed! +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tjch-o/ip.git... +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tjch-o/ip.git to complete... +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/shishirbychapur/ip.git completed! +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/licongshen12/ip.git... +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/licongshen12/ip.git to complete... +Sep 05, 2023 1:12:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wjayee/ip.git (master)... +Sep 05, 2023 1:12:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wjayee/ip.git (master)... +Sep 05, 2023 1:12:52 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wjayee/ip.git (master) completed! +Sep 05, 2023 1:12:52 AM reposense.report.ReportGenerator analyzeRepos INFO: [221/480] Analyzing https://github.com/jonyeokj/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jovkusuma/ip.git to complete... -Sep 04, 2023 1:44:12 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:52 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jonyeokj/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jonyeokj/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LicongHuang/ip.git completed! -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/bhnuka/ip.git... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/bhnuka/ip.git to complete... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Jweng88/ip.git completed! -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/J-hta-n/ip.git... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/J-hta-n/ip.git to complete... -Sep 04, 2023 1:44:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jamesebond/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jamesebond/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:52 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jamesebond/ip.git (master) completed! -Sep 04, 2023 1:44:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jonyeokj/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:52 AM reposense.report.ReportGenerator analyzeRepos INFO: [222/480] Analyzing https://github.com/vivienherq/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jonyeokj/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jonyeokj/ip.git (master) completed! -Sep 04, 2023 1:44:12 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:52 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/vivienherq/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/vivienherq/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.report.ReportGenerator analyzeRepos -INFO: [223/480] Analyzing https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/EricXiong420/ip.git completed! -Sep 04, 2023 1:44:12 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/victorlaiyeeteng/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Tim-Siu/ip.git... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Tim-Siu/ip.git to complete... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jovkusuma/ip.git completed! -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yarnmengnus/ip.git... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yarnmengnus/ip.git to complete... -Sep 04, 2023 1:44:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sunzihan23/ip.git completed! +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/mamayuan/ip.git... +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/mamayuan/ip.git to complete... +Sep 05, 2023 1:12:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/vivienherq/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/vivienherq/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:52 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/vivienherq/ip.git (master) completed! -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/bhnuka/ip.git completed! -Sep 04, 2023 1:44:12 PM reposense.report.ReportGenerator analyzeRepos -INFO: [224/480] Analyzing https://github.com/Cloud7050/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sopa301/ip.git... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sopa301/ip.git to complete... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/J-hta-n/ip.git completed! -Sep 04, 2023 1:44:12 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Cloud7050/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Cloud7050/ip.git (master)... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ngeeyonglim/ip.git... -Sep 04, 2023 1:44:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ngeeyonglim/ip.git to complete... -Sep 04, 2023 1:44:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [223/480] Analyzing https://github.com/victorlaiyeeteng/ip.git (master)... +Sep 05, 2023 1:12:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/victorlaiyeeteng/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/victorlaiyeeteng/ip.git (master)... +Sep 05, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wj331/ip.git completed! +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ong-wei-hong/ip.git... +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tjch-o/ip.git completed! +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ong-wei-hong/ip.git to complete... +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tanboonkhong/ip.git... +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tanboonkhong/ip.git to complete... +Sep 05, 2023 1:12:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jonyeokj/ip.git (master)... +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/licongshen12/ip.git completed! +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/cbj252/ip.git... +Sep 05, 2023 1:12:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jonyeokj/ip.git (master)... +Sep 05, 2023 1:12:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jonyeokj/ip.git (master) completed! +Sep 05, 2023 1:12:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [224/480] Analyzing https://github.com/yongning0310/ip.git (master)... +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/cbj252/ip.git to complete... +Sep 05, 2023 1:12:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yongning0310/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yongning0310/ip.git (master)... +Sep 05, 2023 1:12:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mamayuan/ip.git completed! +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AlfredBeNoel/ip.git... +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AlfredBeNoel/ip.git to complete... +Sep 05, 2023 1:12:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:53 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/victorlaiyeeteng/ip.git (master) completed! -Sep 04, 2023 1:44:13 PM reposense.report.ReportGenerator analyzeRepos -INFO: [225/480] Analyzing https://github.com/lyuanww/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Cloud7050/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lyuanww/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lyuanww/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Cloud7050/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Cloud7050/ip.git (master) completed! -Sep 04, 2023 1:44:13 PM reposense.report.ReportGenerator analyzeRepos -INFO: [226/480] Analyzing https://github.com/yongning0310/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yongning0310/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yongning0310/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Tim-Siu/ip.git completed! -Sep 04, 2023 1:44:13 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/flexibo/ip.git... -Sep 04, 2023 1:44:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/flexibo/ip.git to complete... -Sep 04, 2023 1:44:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yarnmengnus/ip.git completed! -Sep 04, 2023 1:44:13 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ItsTYtan/ip.git... -Sep 04, 2023 1:44:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ItsTYtan/ip.git to complete... -Sep 04, 2023 1:44:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sopa301/ip.git completed! -Sep 04, 2023 1:44:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ngeeyonglim/ip.git completed! -Sep 04, 2023 1:44:13 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/javinchua/ip.git... -Sep 04, 2023 1:44:13 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/amosting/ip.git... -Sep 04, 2023 1:44:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/javinchua/ip.git to complete... -Sep 04, 2023 1:44:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/amosting/ip.git to complete... -Sep 04, 2023 1:44:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lyuanww/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lyuanww/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lyuanww/ip.git (master) completed! -Sep 04, 2023 1:44:13 PM reposense.report.ReportGenerator analyzeRepos -INFO: [227/480] Analyzing https://github.com/LoMaply/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [225/480] Analyzing https://github.com/LoMaply/ip.git (master)... +Sep 05, 2023 1:12:53 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/LoMaply/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/LoMaply/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ong-wei-hong/ip.git completed! +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/keaganpzh/ip.git... +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/keaganpzh/ip.git to complete... +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tanboonkhong/ip.git completed! +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/cbj252/ip.git completed! +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ElginTZM/ip.git... +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LimJH2002/ip.git... +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ElginTZM/ip.git to complete... +Sep 05, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LimJH2002/ip.git to complete... +Sep 05, 2023 1:12:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yongning0310/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LoMaply/ip.git (master)... +Sep 05, 2023 1:12:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yongning0310/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:53 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yongning0310/ip.git (master) completed! -Sep 04, 2023 1:44:13 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LoMaply/ip.git (master)... +Sep 05, 2023 1:12:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [226/480] Analyzing https://github.com/Cloud7050/ip.git (master)... +Sep 05, 2023 1:12:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LoMaply/ip.git (master) completed! +Sep 05, 2023 1:12:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [227/480] Analyzing https://github.com/lyuanww/ip.git (master)... +Sep 05, 2023 1:12:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Cloud7050/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Cloud7050/ip.git (master)... +Sep 05, 2023 1:12:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lyuanww/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lyuanww/ip.git (master)... +Sep 05, 2023 1:12:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Cloud7050/ip.git (master)... +Sep 05, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AlfredBeNoel/ip.git completed! +Sep 05, 2023 1:12:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Cloud7050/ip.git (master)... +Sep 05, 2023 1:12:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lyuanww/ip.git (master)... +Sep 05, 2023 1:12:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Cloud7050/ip.git (master) completed! +Sep 05, 2023 1:12:54 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/cmHuang777/ip.git... +Sep 05, 2023 1:12:54 AM reposense.report.ReportGenerator analyzeRepos INFO: [228/480] Analyzing https://github.com/tllshan/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/cmHuang777/ip.git to complete... +Sep 05, 2023 1:12:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lyuanww/ip.git (master)... +Sep 05, 2023 1:12:54 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tllshan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tllshan/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LoMaply/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LoMaply/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LoMaply/ip.git (master) completed! -Sep 04, 2023 1:44:13 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lyuanww/ip.git (master) completed! +Sep 05, 2023 1:12:54 AM reposense.report.ReportGenerator analyzeRepos INFO: [229/480] Analyzing https://github.com/Gavino3o/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/flexibo/ip.git completed! -Sep 04, 2023 1:44:13 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:54 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Gavino3o/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Gavino3o/ip.git (master)... -Sep 04, 2023 1:44:13 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Cleon2/ip.git... -Sep 04, 2023 1:44:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Cleon2/ip.git to complete... -Sep 04, 2023 1:44:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/keaganpzh/ip.git completed! +Sep 05, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ElginTZM/ip.git completed! +Sep 05, 2023 1:12:54 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/WeeeHung/ip.git... +Sep 05, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LimJH2002/ip.git completed! +Sep 05, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/WeeeHung/ip.git to complete... +Sep 05, 2023 1:12:54 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/xxiaoweii/ip.git... +Sep 05, 2023 1:12:54 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/rayyan35p/ip.git... +Sep 05, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/xxiaoweii/ip.git to complete... +Sep 05, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/rayyan35p/ip.git to complete... +Sep 05, 2023 1:12:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tllshan/ip.git (master)... -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ItsTYtan/ip.git completed! -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ketweeen/ip.git... -Sep 04, 2023 1:44:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tllshan/ip.git (master)... -Sep 04, 2023 1:44:14 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:54 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tllshan/ip.git (master) completed! -Sep 04, 2023 1:44:14 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:54 AM reposense.report.ReportGenerator analyzeRepos INFO: [230/480] Analyzing https://github.com/HollaG/ip.git (master)... -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ketweeen/ip.git to complete... -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/amosting/ip.git completed! -Sep 04, 2023 1:44:14 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:54 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/HollaG/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/HollaG/ip.git (master)... -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sudarshan2401/ip.git... -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/javinchua/ip.git completed! -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wui-hong/ip.git... -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sudarshan2401/ip.git to complete... -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wui-hong/ip.git to complete... -Sep 04, 2023 1:44:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/HollaG/ip.git (master)... -Sep 04, 2023 1:44:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/HollaG/ip.git (master)... -Sep 04, 2023 1:44:14 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/HollaG/ip.git (master) completed! -Sep 04, 2023 1:44:14 PM reposense.report.ReportGenerator analyzeRepos -INFO: [231/480] Analyzing https://github.com/cheeggered/ip.git (master)... -Sep 04, 2023 1:44:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/cmHuang777/ip.git completed! +Sep 05, 2023 1:12:54 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dhruvir29/ip.git... +Sep 05, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dhruvir29/ip.git to complete... +Sep 05, 2023 1:12:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Gavino3o/ip.git (master)... -Sep 04, 2023 1:44:14 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/cheeggered/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/cheeggered/ip.git (master)... -Sep 04, 2023 1:44:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/HollaG/ip.git (master)... +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/WeeeHung/ip.git completed! +Sep 05, 2023 1:12:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Gavino3o/ip.git (master)... -Sep 04, 2023 1:44:14 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Gavino3o/ip.git (master) completed! -Sep 04, 2023 1:44:14 PM reposense.report.ReportGenerator analyzeRepos -INFO: [232/480] Analyzing https://github.com/xenosf/ip.git (master)... -Sep 04, 2023 1:44:14 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/xenosf/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/xenosf/ip.git (master)... -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Cleon2/ip.git completed! -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Respirayson/ip.git... -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ketweeen/ip.git completed! -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Respirayson/ip.git to complete... -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Chrainx/ip.git... -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Chrainx/ip.git to complete... -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sudarshan2401/ip.git completed! -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wui-hong/ip.git completed! -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/shishirbychapur/ip.git... -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sunzihan23/ip.git... -Sep 04, 2023 1:44:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/cheeggered/ip.git (master)... -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/shishirbychapur/ip.git to complete... -Sep 04, 2023 1:44:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sunzihan23/ip.git to complete... -Sep 04, 2023 1:44:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/cheeggered/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/cheeggered/ip.git (master) completed! -Sep 04, 2023 1:44:15 PM reposense.report.ReportGenerator analyzeRepos -INFO: [233/480] Analyzing https://github.com/TehOPanas/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/TehOPanas/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/TehOPanas/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/xenosf/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/xenosf/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/xenosf/ip.git (master) completed! -Sep 04, 2023 1:44:15 PM reposense.report.ReportGenerator analyzeRepos -INFO: [234/480] Analyzing https://github.com/neyapraveen/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/HollaG/ip.git (master)... +Sep 05, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [231/480] Analyzing https://github.com/cheeggered/ip.git (master)... +Sep 05, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/HollaG/ip.git (master) completed! +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LinWanLeii/ip.git... +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LinWanLeii/ip.git to complete... +Sep 05, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [232/480] Analyzing https://github.com/neyapraveen/ip.git (master)... +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xxiaoweii/ip.git completed! +Sep 05, 2023 1:12:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/cheeggered/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/cheeggered/ip.git (master)... +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Song-Mengfei/ip.git... +Sep 05, 2023 1:12:55 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/neyapraveen/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/neyapraveen/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Song-Mengfei/ip.git to complete... +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/rayyan35p/ip.git completed! +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jinyuan0425/ip.git... +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jinyuan0425/ip.git to complete... +Sep 05, 2023 1:12:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/neyapraveen/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/neyapraveen/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/neyapraveen/ip.git (master) completed! -Sep 04, 2023 1:44:15 PM reposense.report.ReportGenerator analyzeRepos -INFO: [235/480] Analyzing https://github.com/richiehx/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/richiehx/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/richiehx/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Respirayson/ip.git completed! -Sep 04, 2023 1:44:15 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wj331/ip.git... -Sep 04, 2023 1:44:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Chrainx/ip.git completed! -Sep 04, 2023 1:44:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sunzihan23/ip.git completed! -Sep 04, 2023 1:44:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wj331/ip.git to complete... -Sep 04, 2023 1:44:15 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tjch-o/ip.git... -Sep 04, 2023 1:44:15 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/licongshen12/ip.git... -Sep 04, 2023 1:44:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tjch-o/ip.git to complete... -Sep 04, 2023 1:44:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/licongshen12/ip.git to complete... -Sep 04, 2023 1:44:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/shishirbychapur/ip.git completed! -Sep 04, 2023 1:44:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [233/480] Analyzing https://github.com/TehOPanas/ip.git (master)... +Sep 05, 2023 1:12:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/TehOPanas/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/TehOPanas/ip.git (master)... +Sep 05, 2023 1:12:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/cheeggered/ip.git (master)... +Sep 05, 2023 1:12:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/cheeggered/ip.git (master)... +Sep 05, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/cheeggered/ip.git (master) completed! +Sep 05, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [234/480] Analyzing https://github.com/xenosf/ip.git (master)... +Sep 05, 2023 1:12:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/xenosf/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/xenosf/ip.git (master)... +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dhruvir29/ip.git completed! +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tiif/ip.git... +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tiif/ip.git to complete... +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LinWanLeii/ip.git completed! +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nicholascher/ip.git... +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nicholascher/ip.git to complete... +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Song-Mengfei/ip.git completed! +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/hcs1203/ip.git... +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jinyuan0425/ip.git completed! +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/papataco14/ip.git... +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/hcs1203/ip.git to complete... +Sep 05, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/papataco14/ip.git to complete... +Sep 05, 2023 1:12:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/TehOPanas/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/mamayuan/ip.git... -Sep 04, 2023 1:44:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/mamayuan/ip.git to complete... -Sep 04, 2023 1:44:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/TehOPanas/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/TehOPanas/ip.git (master) completed! -Sep 04, 2023 1:44:15 PM reposense.report.ReportGenerator analyzeRepos -INFO: [236/480] Analyzing https://github.com/seantehds/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/seantehds/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/seantehds/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [235/480] Analyzing https://github.com/richiehx/ip.git (master)... +Sep 05, 2023 1:12:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/xenosf/ip.git (master)... +Sep 05, 2023 1:12:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/xenosf/ip.git (master)... +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/xenosf/ip.git (master) completed! +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/richiehx/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/richiehx/ip.git (master)... +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [236/480] Analyzing https://github.com/leezhengjing/ip.git (master)... +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/leezhengjing/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/leezhengjing/ip.git (master)... +Sep 05, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tiif/ip.git completed! +Sep 05, 2023 1:12:56 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/KamJiaYue/ip.git... +Sep 05, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/KamJiaYue/ip.git to complete... +Sep 05, 2023 1:12:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/richiehx/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nicholascher/ip.git completed! +Sep 05, 2023 1:12:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/richiehx/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/richiehx/ip.git (master) completed! -Sep 04, 2023 1:44:15 PM reposense.report.ReportGenerator analyzeRepos -INFO: [237/480] Analyzing https://github.com/leezhengjing/ip.git (master)... -Sep 04, 2023 1:44:15 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/leezhengjing/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/leezhengjing/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [237/480] Analyzing https://github.com/AlyssaPng/ip.git (master)... +Sep 05, 2023 1:12:56 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/NereusWB922/ip.git... +Sep 05, 2023 1:12:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/leezhengjing/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/leezhengjing/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/seantehds/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/leezhengjing/ip.git (master) completed! -Sep 04, 2023 1:44:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tjch-o/ip.git completed! -Sep 04, 2023 1:44:16 PM reposense.report.ReportGenerator analyzeRepos -INFO: [238/480] Analyzing https://github.com/AlyssaPng/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/seantehds/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wj331/ip.git completed! -Sep 04, 2023 1:44:16 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/seantehds/ip.git (master) completed! -Sep 04, 2023 1:44:16 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ong-wei-hong/ip.git... -Sep 04, 2023 1:44:16 PM reposense.report.ReportGenerator analyzeRepos -INFO: [239/480] Analyzing https://github.com/ceilingFan456/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tanboonkhong/ip.git... -Sep 04, 2023 1:44:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ong-wei-hong/ip.git to complete... -Sep 04, 2023 1:44:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/licongshen12/ip.git completed! -Sep 04, 2023 1:44:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tanboonkhong/ip.git to complete... -Sep 04, 2023 1:44:16 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/cbj252/ip.git... -Sep 04, 2023 1:44:16 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/NereusWB922/ip.git to complete... +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AlyssaPng/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AlyssaPng/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mamayuan/ip.git completed! -Sep 04, 2023 1:44:16 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/papataco14/ip.git completed! +Sep 05, 2023 1:12:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/leezhengjing/ip.git (master)... +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/leezhengjing/ip.git (master) completed! +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [238/480] Analyzing https://github.com/ceilingFan456/ip.git (master)... +Sep 05, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/hcs1203/ip.git completed! +Sep 05, 2023 1:12:56 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/PohSayKeong/ip.git... +Sep 05, 2023 1:12:56 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ivyy-poison/ip.git... +Sep 05, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/PohSayKeong/ip.git to complete... +Sep 05, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ivyy-poison/ip.git to complete... +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ceilingFan456/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ceilingFan456/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/cbj252/ip.git to complete... -Sep 04, 2023 1:44:16 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AlfredBeNoel/ip.git... -Sep 04, 2023 1:44:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AlfredBeNoel/ip.git to complete... -Sep 04, 2023 1:44:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ceilingFan456/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ceilingFan456/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ceilingFan456/ip.git (master) completed! -Sep 04, 2023 1:44:16 PM reposense.report.ReportGenerator analyzeRepos -INFO: [240/480] Analyzing https://github.com/Singa-pirate/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Singa-pirate/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Singa-pirate/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [239/480] Analyzing https://github.com/seantehds/ip.git (master)... +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/seantehds/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/seantehds/ip.git (master)... +Sep 05, 2023 1:12:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AlyssaPng/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AlyssaPng/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AlyssaPng/ip.git (master) completed! -Sep 04, 2023 1:44:16 PM reposense.report.ReportGenerator analyzeRepos -INFO: [241/480] Analyzing https://github.com/lihongguang00/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lihongguang00/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lihongguang00/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lihongguang00/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lihongguang00/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lihongguang00/ip.git (master) completed! -Sep 04, 2023 1:44:16 PM reposense.report.ReportGenerator analyzeRepos -INFO: [242/480] Analyzing https://github.com/songfangyl/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [240/480] Analyzing https://github.com/songfangyl/ip.git (master)... +Sep 05, 2023 1:12:56 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/songfangyl/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/songfangyl/ip.git (master)... -Sep 04, 2023 1:44:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/KamJiaYue/ip.git completed! +Sep 05, 2023 1:12:56 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jacobcuison/ip.git... +Sep 05, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jacobcuison/ip.git to complete... +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/NereusWB922/ip.git completed! +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ji-just-ji/ip.git... +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ji-just-ji/ip.git to complete... +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ivyy-poison/ip.git completed! +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kohkaijie/ip.git... +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kohkaijie/ip.git to complete... +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/PohSayKeong/ip.git completed! +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/rocketninja7/ip.git... +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/rocketninja7/ip.git to complete... +Sep 05, 2023 1:12:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/seantehds/ip.git (master)... +Sep 05, 2023 1:12:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/seantehds/ip.git (master)... +Sep 05, 2023 1:12:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/seantehds/ip.git (master) completed! +Sep 05, 2023 1:12:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [241/480] Analyzing https://github.com/Singa-pirate/ip.git (master)... +Sep 05, 2023 1:12:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Singa-pirate/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Singa-pirate/ip.git (master)... +Sep 05, 2023 1:12:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/songfangyl/ip.git (master)... +Sep 05, 2023 1:12:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/songfangyl/ip.git (master)... +Sep 05, 2023 1:12:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/songfangyl/ip.git (master) completed! +Sep 05, 2023 1:12:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [242/480] Analyzing https://github.com/vansh284/ip.git (master)... +Sep 05, 2023 1:12:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/vansh284/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/vansh284/ip.git (master)... +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jacobcuison/ip.git completed! +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zekone/ip.git... +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zekone/ip.git to complete... +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ji-just-ji/ip.git completed! +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/markgcera/ip.git... +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/markgcera/ip.git to complete... +Sep 05, 2023 1:12:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Singa-pirate/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Singa-pirate/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:57 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Singa-pirate/ip.git (master) completed! -Sep 04, 2023 1:44:17 PM reposense.report.ReportGenerator analyzeRepos -INFO: [243/480] Analyzing https://github.com/vansh284/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tanboonkhong/ip.git completed! -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/cbj252/ip.git completed! -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AlfredBeNoel/ip.git completed! -Sep 04, 2023 1:44:17 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/vansh284/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/vansh284/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/keaganpzh/ip.git... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ElginTZM/ip.git... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ong-wei-hong/ip.git completed! -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LimJH2002/ip.git... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ElginTZM/ip.git to complete... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/keaganpzh/ip.git to complete... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/cmHuang777/ip.git... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LimJH2002/ip.git to complete... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/cmHuang777/ip.git to complete... -Sep 04, 2023 1:44:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/songfangyl/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [243/480] Analyzing https://github.com/lihongguang00/ip.git (master)... +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/rocketninja7/ip.git completed! +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kohkaijie/ip.git completed! +Sep 05, 2023 1:12:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lihongguang00/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lihongguang00/ip.git (master)... +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/PearlynnT/ip.git... +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/StevenLiudw/ip.git... +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/PearlynnT/ip.git to complete... +Sep 05, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/StevenLiudw/ip.git to complete... +Sep 05, 2023 1:12:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lihongguang00/ip.git (master)... +Sep 05, 2023 1:12:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lihongguang00/ip.git (master)... +Sep 05, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lihongguang00/ip.git (master) completed! +Sep 05, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [244/480] Analyzing https://github.com/YeoBohShin/ip.git (master)... +Sep 05, 2023 1:12:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/vansh284/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/songfangyl/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/songfangyl/ip.git (master) completed! -Sep 04, 2023 1:44:17 PM reposense.report.ReportGenerator analyzeRepos -INFO: [244/480] Analyzing https://github.com/andrechuakj/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/vansh284/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/vansh284/ip.git (master) completed! -Sep 04, 2023 1:44:17 PM reposense.report.ReportGenerator analyzeRepos -INFO: [245/480] Analyzing https://github.com/YeoBohShin/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/andrechuakj/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/andrechuakj/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [245/480] Analyzing https://github.com/andrechuakj/ip.git (master)... +Sep 05, 2023 1:12:58 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/YeoBohShin/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/YeoBohShin/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/andrechuakj/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/andrechuakj/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/andrechuakj/ip.git (master) completed! -Sep 04, 2023 1:44:17 PM reposense.report.ReportGenerator analyzeRepos -INFO: [246/480] Analyzing https://github.com/shuenj/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/keaganpzh/ip.git completed! -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/WeeeHung/ip.git... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ElginTZM/ip.git completed! -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LimJH2002/ip.git completed! -Sep 04, 2023 1:44:17 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/shuenj/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/shuenj/ip.git (master)... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/xxiaoweii/ip.git... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/WeeeHung/ip.git to complete... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/cmHuang777/ip.git completed! -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/rayyan35p/ip.git... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/xxiaoweii/ip.git to complete... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dhruvir29/ip.git... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/rayyan35p/ip.git to complete... -Sep 04, 2023 1:44:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dhruvir29/ip.git to complete... -Sep 04, 2023 1:44:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zekone/ip.git completed! +Sep 05, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/TeeRenJing/ip.git... +Sep 05, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/TeeRenJing/ip.git to complete... +Sep 05, 2023 1:12:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/andrechuakj/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/andrechuakj/ip.git (master)... +Sep 05, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/markgcera/ip.git completed! +Sep 05, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/mounilsankar/ip.git... +Sep 05, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/mounilsankar/ip.git to complete... +Sep 05, 2023 1:12:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/YeoBohShin/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/YeoBohShin/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/YeoBohShin/ip.git (master) completed! -Sep 04, 2023 1:44:18 PM reposense.report.ReportGenerator analyzeRepos -INFO: [247/480] Analyzing https://github.com/lunaroddity/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [246/480] Analyzing https://github.com/lunaroddity/ip.git (master)... +Sep 05, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/PearlynnT/ip.git completed! +Sep 05, 2023 1:12:58 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lunaroddity/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lunaroddity/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dloh2236/ip.git... +Sep 05, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/StevenLiudw/ip.git completed! +Sep 05, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dloh2236/ip.git to complete... +Sep 05, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zannloo/ip.git... +Sep 05, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zannloo/ip.git to complete... +Sep 05, 2023 1:12:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/andrechuakj/ip.git (master)... +Sep 05, 2023 1:12:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/andrechuakj/ip.git (master)... +Sep 05, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/andrechuakj/ip.git (master) completed! +Sep 05, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [247/480] Analyzing https://github.com/shuenj/ip.git (master)... +Sep 05, 2023 1:12:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/shuenj/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/shuenj/ip.git (master)... +Sep 05, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/TeeRenJing/ip.git completed! +Sep 05, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/junnengsoo/ip.git... +Sep 05, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/junnengsoo/ip.git to complete... +Sep 05, 2023 1:12:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lunaroddity/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lunaroddity/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lunaroddity/ip.git (master) completed! -Sep 04, 2023 1:44:18 PM reposense.report.ReportGenerator analyzeRepos -INFO: [248/480] Analyzing https://github.com/WeeMingQing/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WeeMingQing/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WeeMingQing/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [248/480] Analyzing https://github.com/aliciamichellew/ip.git (master)... +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mounilsankar/ip.git completed! +Sep 05, 2023 1:12:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/aliciamichellew/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/aliciamichellew/ip.git (master)... +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/freshcabbage123/ip.git... +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/freshcabbage123/ip.git to complete... +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dloh2236/ip.git completed! +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Kokseng1/ip.git... +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Kokseng1/ip.git to complete... +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zannloo/ip.git completed! +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/itsNatTan/ip.git... +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/itsNatTan/ip.git to complete... +Sep 05, 2023 1:12:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/shuenj/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/shuenj/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:59 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/shuenj/ip.git (master) completed! -Sep 04, 2023 1:44:18 PM reposense.report.ReportGenerator analyzeRepos -INFO: [249/480] Analyzing https://github.com/aliciamichellew/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/aliciamichellew/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/aliciamichellew/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/WeeeHung/ip.git completed! -Sep 04, 2023 1:44:18 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LinWanLeii/ip.git... -Sep 04, 2023 1:44:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/rayyan35p/ip.git completed! -Sep 04, 2023 1:44:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LinWanLeii/ip.git to complete... -Sep 04, 2023 1:44:18 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Song-Mengfei/ip.git... -Sep 04, 2023 1:44:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Song-Mengfei/ip.git to complete... -Sep 04, 2023 1:44:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dhruvir29/ip.git completed! -Sep 04, 2023 1:44:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/WeeMingQing/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jinyuan0425/ip.git... -Sep 04, 2023 1:44:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jinyuan0425/ip.git to complete... -Sep 04, 2023 1:44:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/WeeMingQing/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/WeeMingQing/ip.git (master) completed! -Sep 04, 2023 1:44:18 PM reposense.report.ReportGenerator analyzeRepos -INFO: [250/480] Analyzing https://github.com/samuelmui8/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/samuelmui8/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/samuelmui8/ip.git (master)... -Sep 04, 2023 1:44:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xxiaoweii/ip.git completed! -Sep 04, 2023 1:44:18 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tiif/ip.git... -Sep 04, 2023 1:44:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tiif/ip.git to complete... -Sep 04, 2023 1:44:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [249/480] Analyzing https://github.com/WeeMingQing/ip.git (master)... +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/junnengsoo/ip.git completed! +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tjingsheng/ip.git... +Sep 05, 2023 1:12:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WeeMingQing/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WeeMingQing/ip.git (master)... +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tjingsheng/ip.git to complete... +Sep 05, 2023 1:12:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/aliciamichellew/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/aliciamichellew/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:12:59 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/aliciamichellew/ip.git (master) completed! -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:12:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [250/480] Analyzing https://github.com/samuelmui8/ip.git (master)... +Sep 05, 2023 1:12:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/samuelmui8/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:12:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/samuelmui8/ip.git (master)... +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/freshcabbage123/ip.git completed! +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ZD292/ip.git... +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ZD292/ip.git to complete... +Sep 05, 2023 1:12:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/WeeMingQing/ip.git (master)... +Sep 05, 2023 1:12:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/WeeMingQing/ip.git (master)... +Sep 05, 2023 1:12:59 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/WeeMingQing/ip.git (master) completed! +Sep 05, 2023 1:12:59 AM reposense.report.ReportGenerator analyzeRepos INFO: [251/480] Analyzing https://github.com/antonTan96/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Kokseng1/ip.git completed! +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/alientian/ip.git... +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/alientian/ip.git to complete... +Sep 05, 2023 1:12:59 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/antonTan96/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:12:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/antonTan96/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/itsNatTan/ip.git completed! +Sep 05, 2023 1:12:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/samuelmui8/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/frrrrry/ip.git... +Sep 05, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/frrrrry/ip.git to complete... +Sep 05, 2023 1:12:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/samuelmui8/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:00 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/samuelmui8/ip.git (master) completed! -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:00 AM reposense.report.ReportGenerator analyzeRepos INFO: [252/480] Analyzing https://github.com/owenyeo/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tjingsheng/ip.git completed! +Sep 05, 2023 1:13:00 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/owenyeo/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/owenyeo/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Song-Mengfei/ip.git completed! -Sep 04, 2023 1:44:19 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nicholascher/ip.git... -Sep 04, 2023 1:44:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wanghejin/ip.git... +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wanghejin/ip.git to complete... +Sep 05, 2023 1:13:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/antonTan96/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nicholascher/ip.git to complete... -Sep 04, 2023 1:44:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LinWanLeii/ip.git completed! -Sep 04, 2023 1:44:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/antonTan96/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/hcs1203/ip.git... -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:00 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/antonTan96/ip.git (master) completed! -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator analyzeRepos -INFO: [253/480] Analyzing https://github.com/nabonitasen/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/hcs1203/ip.git to complete... -Sep 04, 2023 1:44:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/owenyeo/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nabonitasen/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nabonitasen/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [253/480] Analyzing https://github.com/gongg21/ip.git (master)... +Sep 05, 2023 1:13:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/owenyeo/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:00 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/owenyeo/ip.git (master) completed! -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator analyzeRepos -INFO: [254/480] Analyzing https://github.com/gongg21/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jinyuan0425/ip.git completed! -Sep 04, 2023 1:44:19 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/papataco14/ip.git... -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [254/480] Analyzing https://github.com/erohsikivar/ip.git (master)... +Sep 05, 2023 1:13:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/erohsikivar/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/erohsikivar/ip.git (master)... +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ZD292/ip.git completed! +Sep 05, 2023 1:13:00 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/gongg21/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/gongg21/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/papataco14/ip.git to complete... -Sep 04, 2023 1:44:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tiif/ip.git completed! -Sep 04, 2023 1:44:19 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/KamJiaYue/ip.git... -Sep 04, 2023 1:44:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/KamJiaYue/ip.git to complete... -Sep 04, 2023 1:44:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nabonitasen/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nabonitasen/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nabonitasen/ip.git (master) completed! -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator analyzeRepos -INFO: [255/480] Analyzing https://github.com/erohsikivar/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/MagnificentCreature/ip.git... +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/MagnificentCreature/ip.git to complete... +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/alientian/ip.git completed! +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/SungMatt/ip.git... +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/frrrrry/ip.git completed! +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/SungMatt/ip.git to complete... +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/andrefoo/ip.git... +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/andrefoo/ip.git to complete... +Sep 05, 2023 1:13:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/gongg21/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/erohsikivar/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/erohsikivar/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/gongg21/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:00 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/gongg21/ip.git (master) completed! -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator analyzeRepos -INFO: [256/480] Analyzing https://github.com/pzl111/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/pzl111/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/pzl111/ip.git (master)... -Sep 04, 2023 1:44:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nicholascher/ip.git completed! -Sep 04, 2023 1:44:19 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/NereusWB922/ip.git... -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/NereusWB922/ip.git to complete... -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/hcs1203/ip.git completed! -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/PohSayKeong/ip.git... -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/PohSayKeong/ip.git to complete... -Sep 04, 2023 1:44:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [255/480] Analyzing https://github.com/nabonitasen/ip.git (master)... +Sep 05, 2023 1:13:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nabonitasen/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nabonitasen/ip.git (master)... +Sep 05, 2023 1:13:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/erohsikivar/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/KamJiaYue/ip.git completed! -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/papataco14/ip.git completed! -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ivyy-poison/ip.git... -Sep 04, 2023 1:44:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/erohsikivar/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:00 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/erohsikivar/ip.git (master) completed! -Sep 04, 2023 1:44:20 PM reposense.report.ReportGenerator analyzeRepos -INFO: [257/480] Analyzing https://github.com/Elijah5399/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jacobcuison/ip.git... -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jacobcuison/ip.git to complete... -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ivyy-poison/ip.git to complete... -Sep 04, 2023 1:44:20 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Elijah5399/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Elijah5399/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [256/480] Analyzing https://github.com/pzl111/ip.git (master)... +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wanghejin/ip.git completed! +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tohpinren/ip.git... +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tohpinren/ip.git to complete... +Sep 05, 2023 1:13:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/pzl111/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/pzl111/ip.git (master)... +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/MagnificentCreature/ip.git completed! +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/XihuaZ/ip.git... +Sep 05, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/XihuaZ/ip.git to complete... +Sep 05, 2023 1:13:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nabonitasen/ip.git (master)... +Sep 05, 2023 1:13:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nabonitasen/ip.git (master)... +Sep 05, 2023 1:13:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nabonitasen/ip.git (master) completed! +Sep 05, 2023 1:13:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [257/480] Analyzing https://github.com/teozern1/ip.git (master)... +Sep 05, 2023 1:13:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/teozern1/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/teozern1/ip.git (master)... +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/andrefoo/ip.git completed! +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/xavierpok/ip.git... +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/xavierpok/ip.git to complete... +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/SungMatt/ip.git completed! +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/bkjwjason/ip.git... +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/bkjwjason/ip.git to complete... +Sep 05, 2023 1:13:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/pzl111/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/pzl111/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:01 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/pzl111/ip.git (master) completed! -Sep 04, 2023 1:44:20 PM reposense.report.ReportGenerator analyzeRepos -INFO: [258/480] Analyzing https://github.com/teozern1/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/teozern1/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/teozern1/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Elijah5399/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Elijah5399/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Elijah5399/ip.git (master) completed! -Sep 04, 2023 1:44:20 PM reposense.report.ReportGenerator analyzeRepos -INFO: [259/480] Analyzing https://github.com/nicleongyj/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nicleongyj/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nicleongyj/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/NereusWB922/ip.git completed! -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ji-just-ji/ip.git... -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ji-just-ji/ip.git to complete... -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/PohSayKeong/ip.git completed! -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kohkaijie/ip.git... -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kohkaijie/ip.git to complete... -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jacobcuison/ip.git completed! -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ivyy-poison/ip.git completed! -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/rocketninja7/ip.git... -Sep 04, 2023 1:44:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [258/480] Analyzing https://github.com/nicleongyj/ip.git (master)... +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tohpinren/ip.git completed! +Sep 05, 2023 1:13:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/teozern1/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/rocketninja7/ip.git to complete... -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zekone/ip.git... -Sep 04, 2023 1:44:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Choonyan02/ip.git... +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Choonyan02/ip.git to complete... +Sep 05, 2023 1:13:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/teozern1/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:01 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/teozern1/ip.git (master) completed! -Sep 04, 2023 1:44:20 PM reposense.report.ReportGenerator analyzeRepos -INFO: [260/480] Analyzing https://github.com/WinSheng1/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zekone/ip.git to complete... -Sep 04, 2023 1:44:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [259/480] Analyzing https://github.com/Elijah5399/ip.git (master)... +Sep 05, 2023 1:13:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nicleongyj/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nicleongyj/ip.git (master)... +Sep 05, 2023 1:13:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Elijah5399/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Elijah5399/ip.git (master)... +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/XihuaZ/ip.git completed! +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/aarontxz/ip.git... +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/aarontxz/ip.git to complete... +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xavierpok/ip.git completed! +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jianyangg/ip.git... +Sep 05, 2023 1:13:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nicleongyj/ip.git (master)... -Sep 04, 2023 1:44:20 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WinSheng1/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WinSheng1/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jianyangg/ip.git to complete... +Sep 05, 2023 1:13:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nicleongyj/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:01 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nicleongyj/ip.git (master) completed! -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [260/480] Analyzing https://github.com/ryamgoh/ip.git (master)... +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/bkjwjason/ip.git completed! +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tayian/ip.git... +Sep 05, 2023 1:13:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ryamgoh/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ryamgoh/ip.git (master)... +Sep 05, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tayian/ip.git to complete... +Sep 05, 2023 1:13:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Elijah5399/ip.git (master)... +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Choonyan02/ip.git completed! +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wnchan/ip.git... +Sep 05, 2023 1:13:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Elijah5399/ip.git (master)... +Sep 05, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Elijah5399/ip.git (master) completed! +Sep 05, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepos INFO: [261/480] Analyzing https://github.com/Chen-Kuei/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wnchan/ip.git to complete... +Sep 05, 2023 1:13:02 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Chen-Kuei/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Chen-Kuei/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Chen-Kuei/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Chen-Kuei/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Chen-Kuei/ip.git (master) completed! -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator analyzeRepos -INFO: [262/480] Analyzing https://github.com/yucongkoo/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [262/480] Analyzing https://github.com/WinSheng1/ip.git (master)... +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/aarontxz/ip.git completed! +Sep 05, 2023 1:13:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WinSheng1/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WinSheng1/ip.git (master)... +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Jweewee/ip.git... +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Jweewee/ip.git to complete... +Sep 05, 2023 1:13:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ryamgoh/ip.git (master)... +Sep 05, 2023 1:13:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ryamgoh/ip.git (master)... +Sep 05, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ryamgoh/ip.git (master) completed! +Sep 05, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [263/480] Analyzing https://github.com/yucongkoo/ip.git (master)... +Sep 05, 2023 1:13:02 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/yucongkoo/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/yucongkoo/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/WinSheng1/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/WinSheng1/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/WinSheng1/ip.git (master) completed! -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator analyzeRepos -INFO: [263/480] Analyzing https://github.com/ryamgoh/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ryamgoh/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ryamgoh/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ji-just-ji/ip.git completed! -Sep 04, 2023 1:44:21 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/markgcera/ip.git... -Sep 04, 2023 1:44:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/markgcera/ip.git to complete... -Sep 04, 2023 1:44:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/rocketninja7/ip.git completed! -Sep 04, 2023 1:44:21 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/PearlynnT/ip.git... -Sep 04, 2023 1:44:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/PearlynnT/ip.git to complete... -Sep 04, 2023 1:44:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kohkaijie/ip.git completed! -Sep 04, 2023 1:44:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [264/480] Analyzing https://github.com/GSgiansen/ip.git (master)... +Sep 05, 2023 1:13:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/GSgiansen/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/GSgiansen/ip.git (master)... +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tayian/ip.git completed! +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/cyaoxuan/ip.git... +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/cyaoxuan/ip.git to complete... +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jianyangg/ip.git completed! +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/anthonytamzil/ip.git... +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/anthonytamzil/ip.git to complete... +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wnchan/ip.git completed! +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/CelestineTan03/ip.git... +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/CelestineTan03/ip.git to complete... +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Jweewee/ip.git completed! +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/saltedfishxx/ip.git... +Sep 05, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/saltedfishxx/ip.git to complete... +Sep 05, 2023 1:13:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yucongkoo/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/StevenLiudw/ip.git... -Sep 04, 2023 1:44:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yucongkoo/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yucongkoo/ip.git (master) completed! -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator analyzeRepos -INFO: [264/480] Analyzing https://github.com/conradsoon/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/StevenLiudw/ip.git to complete... -Sep 04, 2023 1:44:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zekone/ip.git completed! -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [265/480] Analyzing https://github.com/marioalvaro/ip.git (master)... +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/marioalvaro/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/marioalvaro/ip.git (master)... +Sep 05, 2023 1:13:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/GSgiansen/ip.git (master)... +Sep 05, 2023 1:13:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/GSgiansen/ip.git (master)... +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/GSgiansen/ip.git (master) completed! +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [266/480] Analyzing https://github.com/conradsoon/ip.git (master)... +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/conradsoon/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/conradsoon/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/TeeRenJing/ip.git... -Sep 04, 2023 1:44:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/TeeRenJing/ip.git to complete... -Sep 04, 2023 1:44:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ryamgoh/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ryamgoh/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ryamgoh/ip.git (master) completed! -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator analyzeRepos -INFO: [265/480] Analyzing https://github.com/GSgiansen/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/GSgiansen/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/GSgiansen/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/anthonytamzil/ip.git completed! +Sep 05, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/cyaoxuan/ip.git completed! +Sep 05, 2023 1:13:03 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/euchangxian/ip.git... +Sep 05, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/CelestineTan03/ip.git completed! +Sep 05, 2023 1:13:03 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AlagappanRa/ip.git... +Sep 05, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/euchangxian/ip.git to complete... +Sep 05, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AlagappanRa/ip.git to complete... +Sep 05, 2023 1:13:03 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Ken-Lai/ip.git... +Sep 05, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Ken-Lai/ip.git to complete... +Sep 05, 2023 1:13:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/marioalvaro/ip.git (master)... +Sep 05, 2023 1:13:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/conradsoon/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/marioalvaro/ip.git (master)... +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/marioalvaro/ip.git (master) completed! +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [267/480] Analyzing https://github.com/et-irl/ip.git (master)... +Sep 05, 2023 1:13:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/conradsoon/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/conradsoon/ip.git (master) completed! -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator analyzeRepos -INFO: [266/480] Analyzing https://github.com/et-irl/ip.git (master)... -Sep 04, 2023 1:44:21 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [268/480] Analyzing https://github.com/Seonlo99/ip.git (master)... +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/et-irl/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/et-irl/ip.git (master)... -Sep 04, 2023 1:44:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/markgcera/ip.git completed! -Sep 04, 2023 1:44:22 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/mounilsankar/ip.git... -Sep 04, 2023 1:44:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/mounilsankar/ip.git to complete... -Sep 04, 2023 1:44:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/GSgiansen/ip.git (master)... -Sep 04, 2023 1:44:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/GSgiansen/ip.git (master)... -Sep 04, 2023 1:44:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/PearlynnT/ip.git completed! -Sep 04, 2023 1:44:22 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/GSgiansen/ip.git (master) completed! -Sep 04, 2023 1:44:22 PM reposense.report.ReportGenerator analyzeRepos -INFO: [267/480] Analyzing https://github.com/marioalvaro/ip.git (master)... -Sep 04, 2023 1:44:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/TeeRenJing/ip.git completed! -Sep 04, 2023 1:44:22 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dloh2236/ip.git... -Sep 04, 2023 1:44:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dloh2236/ip.git to complete... -Sep 04, 2023 1:44:22 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zannloo/ip.git... -Sep 04, 2023 1:44:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/StevenLiudw/ip.git completed! -Sep 04, 2023 1:44:22 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/marioalvaro/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zannloo/ip.git to complete... -Sep 04, 2023 1:44:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/marioalvaro/ip.git (master)... -Sep 04, 2023 1:44:22 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/junnengsoo/ip.git... -Sep 04, 2023 1:44:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/junnengsoo/ip.git to complete... -Sep 04, 2023 1:44:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/et-irl/ip.git (master)... -Sep 04, 2023 1:44:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/et-irl/ip.git (master)... -Sep 04, 2023 1:44:22 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/et-irl/ip.git (master) completed! -Sep 04, 2023 1:44:22 PM reposense.report.ReportGenerator analyzeRepos -INFO: [268/480] Analyzing https://github.com/Seonlo99/ip.git (master)... -Sep 04, 2023 1:44:22 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/saltedfishxx/ip.git completed! +Sep 05, 2023 1:13:03 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/felibunnyy/ip.git... +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Seonlo99/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Seonlo99/ip.git (master)... -Sep 04, 2023 1:44:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mounilsankar/ip.git completed! -Sep 04, 2023 1:44:22 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/freshcabbage123/ip.git... -Sep 04, 2023 1:44:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/marioalvaro/ip.git (master)... -Sep 04, 2023 1:44:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/freshcabbage123/ip.git to complete... -Sep 04, 2023 1:44:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/marioalvaro/ip.git (master)... -Sep 04, 2023 1:44:22 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/marioalvaro/ip.git (master) completed! -Sep 04, 2023 1:44:22 PM reposense.report.ReportGenerator analyzeRepos -INFO: [269/480] Analyzing https://github.com/joel-foo/ip.git (master)... -Sep 04, 2023 1:44:22 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/joel-foo/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/joel-foo/ip.git (master)... -Sep 04, 2023 1:44:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/felibunnyy/ip.git to complete... +Sep 05, 2023 1:13:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Seonlo99/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/junnengsoo/ip.git completed! -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Kokseng1/ip.git... -Sep 04, 2023 1:44:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Seonlo99/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/et-irl/ip.git (master)... +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Seonlo99/ip.git (master) completed! -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Kokseng1/ip.git to complete... -Sep 04, 2023 1:44:23 PM reposense.report.ReportGenerator analyzeRepos -INFO: [270/480] Analyzing https://github.com/tim-pipi/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zannloo/ip.git completed! -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dloh2236/ip.git completed! -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/itsNatTan/ip.git... -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tjingsheng/ip.git... -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/itsNatTan/ip.git to complete... -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tjingsheng/ip.git to complete... -Sep 04, 2023 1:44:23 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [269/480] Analyzing https://github.com/tim-pipi/ip.git (master)... +Sep 05, 2023 1:13:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/et-irl/ip.git (master)... +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tim-pipi/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tim-pipi/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/freshcabbage123/ip.git completed! -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ZD292/ip.git... -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ZD292/ip.git to complete... -Sep 04, 2023 1:44:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tim-pipi/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tim-pipi/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/joel-foo/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tim-pipi/ip.git (master) completed! -Sep 04, 2023 1:44:23 PM reposense.report.ReportGenerator analyzeRepos -INFO: [271/480] Analyzing https://github.com/marcellaantania/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/joel-foo/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/marcellaantania/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/marcellaantania/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/joel-foo/ip.git (master) completed! -Sep 04, 2023 1:44:23 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/et-irl/ip.git (master) completed! +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [270/480] Analyzing https://github.com/joel-foo/ip.git (master)... +Sep 05, 2023 1:13:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/joel-foo/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/joel-foo/ip.git (master)... +Sep 05, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Ken-Lai/ip.git completed! +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/itssisi/ip.git... +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/itssisi/ip.git to complete... +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/euchangxian/ip.git completed! +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AlagappanRa/ip.git completed! +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jamz903/ip.git... +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Kevin-Liusx/ip.git... +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Kevin-Liusx/ip.git to complete... +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/felibunnyy/ip.git completed! +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jamz903/ip.git to complete... +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Propene-Dan/ip.git... +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Propene-Dan/ip.git to complete... +Sep 05, 2023 1:13:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tim-pipi/ip.git (master)... +Sep 05, 2023 1:13:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tim-pipi/ip.git (master)... +Sep 05, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tim-pipi/ip.git (master) completed! +Sep 05, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [271/480] Analyzing https://github.com/marcellaantania/ip.git (master)... +Sep 05, 2023 1:13:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/marcellaantania/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/marcellaantania/ip.git (master)... +Sep 05, 2023 1:13:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/joel-foo/ip.git (master)... +Sep 05, 2023 1:13:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/joel-foo/ip.git (master)... +Sep 05, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/joel-foo/ip.git (master) completed! +Sep 05, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepos INFO: [272/480] Analyzing https://github.com/brendanneojw/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:04 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/brendanneojw/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/brendanneojw/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/marcellaantania/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/marcellaantania/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/marcellaantania/ip.git (master) completed! -Sep 04, 2023 1:44:23 PM reposense.report.ReportGenerator analyzeRepos -INFO: [273/480] Analyzing https://github.com/li-rongzhi/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/li-rongzhi/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/li-rongzhi/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/itsNatTan/ip.git completed! -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Kokseng1/ip.git completed! -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/alientian/ip.git... -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/frrrrry/ip.git... -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tjingsheng/ip.git completed! -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/alientian/ip.git to complete... -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/frrrrry/ip.git to complete... -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wanghejin/ip.git... -Sep 04, 2023 1:44:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wanghejin/ip.git to complete... -Sep 04, 2023 1:44:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [273/480] Analyzing https://github.com/KamiliArsyad/ip.git (master)... +Sep 05, 2023 1:13:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/KamiliArsyad/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/KamiliArsyad/ip.git (master)... +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jamz903/ip.git completed! +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Kevin-Liusx/ip.git completed! +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ChuanXinNg/ip.git... +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ChuanXinNg/ip.git to complete... +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kenvynKwek/ip.git... +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/itssisi/ip.git completed! +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kenvynKwek/ip.git to complete... +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Ruizhi2001/ip.git... +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Ruizhi2001/ip.git to complete... +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Propene-Dan/ip.git completed! +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/prawnzyy/ip.git... +Sep 05, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/prawnzyy/ip.git to complete... +Sep 05, 2023 1:13:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/brendanneojw/ip.git (master)... -Sep 04, 2023 1:44:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/brendanneojw/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/brendanneojw/ip.git (master) completed! -Sep 04, 2023 1:44:24 PM reposense.report.ReportGenerator analyzeRepos -INFO: [274/480] Analyzing https://github.com/KamiliArsyad/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ZD292/ip.git completed! -Sep 04, 2023 1:44:24 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/MagnificentCreature/ip.git... -Sep 04, 2023 1:44:24 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/KamiliArsyad/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/KamiliArsyad/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/MagnificentCreature/ip.git to complete... -Sep 04, 2023 1:44:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [274/480] Analyzing https://github.com/seraphimstreets/ip.git (master)... +Sep 05, 2023 1:13:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/seraphimstreets/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/seraphimstreets/ip.git (master)... +Sep 05, 2023 1:13:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/KamiliArsyad/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/KamiliArsyad/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:05 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/KamiliArsyad/ip.git (master) completed! -Sep 04, 2023 1:44:24 PM reposense.report.ReportGenerator analyzeRepos -INFO: [275/480] Analyzing https://github.com/trgao/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [275/480] Analyzing https://github.com/li-rongzhi/ip.git (master)... +Sep 05, 2023 1:13:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/li-rongzhi/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/li-rongzhi/ip.git (master)... +Sep 05, 2023 1:13:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/seraphimstreets/ip.git (master)... +Sep 05, 2023 1:13:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/seraphimstreets/ip.git (master)... +Sep 05, 2023 1:13:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/seraphimstreets/ip.git (master) completed! +Sep 05, 2023 1:13:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [276/480] Analyzing https://github.com/trgao/ip.git (master)... +Sep 05, 2023 1:13:05 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/trgao/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/trgao/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/alientian/ip.git completed! -Sep 04, 2023 1:44:24 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/SungMatt/ip.git... -Sep 04, 2023 1:44:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/frrrrry/ip.git completed! -Sep 04, 2023 1:44:24 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/andrefoo/ip.git... -Sep 04, 2023 1:44:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/SungMatt/ip.git to complete... -Sep 04, 2023 1:44:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/andrefoo/ip.git to complete... -Sep 04, 2023 1:44:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wanghejin/ip.git completed! -Sep 04, 2023 1:44:24 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tohpinren/ip.git... -Sep 04, 2023 1:44:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tohpinren/ip.git to complete... -Sep 04, 2023 1:44:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/li-rongzhi/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/li-rongzhi/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/li-rongzhi/ip.git (master) completed! -Sep 04, 2023 1:44:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/MagnificentCreature/ip.git completed! -Sep 04, 2023 1:44:24 PM reposense.report.ReportGenerator analyzeRepos -INFO: [276/480] Analyzing https://github.com/seraphimstreets/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/XihuaZ/ip.git... -Sep 04, 2023 1:44:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/XihuaZ/ip.git to complete... -Sep 04, 2023 1:44:24 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/seraphimstreets/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/seraphimstreets/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Ruizhi2001/ip.git completed! +Sep 05, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/saraozn/ip.git... +Sep 05, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ChuanXinNg/ip.git completed! +Sep 05, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kenvynKwek/ip.git completed! +Sep 05, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nicholastng010601/ip.git... +Sep 05, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/DistractedCat/ip.git... +Sep 05, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/saraozn/ip.git to complete... +Sep 05, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/DistractedCat/ip.git to complete... +Sep 05, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nicholastng010601/ip.git to complete... +Sep 05, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/prawnzyy/ip.git completed! +Sep 05, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yezkez10/ip.git... +Sep 05, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yezkez10/ip.git to complete... +Sep 05, 2023 1:13:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/trgao/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/seraphimstreets/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/trgao/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/seraphimstreets/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:05 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/trgao/ip.git (master) completed! -Sep 04, 2023 1:44:24 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/seraphimstreets/ip.git (master) completed! -Sep 04, 2023 1:44:24 PM reposense.report.ReportGenerator analyzeRepos -INFO: [277/480] Analyzing https://github.com/lilozz2/ip.git (master)... -Sep 04, 2023 1:44:24 PM reposense.report.ReportGenerator analyzeRepos -INFO: [278/480] Analyzing https://github.com/jean-cq/ip.git (master)... -Sep 04, 2023 1:44:25 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [277/480] Analyzing https://github.com/jean-cq/ip.git (master)... +Sep 05, 2023 1:13:05 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jean-cq/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jean-cq/ip.git (master)... -Sep 04, 2023 1:44:25 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/li-rongzhi/ip.git (master)... +Sep 05, 2023 1:13:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/li-rongzhi/ip.git (master)... +Sep 05, 2023 1:13:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/li-rongzhi/ip.git (master) completed! +Sep 05, 2023 1:13:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [278/480] Analyzing https://github.com/lilozz2/ip.git (master)... +Sep 05, 2023 1:13:05 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lilozz2/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lilozz2/ip.git (master)... -Sep 04, 2023 1:44:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tohpinren/ip.git completed! -Sep 04, 2023 1:44:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/xavierpok/ip.git... -Sep 04, 2023 1:44:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/SungMatt/ip.git completed! -Sep 04, 2023 1:44:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/bkjwjason/ip.git... -Sep 04, 2023 1:44:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/xavierpok/ip.git to complete... -Sep 04, 2023 1:44:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/bkjwjason/ip.git to complete... -Sep 04, 2023 1:44:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/XihuaZ/ip.git completed! -Sep 04, 2023 1:44:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Choonyan02/ip.git... -Sep 04, 2023 1:44:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Choonyan02/ip.git to complete... -Sep 04, 2023 1:44:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jean-cq/ip.git (master)... -Sep 04, 2023 1:44:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lilozz2/ip.git (master)... -Sep 04, 2023 1:44:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jean-cq/ip.git (master)... -Sep 04, 2023 1:44:25 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jean-cq/ip.git (master) completed! -Sep 04, 2023 1:44:25 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepos INFO: [279/480] Analyzing https://github.com/jedkohjk/ip.git (master)... -Sep 04, 2023 1:44:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/andrefoo/ip.git completed! -Sep 04, 2023 1:44:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/DistractedCat/ip.git completed! +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/saraozn/ip.git completed! +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/revdrag/ip.git... +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/revdrag/ip.git to complete... +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/alvinlim277/ip.git... +Sep 05, 2023 1:13:06 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jedkohjk/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jedkohjk/ip.git (master)... +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nicholastng010601/ip.git completed! +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/alvinlim277/ip.git to complete... +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/JasonRay168/ip.git... +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/JasonRay168/ip.git to complete... +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yezkez10/ip.git completed! +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/billieboy7/ip.git... +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/billieboy7/ip.git to complete... +Sep 05, 2023 1:13:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lilozz2/ip.git (master)... +Sep 05, 2023 1:13:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lilozz2/ip.git (master)... -Sep 04, 2023 1:44:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/aarontxz/ip.git... -Sep 04, 2023 1:44:25 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lilozz2/ip.git (master) completed! -Sep 04, 2023 1:44:25 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepos INFO: [280/480] Analyzing https://github.com/yytan25/ip.git (master)... -Sep 04, 2023 1:44:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/aarontxz/ip.git to complete... -Sep 04, 2023 1:44:25 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:06 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/yytan25/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/yytan25/ip.git (master)... -Sep 04, 2023 1:44:25 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jedkohjk/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jedkohjk/ip.git (master)... -Sep 04, 2023 1:44:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yytan25/ip.git (master)... -Sep 04, 2023 1:44:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yytan25/ip.git (master)... -Sep 04, 2023 1:44:25 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yytan25/ip.git (master) completed! -Sep 04, 2023 1:44:25 PM reposense.report.ReportGenerator analyzeRepos -INFO: [281/480] Analyzing https://github.com/ryantzr1/ip.git (master)... -Sep 04, 2023 1:44:25 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ryantzr1/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ryantzr1/ip.git (master)... -Sep 04, 2023 1:44:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xavierpok/ip.git completed! -Sep 04, 2023 1:44:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jianyangg/ip.git... -Sep 04, 2023 1:44:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jianyangg/ip.git to complete... -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Choonyan02/ip.git completed! -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tayian/ip.git... -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/bkjwjason/ip.git completed! -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tayian/ip.git to complete... -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wnchan/ip.git... -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/aarontxz/ip.git completed! -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wnchan/ip.git to complete... -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Jweewee/ip.git... -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Jweewee/ip.git to complete... -Sep 04, 2023 1:44:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ryantzr1/ip.git (master)... -Sep 04, 2023 1:44:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ryantzr1/ip.git (master)... -Sep 04, 2023 1:44:26 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ryantzr1/ip.git (master) completed! -Sep 04, 2023 1:44:26 PM reposense.report.ReportGenerator analyzeRepos -INFO: [282/480] Analyzing https://github.com/maypfv/ip.git (master)... -Sep 04, 2023 1:44:26 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [281/480] Analyzing https://github.com/maypfv/ip.git (master)... +Sep 05, 2023 1:13:06 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/maypfv/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/maypfv/ip.git (master)... -Sep 04, 2023 1:44:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jedkohjk/ip.git (master)... -Sep 04, 2023 1:44:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jedkohjk/ip.git (master)... -Sep 04, 2023 1:44:26 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jedkohjk/ip.git (master) completed! -Sep 04, 2023 1:44:26 PM reposense.report.ReportGenerator analyzeRepos -INFO: [283/480] Analyzing https://github.com/TohLiYuan/ip.git (master)... -Sep 04, 2023 1:44:26 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [282/480] Analyzing https://github.com/TohLiYuan/ip.git (master)... +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/billieboy7/ip.git completed! +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JasonRay168/ip.git completed! +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/alvinlim277/ip.git completed! +Sep 05, 2023 1:13:06 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/TohLiYuan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/TohLiYuan/ip.git (master)... -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jianyangg/ip.git completed! -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/cyaoxuan/ip.git... -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/cyaoxuan/ip.git to complete... -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tayian/ip.git completed! -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Jweewee/ip.git completed! -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wnchan/ip.git completed! -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/anthonytamzil/ip.git... -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/CelestineTan03/ip.git... -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/anthonytamzil/ip.git to complete... -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/saltedfishxx/ip.git... -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/CelestineTan03/ip.git to complete... -Sep 04, 2023 1:44:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/saltedfishxx/ip.git to complete... -Sep 04, 2023 1:44:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jannnice/ip.git... +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/revdrag/ip.git completed! +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/evanyan13/ip.git... +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/samuelim01/ip.git... +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dinde2004/ip.git... +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jannnice/ip.git to complete... +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dinde2004/ip.git to complete... +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/samuelim01/ip.git to complete... +Sep 05, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/evanyan13/ip.git to complete... +Sep 05, 2023 1:13:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/maypfv/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/maypfv/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/TohLiYuan/ip.git (master)... +Sep 05, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/maypfv/ip.git (master) completed! -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [283/480] Analyzing https://github.com/ryantzr1/ip.git (master)... +Sep 05, 2023 1:13:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/TohLiYuan/ip.git (master)... +Sep 05, 2023 1:13:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ryantzr1/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ryantzr1/ip.git (master)... +Sep 05, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/TohLiYuan/ip.git (master) completed! +Sep 05, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepos INFO: [284/480] Analyzing https://github.com/JizhuoChen/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:07 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/JizhuoChen/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/JizhuoChen/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/TohLiYuan/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/TohLiYuan/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/TohLiYuan/ip.git (master) completed! -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator analyzeRepos -INFO: [285/480] Analyzing https://github.com/ChongWeiJie29/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ChongWeiJie29/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ChongWeiJie29/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jannnice/ip.git completed! +Sep 05, 2023 1:13:07 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/seanpzk/ip.git... +Sep 05, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/seanpzk/ip.git to complete... +Sep 05, 2023 1:13:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ryantzr1/ip.git (master)... +Sep 05, 2023 1:13:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ryantzr1/ip.git (master)... +Sep 05, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ryantzr1/ip.git (master) completed! +Sep 05, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [285/480] Analyzing https://github.com/Goh-Li-Ting/ip.git (master)... +Sep 05, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/evanyan13/ip.git completed! +Sep 05, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dinde2004/ip.git completed! +Sep 05, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/samuelim01/ip.git completed! +Sep 05, 2023 1:13:07 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/KumChaiYin/ip.git... +Sep 05, 2023 1:13:07 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lsyurea/ip.git... +Sep 05, 2023 1:13:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Goh-Li-Ting/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Goh-Li-Ting/ip.git (master)... +Sep 05, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lsyurea/ip.git to complete... +Sep 05, 2023 1:13:07 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Sasmik23/ip.git... +Sep 05, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/KumChaiYin/ip.git to complete... +Sep 05, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Sasmik23/ip.git to complete... +Sep 05, 2023 1:13:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/JizhuoChen/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/JizhuoChen/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/JizhuoChen/ip.git (master) completed! -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator analyzeRepos -INFO: [286/480] Analyzing https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/cyaoxuan/ip.git completed! -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Goh-Li-Ting/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/euchangxian/ip.git... -Sep 04, 2023 1:44:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/euchangxian/ip.git to complete... -Sep 04, 2023 1:44:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/anthonytamzil/ip.git completed! -Sep 04, 2023 1:44:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [286/480] Analyzing https://github.com/ChongWeiJie29/ip.git (master)... +Sep 05, 2023 1:13:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ChongWeiJie29/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ChongWeiJie29/ip.git (master)... +Sep 05, 2023 1:13:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ChongWeiJie29/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AlagappanRa/ip.git... -Sep 04, 2023 1:44:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AlagappanRa/ip.git to complete... -Sep 04, 2023 1:44:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/CelestineTan03/ip.git completed! -Sep 04, 2023 1:44:27 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Ken-Lai/ip.git... -Sep 04, 2023 1:44:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ChongWeiJie29/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ChongWeiJie29/ip.git (master) completed! -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepos INFO: [287/480] Analyzing https://github.com/kristayeo/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Ken-Lai/ip.git to complete... -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Goh-Li-Ting/ip.git (master)... +Sep 05, 2023 1:13:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Goh-Li-Ting/ip.git (master)... +Sep 05, 2023 1:13:08 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Goh-Li-Ting/ip.git (master) completed! +Sep 05, 2023 1:13:08 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kristayeo/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kristayeo/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/saltedfishxx/ip.git completed! -Sep 04, 2023 1:44:27 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/felibunnyy/ip.git... -Sep 04, 2023 1:44:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/felibunnyy/ip.git to complete... -Sep 04, 2023 1:44:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kristayeo/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kristayeo/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kristayeo/ip.git (master) completed! -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:08 AM reposense.report.ReportGenerator analyzeRepos INFO: [288/480] Analyzing https://github.com/derekjxtan/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:08 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/derekjxtan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/derekjxtan/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 04, 2023 1:44:27 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Goh-Li-Ting/ip.git (master) completed! -Sep 04, 2023 1:44:28 PM reposense.report.ReportGenerator analyzeRepos -INFO: [289/480] Analyzing https://github.com/shashahchk/ip.git (master)... -Sep 04, 2023 1:44:28 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/seanpzk/ip.git completed! +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/geraldngjx/ip.git... +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/geraldngjx/ip.git to complete... +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/KumChaiYin/ip.git completed! +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lululwtv/ip.git... +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lululwtv/ip.git to complete... +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Sasmik23/ip.git completed! +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lsyurea/ip.git completed! +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/garylow2001/ip.git... +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/garylow2001/ip.git to complete... +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/leontan2/ip.git... +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/leontan2/ip.git to complete... +Sep 05, 2023 1:13:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kristayeo/ip.git (master)... +Sep 05, 2023 1:13:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kristayeo/ip.git (master)... +Sep 05, 2023 1:13:08 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kristayeo/ip.git (master) completed! +Sep 05, 2023 1:13:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [289/480] Analyzing https://github.com/Chandan8186/ip.git (master)... +Sep 05, 2023 1:13:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Chandan8186/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Chandan8186/ip.git (master)... +Sep 05, 2023 1:13:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/derekjxtan/ip.git (master)... +Sep 05, 2023 1:13:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/derekjxtan/ip.git (master)... +Sep 05, 2023 1:13:08 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/derekjxtan/ip.git (master) completed! +Sep 05, 2023 1:13:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [290/480] Analyzing https://github.com/shashahchk/ip.git (master)... +Sep 05, 2023 1:13:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Chandan8186/ip.git (master)... +Sep 05, 2023 1:13:08 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/shashahchk/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/shashahchk/ip.git (master)... -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/euchangxian/ip.git completed! -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AlagappanRa/ip.git completed! -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/itssisi/ip.git... -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/itssisi/ip.git to complete... -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jamz903/ip.git... -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jamz903/ip.git to complete... -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Ken-Lai/ip.git completed! -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Kevin-Liusx/ip.git... -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Kevin-Liusx/ip.git to complete... -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/felibunnyy/ip.git completed! -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Propene-Dan/ip.git... -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Propene-Dan/ip.git to complete... -Sep 04, 2023 1:44:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Chandan8186/ip.git (master)... +Sep 05, 2023 1:13:08 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Chandan8186/ip.git (master) completed! +Sep 05, 2023 1:13:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [291/480] Analyzing https://github.com/alyssaongyx/ip.git (master)... +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/geraldngjx/ip.git completed! +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wamps-jp/ip.git... +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wamps-jp/ip.git to complete... +Sep 05, 2023 1:13:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/alyssaongyx/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/alyssaongyx/ip.git (master)... +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/leontan2/ip.git completed! +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lululwtv/ip.git completed! +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dickongwd/ip.git... +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dickongwd/ip.git to complete... +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jacksonyuan256/ip.git... +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jacksonyuan256/ip.git to complete... +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/garylow2001/ip.git completed! +Sep 05, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/suryanshkushwaha/ip.git... +Sep 05, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/suryanshkushwaha/ip.git to complete... +Sep 05, 2023 1:13:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/shashahchk/ip.git (master)... -Sep 04, 2023 1:44:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/shashahchk/ip.git (master)... -Sep 04, 2023 1:44:28 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/shashahchk/ip.git (master) completed! -Sep 04, 2023 1:44:28 PM reposense.report.ReportGenerator analyzeRepos -INFO: [290/480] Analyzing https://github.com/alyssaongyx/ip.git (master)... -Sep 04, 2023 1:44:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/derekjxtan/ip.git (master)... -Sep 04, 2023 1:44:28 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/alyssaongyx/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/alyssaongyx/ip.git (master)... -Sep 04, 2023 1:44:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/derekjxtan/ip.git (master)... -Sep 04, 2023 1:44:28 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/derekjxtan/ip.git (master) completed! -Sep 04, 2023 1:44:28 PM reposense.report.ReportGenerator analyzeRepos -INFO: [291/480] Analyzing https://github.com/Chandan8186/ip.git (master)... -Sep 04, 2023 1:44:28 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Chandan8186/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Chandan8186/ip.git (master)... -Sep 04, 2023 1:44:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/alyssaongyx/ip.git (master)... -Sep 04, 2023 1:44:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/alyssaongyx/ip.git (master)... -Sep 04, 2023 1:44:28 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/alyssaongyx/ip.git (master) completed! -Sep 04, 2023 1:44:28 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:09 AM reposense.report.ReportGenerator analyzeRepos INFO: [292/480] Analyzing https://github.com/AndrewJanong/ip.git (master)... -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/itssisi/ip.git completed! -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ChuanXinNg/ip.git... -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jamz903/ip.git completed! -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ChuanXinNg/ip.git to complete... -Sep 04, 2023 1:44:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Chandan8186/ip.git (master)... -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kenvynKwek/ip.git... -Sep 04, 2023 1:44:28 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:09 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AndrewJanong/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AndrewJanong/ip.git (master)... -Sep 04, 2023 1:44:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kenvynKwek/ip.git to complete... -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Kevin-Liusx/ip.git completed! -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Ruizhi2001/ip.git... -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Propene-Dan/ip.git completed! -Sep 04, 2023 1:44:29 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Chandan8186/ip.git (master)... -Sep 04, 2023 1:44:29 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Chandan8186/ip.git (master) completed! -Sep 04, 2023 1:44:29 PM reposense.report.ReportGenerator analyzeRepos -INFO: [293/480] Analyzing https://github.com/laurenlim2112/ip.git (master)... -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/prawnzyy/ip.git... -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Ruizhi2001/ip.git to complete... -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/prawnzyy/ip.git to complete... -Sep 04, 2023 1:44:29 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/laurenlim2112/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/laurenlim2112/ip.git (master)... -Sep 04, 2023 1:44:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/alyssaongyx/ip.git (master)... +Sep 05, 2023 1:13:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/alyssaongyx/ip.git (master)... +Sep 05, 2023 1:13:09 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/alyssaongyx/ip.git (master) completed! +Sep 05, 2023 1:13:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [293/480] Analyzing https://github.com/Kailash201/ip.git (master)... +Sep 05, 2023 1:13:09 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Kailash201/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Kailash201/ip.git (master)... +Sep 05, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wamps-jp/ip.git completed! +Sep 05, 2023 1:13:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wr1159/ip.git... +Sep 05, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wr1159/ip.git to complete... +Sep 05, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jacksonyuan256/ip.git completed! +Sep 05, 2023 1:13:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AndrewJanong/ip.git (master)... -Sep 04, 2023 1:44:29 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dickongwd/ip.git completed! +Sep 05, 2023 1:13:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Nauxe/ip.git... +Sep 05, 2023 1:13:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yyyaohhh/ip.git... +Sep 05, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/suryanshkushwaha/ip.git completed! +Sep 05, 2023 1:13:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AndrewJanong/ip.git (master)... -Sep 04, 2023 1:44:29 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AndrewJanong/ip.git (master) completed! -Sep 04, 2023 1:44:29 PM reposense.report.ReportGenerator analyzeRepos -INFO: [294/480] Analyzing https://github.com/Kailash201/ip.git (master)... -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ChuanXinNg/ip.git completed! -Sep 04, 2023 1:44:29 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Kailash201/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Kailash201/ip.git (master)... -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/saraozn/ip.git... -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/saraozn/ip.git to complete... -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kenvynKwek/ip.git completed! -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nicholastng010601/ip.git... -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Ruizhi2001/ip.git completed! -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nicholastng010601/ip.git to complete... -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/prawnzyy/ip.git completed! -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/DistractedCat/ip.git... -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yezkez10/ip.git... -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/DistractedCat/ip.git to complete... -Sep 04, 2023 1:44:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yezkez10/ip.git to complete... -Sep 04, 2023 1:44:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/laurenlim2112/ip.git (master)... -Sep 04, 2023 1:44:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/laurenlim2112/ip.git (master)... -Sep 04, 2023 1:44:30 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/laurenlim2112/ip.git (master) completed! -Sep 04, 2023 1:44:30 PM reposense.report.ReportGenerator analyzeRepos -INFO: [295/480] Analyzing https://github.com/sk2001git/ip.git (master)... -Sep 04, 2023 1:44:30 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/sk2001git/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/sk2001git/ip.git (master)... -Sep 04, 2023 1:44:30 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yyyaohhh/ip.git to complete... +Sep 05, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Nauxe/ip.git to complete... +Sep 05, 2023 1:13:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zhanyang01/ip.git... +Sep 05, 2023 1:13:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [294/480] Analyzing https://github.com/laurenlim2112/ip.git (master)... +Sep 05, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zhanyang01/ip.git to complete... +Sep 05, 2023 1:13:09 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/laurenlim2112/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/laurenlim2112/ip.git (master)... +Sep 05, 2023 1:13:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Kailash201/ip.git (master)... -Sep 04, 2023 1:44:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Kailash201/ip.git (master)... -Sep 04, 2023 1:44:30 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Kailash201/ip.git (master) completed! -Sep 04, 2023 1:44:30 PM reposense.report.ReportGenerator analyzeRepos -INFO: [296/480] Analyzing https://github.com/lambraydon/ip.git (master)... -Sep 04, 2023 1:44:30 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [295/480] Analyzing https://github.com/lambraydon/ip.git (master)... +Sep 05, 2023 1:13:09 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lambraydon/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lambraydon/ip.git (master)... -Sep 04, 2023 1:44:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nicholastng010601/ip.git completed! -Sep 04, 2023 1:44:30 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/revdrag/ip.git... -Sep 04, 2023 1:44:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/revdrag/ip.git to complete... -Sep 04, 2023 1:44:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/saraozn/ip.git completed! -Sep 04, 2023 1:44:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/DistractedCat/ip.git completed! -Sep 04, 2023 1:44:30 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/alvinlim277/ip.git... -Sep 04, 2023 1:44:30 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/JasonRay168/ip.git... -Sep 04, 2023 1:44:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/JasonRay168/ip.git to complete... -Sep 04, 2023 1:44:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/alvinlim277/ip.git to complete... -Sep 04, 2023 1:44:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yezkez10/ip.git completed! -Sep 04, 2023 1:44:30 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/billieboy7/ip.git... -Sep 04, 2023 1:44:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/billieboy7/ip.git to complete... -Sep 04, 2023 1:44:30 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/sk2001git/ip.git (master)... -Sep 04, 2023 1:44:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/sk2001git/ip.git (master)... -Sep 04, 2023 1:44:30 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/sk2001git/ip.git (master) completed! -Sep 04, 2023 1:44:30 PM reposense.report.ReportGenerator analyzeRepos -INFO: [297/480] Analyzing https://github.com/chonguschonguschongus/ip.git (master)... -Sep 04, 2023 1:44:30 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/chonguschonguschongus/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/chonguschonguschongus/ip.git (master)... -Sep 04, 2023 1:44:30 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wr1159/ip.git completed! +Sep 05, 2023 1:13:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/laurenlim2112/ip.git (master)... +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/czhiruo/ip.git... +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/czhiruo/ip.git to complete... +Sep 05, 2023 1:13:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/laurenlim2112/ip.git (master)... +Sep 05, 2023 1:13:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/laurenlim2112/ip.git (master) completed! +Sep 05, 2023 1:13:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [296/480] Analyzing https://github.com/peasantbird/ip.git (master)... +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zhanyang01/ip.git completed! +Sep 05, 2023 1:13:10 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/peasantbird/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/peasantbird/ip.git (master)... +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Nauxe/ip.git completed! +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/victorpengmx/ip.git... +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/longnguyentan/ip.git... +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yyyaohhh/ip.git completed! +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/longnguyentan/ip.git to complete... +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/victorpengmx/ip.git to complete... +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Cikguseven/ip.git... +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Cikguseven/ip.git to complete... +Sep 05, 2023 1:13:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lambraydon/ip.git (master)... -Sep 04, 2023 1:44:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lambraydon/ip.git (master)... -Sep 04, 2023 1:44:30 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:10 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lambraydon/ip.git (master) completed! -Sep 04, 2023 1:44:30 PM reposense.report.ReportGenerator analyzeRepos -INFO: [298/480] Analyzing https://github.com/WangCheng0116/ip.git (master)... -Sep 04, 2023 1:44:30 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WangCheng0116/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WangCheng0116/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [297/480] Analyzing https://github.com/sk2001git/ip.git (master)... +Sep 05, 2023 1:13:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/peasantbird/ip.git (master)... +Sep 05, 2023 1:13:10 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/sk2001git/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/sk2001git/ip.git (master)... +Sep 05, 2023 1:13:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/peasantbird/ip.git (master)... +Sep 05, 2023 1:13:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/peasantbird/ip.git (master) completed! +Sep 05, 2023 1:13:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [298/480] Analyzing https://github.com/chonguschonguschongus/ip.git (master)... +Sep 05, 2023 1:13:10 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/chonguschonguschongus/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/chonguschonguschongus/ip.git (master)... +Sep 05, 2023 1:13:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/chonguschonguschongus/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/czhiruo/ip.git completed! +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Eola-Z/ip.git... +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Eola-Z/ip.git to complete... +Sep 05, 2023 1:13:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/chonguschonguschongus/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JasonRay168/ip.git completed! -Sep 04, 2023 1:44:31 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/victorpengmx/ip.git completed! +Sep 05, 2023 1:13:10 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/chonguschonguschongus/ip.git (master) completed! -Sep 04, 2023 1:44:31 PM reposense.report.ReportGenerator analyzeRepos -INFO: [299/480] Analyzing https://github.com/peasantbird/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jannnice/ip.git... -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jannnice/ip.git to complete... -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/revdrag/ip.git completed! -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/evanyan13/ip.git... -Sep 04, 2023 1:44:31 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/peasantbird/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/peasantbird/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/alvinlim277/ip.git completed! -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/evanyan13/ip.git to complete... -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/samuelim01/ip.git... -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/billieboy7/ip.git completed! -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/samuelim01/ip.git to complete... -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dinde2004/ip.git... -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dinde2004/ip.git to complete... -Sep 04, 2023 1:44:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/WangCheng0116/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/WangCheng0116/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/WangCheng0116/ip.git (master) completed! -Sep 04, 2023 1:44:31 PM reposense.report.ReportGenerator analyzeRepos -INFO: [300/480] Analyzing https://github.com/lshaoqin/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [299/480] Analyzing https://github.com/lshaoqin/ip.git (master)... +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jibtaf/ip.git... +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/longnguyentan/ip.git completed! +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Cikguseven/ip.git completed! +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lipwei1808/ip.git... +Sep 05, 2023 1:13:10 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lshaoqin/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lshaoqin/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/peasantbird/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/peasantbird/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/peasantbird/ip.git (master) completed! -Sep 04, 2023 1:44:31 PM reposense.report.ReportGenerator analyzeRepos -INFO: [301/480] Analyzing https://github.com/teozhengyang/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/teozhengyang/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/teozhengyang/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jibtaf/ip.git to complete... +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Mohammed-Faizzzz/ip.git... +Sep 05, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lipwei1808/ip.git to complete... +Sep 05, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Mohammed-Faizzzz/ip.git to complete... +Sep 05, 2023 1:13:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/sk2001git/ip.git (master)... +Sep 05, 2023 1:13:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/sk2001git/ip.git (master)... +Sep 05, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/sk2001git/ip.git (master) completed! +Sep 05, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [300/480] Analyzing https://github.com/chewjh1234/ip.git (master)... +Sep 05, 2023 1:13:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/chewjh1234/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/chewjh1234/ip.git (master)... +Sep 05, 2023 1:13:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lshaoqin/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lshaoqin/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lshaoqin/ip.git (master) completed! -Sep 04, 2023 1:44:31 PM reposense.report.ReportGenerator analyzeRepos -INFO: [302/480] Analyzing https://github.com/lynnlow175/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lynnlow175/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lynnlow175/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [301/480] Analyzing https://github.com/teozhengyang/ip.git (master)... +Sep 05, 2023 1:13:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/teozhengyang/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/teozhengyang/ip.git (master)... +Sep 05, 2023 1:13:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/chewjh1234/ip.git (master)... +Sep 05, 2023 1:13:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/chewjh1234/ip.git (master)... +Sep 05, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/chewjh1234/ip.git (master) completed! +Sep 05, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [302/480] Analyzing https://github.com/elaineshijie/ip.git (master)... +Sep 05, 2023 1:13:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/elaineshijie/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/elaineshijie/ip.git (master)... +Sep 05, 2023 1:13:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/teozhengyang/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/teozhengyang/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/teozhengyang/ip.git (master) completed! -Sep 04, 2023 1:44:31 PM reposense.report.ReportGenerator analyzeRepos -INFO: [303/480] Analyzing https://github.com/elaineshijie/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/elaineshijie/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/elaineshijie/ip.git (master)... -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jannnice/ip.git completed! -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/seanpzk/ip.git... -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/seanpzk/ip.git to complete... -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dinde2004/ip.git completed! -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/samuelim01/ip.git completed! -Sep 04, 2023 1:44:31 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/KumChaiYin/ip.git... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/KumChaiYin/ip.git to complete... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lsyurea/ip.git... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/evanyan13/ip.git completed! -Sep 04, 2023 1:44:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lynnlow175/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lsyurea/ip.git to complete... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Sasmik23/ip.git... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Sasmik23/ip.git to complete... -Sep 04, 2023 1:44:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lynnlow175/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lynnlow175/ip.git (master) completed! -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator analyzeRepos -INFO: [304/480] Analyzing https://github.com/chewjh1234/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/chewjh1234/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/chewjh1234/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [303/480] Analyzing https://github.com/WangCheng0116/ip.git (master)... +Sep 05, 2023 1:13:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WangCheng0116/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WangCheng0116/ip.git (master)... +Sep 05, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lipwei1808/ip.git completed! +Sep 05, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Eola-Z/ip.git completed! +Sep 05, 2023 1:13:11 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dylkaw/ip.git... +Sep 05, 2023 1:13:11 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nikele2001/ip.git... +Sep 05, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nikele2001/ip.git to complete... +Sep 05, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dylkaw/ip.git to complete... +Sep 05, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Mohammed-Faizzzz/ip.git completed! +Sep 05, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jibtaf/ip.git completed! +Sep 05, 2023 1:13:11 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/DeltonCheng/ip.git... +Sep 05, 2023 1:13:11 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ChangruHenryQian/ip.git... +Sep 05, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ChangruHenryQian/ip.git to complete... +Sep 05, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/DeltonCheng/ip.git to complete... +Sep 05, 2023 1:13:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/elaineshijie/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/elaineshijie/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/elaineshijie/ip.git (master) completed! -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator analyzeRepos -INFO: [305/480] Analyzing https://github.com/lordidiot/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lordidiot/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lordidiot/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/chewjh1234/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/chewjh1234/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/chewjh1234/ip.git (master) completed! -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator analyzeRepos -INFO: [306/480] Analyzing https://github.com/chew01/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/elaineshijie/ip.git (master)... +Sep 05, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/elaineshijie/ip.git (master) completed! +Sep 05, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [304/480] Analyzing https://github.com/lynnlow175/ip.git (master)... +Sep 05, 2023 1:13:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lynnlow175/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lynnlow175/ip.git (master)... +Sep 05, 2023 1:13:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lynnlow175/ip.git (master)... +Sep 05, 2023 1:13:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lynnlow175/ip.git (master)... +Sep 05, 2023 1:13:12 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lynnlow175/ip.git (master) completed! +Sep 05, 2023 1:13:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [305/480] Analyzing https://github.com/chew01/ip.git (master)... +Sep 05, 2023 1:13:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/WangCheng0116/ip.git (master)... +Sep 05, 2023 1:13:12 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/chew01/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/chew01/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/seanpzk/ip.git completed! -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/geraldngjx/ip.git... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/geraldngjx/ip.git to complete... -Sep 04, 2023 1:44:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lordidiot/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/KumChaiYin/ip.git completed! -Sep 04, 2023 1:44:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lordidiot/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lordidiot/ip.git (master) completed! -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Sasmik23/ip.git completed! -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator analyzeRepos -INFO: [307/480] Analyzing https://github.com/RSXIX/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lululwtv/ip.git... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/garylow2001/ip.git... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/garylow2001/ip.git to complete... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lululwtv/ip.git to complete... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lsyurea/ip.git completed! -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/WangCheng0116/ip.git (master)... +Sep 05, 2023 1:13:12 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/WangCheng0116/ip.git (master) completed! +Sep 05, 2023 1:13:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [306/480] Analyzing https://github.com/RSXIX/ip.git (master)... +Sep 05, 2023 1:13:12 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/RSXIX/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/RSXIX/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/leontan2/ip.git... -Sep 04, 2023 1:44:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/leontan2/ip.git to complete... -Sep 04, 2023 1:44:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/chew01/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ChangruHenryQian/ip.git completed! +Sep 05, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dylkaw/ip.git completed! +Sep 05, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/craigtonlian/ip.git... +Sep 05, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ruo-x/ip.git... +Sep 05, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nikele2001/ip.git completed! +Sep 05, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/craigtonlian/ip.git to complete... +Sep 05, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/iantsaii/ip.git... +Sep 05, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ruo-x/ip.git to complete... +Sep 05, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/DeltonCheng/ip.git completed! +Sep 05, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/iantsaii/ip.git to complete... +Sep 05, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wjacobw/ip.git... +Sep 05, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wjacobw/ip.git to complete... +Sep 05, 2023 1:13:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/RSXIX/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/RSXIX/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/RSXIX/ip.git (master) completed! -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator analyzeRepos -INFO: [308/480] Analyzing https://github.com/juliusgambe/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [307/480] Analyzing https://github.com/lordidiot/ip.git (master)... +Sep 05, 2023 1:13:12 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lordidiot/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lordidiot/ip.git (master)... +Sep 05, 2023 1:13:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/chew01/ip.git (master)... +Sep 05, 2023 1:13:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/chew01/ip.git (master)... -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/chew01/ip.git (master) completed! -Sep 04, 2023 1:44:32 PM reposense.report.ReportGenerator analyzeRepos -INFO: [309/480] Analyzing https://github.com/zhonghan721/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [308/480] Analyzing https://github.com/juliusgambe/ip.git (master)... +Sep 05, 2023 1:13:12 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/juliusgambe/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/juliusgambe/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lordidiot/ip.git (master)... +Sep 05, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/craigtonlian/ip.git completed! +Sep 05, 2023 1:13:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lordidiot/ip.git (master)... +Sep 05, 2023 1:13:12 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lordidiot/ip.git (master) completed! +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/angkyakdifp/ip.git... +Sep 05, 2023 1:13:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [309/480] Analyzing https://github.com/inezkok/ip.git (master)... +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/angkyakdifp/ip.git to complete... +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wjacobw/ip.git completed! +Sep 05, 2023 1:13:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/inezkok/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/inezkok/ip.git (master)... +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/brein62/ip.git... +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/brein62/ip.git to complete... +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/iantsaii/ip.git completed! +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ruo-x/ip.git completed! +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nicrandomlee/ip.git... +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Bryan-Goh/ip.git... +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Bryan-Goh/ip.git to complete... +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nicrandomlee/ip.git to complete... +Sep 05, 2023 1:13:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/juliusgambe/ip.git (master)... +Sep 05, 2023 1:13:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/juliusgambe/ip.git (master)... +Sep 05, 2023 1:13:13 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/juliusgambe/ip.git (master) completed! +Sep 05, 2023 1:13:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [310/480] Analyzing https://github.com/zhonghan721/ip.git (master)... +Sep 05, 2023 1:13:13 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/zhonghan721/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/zhonghan721/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/geraldngjx/ip.git completed! -Sep 04, 2023 1:44:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wamps-jp/ip.git... -Sep 04, 2023 1:44:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wamps-jp/ip.git to complete... -Sep 04, 2023 1:44:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lululwtv/ip.git completed! -Sep 04, 2023 1:44:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/inezkok/ip.git (master)... +Sep 05, 2023 1:13:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/inezkok/ip.git (master)... +Sep 05, 2023 1:13:13 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/inezkok/ip.git (master) completed! +Sep 05, 2023 1:13:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [311/480] Analyzing https://github.com/WZWren/ip.git (master)... +Sep 05, 2023 1:13:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WZWren/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WZWren/ip.git (master)... +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/angkyakdifp/ip.git completed! +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kiatkat/ip.git... +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kiatkat/ip.git to complete... +Sep 05, 2023 1:13:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/zhonghan721/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dickongwd/ip.git... -Sep 04, 2023 1:44:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/garylow2001/ip.git completed! -Sep 04, 2023 1:44:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jacksonyuan256/ip.git... -Sep 04, 2023 1:44:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dickongwd/ip.git to complete... -Sep 04, 2023 1:44:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/leontan2/ip.git completed! -Sep 04, 2023 1:44:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jacksonyuan256/ip.git to complete... -Sep 04, 2023 1:44:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/suryanshkushwaha/ip.git... -Sep 04, 2023 1:44:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/brein62/ip.git completed! +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Bryan-Goh/ip.git completed! +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/MadLamprey/ip.git... +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nicrandomlee/ip.git completed! +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/xyT-T/ip.git... +Sep 05, 2023 1:13:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/zhonghan721/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:13 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/zhonghan721/ip.git (master) completed! -Sep 04, 2023 1:44:33 PM reposense.report.ReportGenerator analyzeRepos -INFO: [310/480] Analyzing https://github.com/WZWren/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/suryanshkushwaha/ip.git to complete... -Sep 04, 2023 1:44:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/juliusgambe/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WZWren/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WZWren/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/juliusgambe/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/juliusgambe/ip.git (master) completed! -Sep 04, 2023 1:44:33 PM reposense.report.ReportGenerator analyzeRepos -INFO: [311/480] Analyzing https://github.com/wasjoe1/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [312/480] Analyzing https://github.com/wasjoe1/ip.git (master)... +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/xyT-T/ip.git to complete... +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jiakai-17/ip.git... +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/MadLamprey/ip.git to complete... +Sep 05, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jiakai-17/ip.git to complete... +Sep 05, 2023 1:13:13 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wasjoe1/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wasjoe1/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/WZWren/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wamps-jp/ip.git completed! -Sep 04, 2023 1:44:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wr1159/ip.git... -Sep 04, 2023 1:44:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/WZWren/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/WZWren/ip.git (master) completed! -Sep 04, 2023 1:44:33 PM reposense.report.ReportGenerator analyzeRepos -INFO: [312/480] Analyzing https://github.com/inezkok/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wr1159/ip.git to complete... -Sep 04, 2023 1:44:33 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/inezkok/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/inezkok/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [313/480] Analyzing https://github.com/nananakx-x/ip.git (master)... +Sep 05, 2023 1:13:14 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nananakx-x/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nananakx-x/ip.git (master)... +Sep 05, 2023 1:13:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wasjoe1/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wasjoe1/ip.git (master)... -Sep 04, 2023 1:44:33 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wasjoe1/ip.git (master) completed! -Sep 04, 2023 1:44:34 PM reposense.report.ReportGenerator analyzeRepos -INFO: [313/480] Analyzing https://github.com/kokrui/ip.git (master)... -Sep 04, 2023 1:44:34 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kokrui/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kokrui/ip.git (master)... -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/suryanshkushwaha/ip.git completed! -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Nauxe/ip.git... -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Nauxe/ip.git to complete... -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dickongwd/ip.git completed! -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yyyaohhh/ip.git... -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yyyaohhh/ip.git to complete... -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jacksonyuan256/ip.git completed! -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zhanyang01/ip.git... -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zhanyang01/ip.git to complete... -Sep 04, 2023 1:44:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kokrui/ip.git (master)... -Sep 04, 2023 1:44:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kokrui/ip.git (master)... -Sep 04, 2023 1:44:34 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kokrui/ip.git (master) completed! -Sep 04, 2023 1:44:34 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepos INFO: [314/480] Analyzing https://github.com/jinyang628/ip.git (master)... -Sep 04, 2023 1:44:34 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:14 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jinyang628/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jinyang628/ip.git (master)... -Sep 04, 2023 1:44:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/inezkok/ip.git (master)... -Sep 04, 2023 1:44:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/inezkok/ip.git (master)... -Sep 04, 2023 1:44:34 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/inezkok/ip.git (master) completed! -Sep 04, 2023 1:44:34 PM reposense.report.ReportGenerator analyzeRepos -INFO: [315/480] Analyzing https://github.com/nananakx-x/ip.git (master)... -Sep 04, 2023 1:44:34 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nananakx-x/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nananakx-x/ip.git (master)... -Sep 04, 2023 1:44:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kiatkat/ip.git completed! +Sep 05, 2023 1:13:14 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nreHieW/ip.git... +Sep 05, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/MadLamprey/ip.git completed! +Sep 05, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nreHieW/ip.git to complete... +Sep 05, 2023 1:13:14 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nathanielcalimag/ip.git... +Sep 05, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nathanielcalimag/ip.git to complete... +Sep 05, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xyT-T/ip.git completed! +Sep 05, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jiakai-17/ip.git completed! +Sep 05, 2023 1:13:14 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Saezenn/ip.git... +Sep 05, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Saezenn/ip.git to complete... +Sep 05, 2023 1:13:14 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jellywaiyan/ip.git... +Sep 05, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jellywaiyan/ip.git to complete... +Sep 05, 2023 1:13:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nananakx-x/ip.git (master)... +Sep 05, 2023 1:13:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nananakx-x/ip.git (master)... +Sep 05, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nananakx-x/ip.git (master) completed! +Sep 05, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [315/480] Analyzing https://github.com/kokrui/ip.git (master)... +Sep 05, 2023 1:13:14 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kokrui/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kokrui/ip.git (master)... +Sep 05, 2023 1:13:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jinyang628/ip.git (master)... -Sep 04, 2023 1:44:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kokrui/ip.git (master)... +Sep 05, 2023 1:13:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jinyang628/ip.git (master)... -Sep 04, 2023 1:44:34 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jinyang628/ip.git (master) completed! -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wr1159/ip.git completed! -Sep 04, 2023 1:44:34 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepos INFO: [316/480] Analyzing https://github.com/ylyma/ip.git (master)... -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/czhiruo/ip.git... -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/czhiruo/ip.git to complete... -Sep 04, 2023 1:44:34 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kokrui/ip.git (master)... +Sep 05, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kokrui/ip.git (master) completed! +Sep 05, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [317/480] Analyzing https://github.com/timetraveller-123/ip.git (master)... +Sep 05, 2023 1:13:14 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ylyma/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ylyma/ip.git (master)... -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Nauxe/ip.git completed! -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/victorpengmx/ip.git... -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/victorpengmx/ip.git to complete... -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yyyaohhh/ip.git completed! -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zhanyang01/ip.git completed! -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/longnguyentan/ip.git... -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Cikguseven/ip.git... -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Cikguseven/ip.git to complete... -Sep 04, 2023 1:44:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/longnguyentan/ip.git to complete... -Sep 04, 2023 1:44:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nananakx-x/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nananakx-x/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nananakx-x/ip.git (master) completed! -Sep 04, 2023 1:44:35 PM reposense.report.ReportGenerator analyzeRepos -INFO: [317/480] Analyzing https://github.com/AnnabelTing/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:14 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/timetraveller-123/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/timetraveller-123/ip.git (master)... +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nreHieW/ip.git completed! +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/marquestye/ip.git... +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/marquestye/ip.git to complete... +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nathanielcalimag/ip.git completed! +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Saezenn/ip.git completed! +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Tang-Moyan/ip.git... +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/DonovanJJ/ip.git... +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Tang-Moyan/ip.git to complete... +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/DonovanJJ/ip.git to complete... +Sep 05, 2023 1:13:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/timetraveller-123/ip.git (master)... +Sep 05, 2023 1:13:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/timetraveller-123/ip.git (master)... +Sep 05, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/timetraveller-123/ip.git (master) completed! +Sep 05, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepos +INFO: [318/480] Analyzing https://github.com/AnnabelTing/ip.git (master)... +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jellywaiyan/ip.git completed! +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Sebtey/ip.git... +Sep 05, 2023 1:13:15 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AnnabelTing/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AnnabelTing/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Sebtey/ip.git to complete... +Sep 05, 2023 1:13:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ylyma/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ylyma/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ylyma/ip.git (master) completed! -Sep 04, 2023 1:44:35 PM reposense.report.ReportGenerator analyzeRepos -INFO: [318/480] Analyzing https://github.com/timetraveller-123/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/timetraveller-123/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/timetraveller-123/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AnnabelTing/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AnnabelTing/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AnnabelTing/ip.git (master) completed! -Sep 04, 2023 1:44:35 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepos INFO: [319/480] Analyzing https://github.com/LicongHuang/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:15 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/LicongHuang/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/LicongHuang/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/czhiruo/ip.git completed! -Sep 04, 2023 1:44:35 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Eola-Z/ip.git... -Sep 04, 2023 1:44:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Eola-Z/ip.git to complete... -Sep 04, 2023 1:44:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/victorpengmx/ip.git completed! -Sep 04, 2023 1:44:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/longnguyentan/ip.git completed! -Sep 04, 2023 1:44:35 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jibtaf/ip.git... -Sep 04, 2023 1:44:35 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lipwei1808/ip.git... -Sep 04, 2023 1:44:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lipwei1808/ip.git to complete... -Sep 04, 2023 1:44:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jibtaf/ip.git to complete... -Sep 04, 2023 1:44:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Cikguseven/ip.git completed! -Sep 04, 2023 1:44:35 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Mohammed-Faizzzz/ip.git... -Sep 04, 2023 1:44:35 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Mohammed-Faizzzz/ip.git to complete... -Sep 04, 2023 1:44:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/timetraveller-123/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/timetraveller-123/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/timetraveller-123/ip.git (master) completed! -Sep 04, 2023 1:44:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LicongHuang/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AnnabelTing/ip.git (master)... +Sep 05, 2023 1:13:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AnnabelTing/ip.git (master)... +Sep 05, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AnnabelTing/ip.git (master) completed! +Sep 05, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepos INFO: [320/480] Analyzing https://github.com/Jweng88/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:15 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Jweng88/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Jweng88/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LicongHuang/ip.git (master)... +Sep 05, 2023 1:13:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LicongHuang/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LicongHuang/ip.git (master) completed! -Sep 04, 2023 1:44:35 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepos INFO: [321/480] Analyzing https://github.com/EricXiong420/ip.git (master)... -Sep 04, 2023 1:44:35 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:15 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/EricXiong420/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/EricXiong420/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Tang-Moyan/ip.git completed! +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/rionshocker/ip.git... +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/marquestye/ip.git completed! +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tyouwei/ip.git... +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/rionshocker/ip.git to complete... +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tyouwei/ip.git to complete... +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Sebtey/ip.git completed! +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Blizzeracz/ip.git... +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/DonovanJJ/ip.git completed! +Sep 05, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Blizzeracz/ip.git to complete... +Sep 05, 2023 1:13:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Jweng88/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Jweng88/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Jweng88/ip.git (master) completed! -Sep 04, 2023 1:44:36 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepos INFO: [322/480] Analyzing https://github.com/jovkusuma/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jovkusuma/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jovkusuma/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/EricXiong420/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/EricXiong420/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/EricXiong420/ip.git (master) completed! -Sep 04, 2023 1:44:36 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepos INFO: [323/480] Analyzing https://github.com/bhnuka/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/bhnuka/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/bhnuka/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Mohammed-Faizzzz/ip.git completed! -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lipwei1808/ip.git completed! -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dylkaw/ip.git... -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jibtaf/ip.git completed! -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nikele2001/ip.git... -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/DeltonCheng/ip.git... -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dylkaw/ip.git to complete... -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nikele2001/ip.git to complete... -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/DeltonCheng/ip.git to complete... -Sep 04, 2023 1:44:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jovkusuma/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jovkusuma/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jovkusuma/ip.git (master) completed! -Sep 04, 2023 1:44:36 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepos INFO: [324/480] Analyzing https://github.com/J-hta-n/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/J-hta-n/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/J-hta-n/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tyouwei/ip.git completed! +Sep 05, 2023 1:13:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/bhnuka/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/bhnuka/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/bhnuka/ip.git (master) completed! -Sep 04, 2023 1:44:36 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepos INFO: [325/480] Analyzing https://github.com/Tim-Siu/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/rionshocker/ip.git completed! +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Tim-Siu/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Tim-Siu/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Blizzeracz/ip.git completed! +Sep 05, 2023 1:13:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/J-hta-n/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/J-hta-n/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/J-hta-n/ip.git (master) completed! -Sep 04, 2023 1:44:36 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepos INFO: [326/480] Analyzing https://github.com/yarnmengnus/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/yarnmengnus/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/yarnmengnus/ip.git (master)... -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dylkaw/ip.git completed! -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/DeltonCheng/ip.git completed! -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ChangruHenryQian/ip.git... -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/craigtonlian/ip.git... -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ChangruHenryQian/ip.git to complete... -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nikele2001/ip.git completed! -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/craigtonlian/ip.git to complete... -Sep 04, 2023 1:44:36 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ruo-x/ip.git... -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ruo-x/ip.git to complete... -Sep 04, 2023 1:44:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Tim-Siu/ip.git (master)... -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Eola-Z/ip.git completed! -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/iantsaii/ip.git... -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/iantsaii/ip.git to complete... -Sep 04, 2023 1:44:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Tim-Siu/ip.git (master)... -Sep 04, 2023 1:44:37 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Tim-Siu/ip.git (master) completed! -Sep 04, 2023 1:44:37 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepos INFO: [327/480] Analyzing https://github.com/sopa301/ip.git (master)... -Sep 04, 2023 1:44:37 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yarnmengnus/ip.git (master)... +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sopa301/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sopa301/ip.git (master)... -Sep 04, 2023 1:44:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yarnmengnus/ip.git (master)... -Sep 04, 2023 1:44:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yarnmengnus/ip.git (master)... -Sep 04, 2023 1:44:37 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yarnmengnus/ip.git (master) completed! -Sep 04, 2023 1:44:37 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepos INFO: [328/480] Analyzing https://github.com/ngeeyonglim/ip.git (master)... -Sep 04, 2023 1:44:37 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:16 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ngeeyonglim/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ngeeyonglim/ip.git (master)... -Sep 04, 2023 1:44:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sopa301/ip.git (master)... -Sep 04, 2023 1:44:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ngeeyonglim/ip.git (master)... +Sep 05, 2023 1:13:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sopa301/ip.git (master)... -Sep 04, 2023 1:44:37 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:17 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sopa301/ip.git (master) completed! -Sep 04, 2023 1:44:37 PM reposense.report.ReportGenerator analyzeRepos -INFO: [329/480] Analyzing https://github.com/flexibo/ip.git (master)... -Sep 04, 2023 1:44:37 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/flexibo/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/flexibo/ip.git (master)... -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/craigtonlian/ip.git completed! -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ChangruHenryQian/ip.git completed! -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wjacobw/ip.git... -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/angkyakdifp/ip.git... -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ruo-x/ip.git completed! -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wjacobw/ip.git to complete... -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/iantsaii/ip.git completed! -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/angkyakdifp/ip.git to complete... -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/brein62/ip.git... -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nicrandomlee/ip.git... -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/brein62/ip.git to complete... -Sep 04, 2023 1:44:37 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nicrandomlee/ip.git to complete... -Sep 04, 2023 1:44:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ngeeyonglim/ip.git (master)... -Sep 04, 2023 1:44:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ngeeyonglim/ip.git (master)... -Sep 04, 2023 1:44:37 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:17 AM reposense.report.ReportGenerator analyzeRepos +INFO: [329/480] Analyzing https://github.com/flexibo/ip.git (master)... +Sep 05, 2023 1:13:17 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ngeeyonglim/ip.git (master) completed! -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:17 AM reposense.report.ReportGenerator analyzeRepos INFO: [330/480] Analyzing https://github.com/ItsTYtan/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/flexibo/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:17 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/flexibo/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/flexibo/ip.git (master)... +Sep 05, 2023 1:13:17 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ItsTYtan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ItsTYtan/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ItsTYtan/ip.git (master)... +Sep 05, 2023 1:13:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ItsTYtan/ip.git (master)... +Sep 05, 2023 1:13:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/flexibo/ip.git (master)... +Sep 05, 2023 1:13:17 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ItsTYtan/ip.git (master) completed! +Sep 05, 2023 1:13:17 AM reposense.report.ReportGenerator analyzeRepos +INFO: [331/480] Analyzing https://github.com/javinchua/ip.git (master)... +Sep 05, 2023 1:13:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/flexibo/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:17 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/flexibo/ip.git (master) completed! -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator analyzeRepos -INFO: [331/480] Analyzing https://github.com/amosting/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:17 AM reposense.report.ReportGenerator analyzeRepos +INFO: [332/480] Analyzing https://github.com/amosting/ip.git (master)... +Sep 05, 2023 1:13:17 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/javinchua/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/javinchua/ip.git (master)... +Sep 05, 2023 1:13:17 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/amosting/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/amosting/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/amosting/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ItsTYtan/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/amosting/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:17 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/amosting/ip.git (master) completed! -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator analyzeRepos -INFO: [332/480] Analyzing https://github.com/javinchua/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ItsTYtan/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ItsTYtan/ip.git (master) completed! -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:17 AM reposense.report.ReportGenerator analyzeRepos INFO: [333/480] Analyzing https://github.com/Cleon2/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/javinchua/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/javinchua/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:17 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Cleon2/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Cleon2/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nicrandomlee/ip.git completed! -Sep 04, 2023 1:44:38 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Bryan-Goh/ip.git... -Sep 04, 2023 1:44:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Bryan-Goh/ip.git to complete... -Sep 04, 2023 1:44:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/brein62/ip.git completed! -Sep 04, 2023 1:44:38 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kiatkat/ip.git... -Sep 04, 2023 1:44:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wjacobw/ip.git completed! -Sep 04, 2023 1:44:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/angkyakdifp/ip.git completed! -Sep 04, 2023 1:44:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kiatkat/ip.git to complete... -Sep 04, 2023 1:44:38 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/MadLamprey/ip.git... -Sep 04, 2023 1:44:38 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/xyT-T/ip.git... -Sep 04, 2023 1:44:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/xyT-T/ip.git to complete... -Sep 04, 2023 1:44:38 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/MadLamprey/ip.git to complete... -Sep 04, 2023 1:44:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Cleon2/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Cleon2/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Cleon2/ip.git (master) completed! -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/javinchua/ip.git (master)... +Sep 05, 2023 1:13:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/javinchua/ip.git (master)... +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/javinchua/ip.git (master) completed! +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepos INFO: [334/480] Analyzing https://github.com/ketweeen/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ketweeen/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ketweeen/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ketweeen/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ketweeen/ip.git (master)... -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ketweeen/ip.git (master) completed! -Sep 04, 2023 1:44:38 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Cleon2/ip.git (master)... +Sep 05, 2023 1:13:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Cleon2/ip.git (master)... +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Cleon2/ip.git (master) completed! +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepos INFO: [335/480] Analyzing https://github.com/sudarshan2401/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/javinchua/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sudarshan2401/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sudarshan2401/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/javinchua/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/javinchua/ip.git (master) completed! -Sep 04, 2023 1:44:39 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ketweeen/ip.git (master)... +Sep 05, 2023 1:13:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ketweeen/ip.git (master)... +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ketweeen/ip.git (master) completed! +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepos INFO: [336/480] Analyzing https://github.com/wui-hong/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wui-hong/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wui-hong/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Bryan-Goh/ip.git completed! -Sep 04, 2023 1:44:39 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jiakai-17/ip.git... -Sep 04, 2023 1:44:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jiakai-17/ip.git to complete... -Sep 04, 2023 1:44:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xyT-T/ip.git completed! -Sep 04, 2023 1:44:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/MadLamprey/ip.git completed! -Sep 04, 2023 1:44:39 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nreHieW/ip.git... -Sep 04, 2023 1:44:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kiatkat/ip.git completed! -Sep 04, 2023 1:44:39 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nathanielcalimag/ip.git... -Sep 04, 2023 1:44:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nreHieW/ip.git to complete... -Sep 04, 2023 1:44:39 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Saezenn/ip.git... -Sep 04, 2023 1:44:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nathanielcalimag/ip.git to complete... -Sep 04, 2023 1:44:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Saezenn/ip.git to complete... -Sep 04, 2023 1:44:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/sudarshan2401/ip.git (master)... +Sep 05, 2023 1:13:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/sudarshan2401/ip.git (master)... +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/sudarshan2401/ip.git (master) completed! +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [337/480] Analyzing https://github.com/Respirayson/ip.git (master)... +Sep 05, 2023 1:13:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wui-hong/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wui-hong/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wui-hong/ip.git (master) completed! -Sep 04, 2023 1:44:39 PM reposense.report.ReportGenerator analyzeRepos -INFO: [337/480] Analyzing https://github.com/Respirayson/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/sudarshan2401/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Respirayson/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Respirayson/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/sudarshan2401/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/sudarshan2401/ip.git (master) completed! -Sep 04, 2023 1:44:39 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepos INFO: [338/480] Analyzing https://github.com/Chrainx/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Chrainx/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Chrainx/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Chrainx/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Chrainx/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Chrainx/ip.git (master) completed! -Sep 04, 2023 1:44:39 PM reposense.report.ReportGenerator analyzeRepos -INFO: [339/480] Analyzing https://github.com/sunzihan23/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jiakai-17/ip.git completed! -Sep 04, 2023 1:44:39 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/sunzihan23/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/sunzihan23/ip.git (master)... -Sep 04, 2023 1:44:39 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jellywaiyan/ip.git... -Sep 04, 2023 1:44:39 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jellywaiyan/ip.git to complete... -Sep 04, 2023 1:44:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [339/480] Analyzing https://github.com/shishirbychapur/ip.git (master)... +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/shishirbychapur/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/shishirbychapur/ip.git (master)... +Sep 05, 2023 1:13:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Respirayson/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Respirayson/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Respirayson/ip.git (master) completed! -Sep 04, 2023 1:44:40 PM reposense.report.ReportGenerator analyzeRepos -INFO: [340/480] Analyzing https://github.com/shishirbychapur/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nreHieW/ip.git completed! -Sep 04, 2023 1:44:40 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/shishirbychapur/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/shishirbychapur/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nathanielcalimag/ip.git completed! -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/marquestye/ip.git... -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Saezenn/ip.git completed! -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Tang-Moyan/ip.git... -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/marquestye/ip.git to complete... -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/DonovanJJ/ip.git... -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Tang-Moyan/ip.git to complete... -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/DonovanJJ/ip.git to complete... -Sep 04, 2023 1:44:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [340/480] Analyzing https://github.com/sunzihan23/ip.git (master)... +Sep 05, 2023 1:13:18 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/sunzihan23/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/sunzihan23/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/shishirbychapur/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sunzihan23/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/shishirbychapur/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sunzihan23/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sunzihan23/ip.git (master) completed! -Sep 04, 2023 1:44:40 PM reposense.report.ReportGenerator analyzeRepos -INFO: [341/480] Analyzing https://github.com/tjch-o/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tjch-o/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tjch-o/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/shishirbychapur/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jellywaiyan/ip.git completed! -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Sebtey/ip.git... -Sep 04, 2023 1:44:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/shishirbychapur/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/shishirbychapur/ip.git (master) completed! -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Sebtey/ip.git to complete... -Sep 04, 2023 1:44:40 PM reposense.report.ReportGenerator analyzeRepos -INFO: [342/480] Analyzing https://github.com/wj331/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tjch-o/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [341/480] Analyzing https://github.com/wj331/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [342/480] Analyzing https://github.com/tjch-o/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wj331/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wj331/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tjch-o/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tjch-o/ip.git (master) completed! -Sep 04, 2023 1:44:40 PM reposense.report.ReportGenerator analyzeRepos -INFO: [343/480] Analyzing https://github.com/licongshen12/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/DonovanJJ/ip.git completed! -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/rionshocker/ip.git... -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Tang-Moyan/ip.git completed! -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/rionshocker/ip.git to complete... -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tyouwei/ip.git... -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tyouwei/ip.git to complete... -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/marquestye/ip.git completed! -Sep 04, 2023 1:44:40 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/licongshen12/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/licongshen12/ip.git (master)... -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Blizzeracz/ip.git... -Sep 04, 2023 1:44:40 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Blizzeracz/ip.git to complete... -Sep 04, 2023 1:44:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tjch-o/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tjch-o/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wj331/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wj331/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wj331/ip.git (master) completed! -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [343/480] Analyzing https://github.com/licongshen12/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tjch-o/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/licongshen12/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/licongshen12/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tjch-o/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tjch-o/ip.git (master) completed! +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepos INFO: [344/480] Analyzing https://github.com/mamayuan/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/mamayuan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/mamayuan/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mamayuan/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/mamayuan/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mamayuan/ip.git (master) completed! +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [345/480] Analyzing https://github.com/ong-wei-hong/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/licongshen12/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ong-wei-hong/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ong-wei-hong/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/licongshen12/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/licongshen12/ip.git (master) completed! -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator analyzeRepos -INFO: [345/480] Analyzing https://github.com/tanboonkhong/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [346/480] Analyzing https://github.com/tanboonkhong/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tanboonkhong/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tanboonkhong/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mamayuan/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/mamayuan/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mamayuan/ip.git (master) completed! -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator analyzeRepos -INFO: [346/480] Analyzing https://github.com/AlfredBeNoel/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Sebtey/ip.git completed! -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AlfredBeNoel/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AlfredBeNoel/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tanboonkhong/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/rionshocker/ip.git completed! -Sep 04, 2023 1:44:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Blizzeracz/ip.git completed! -Sep 04, 2023 1:44:41 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tyouwei/ip.git completed! -Sep 04, 2023 1:44:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tanboonkhong/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tanboonkhong/ip.git (master) completed! -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepos INFO: [347/480] Analyzing https://github.com/cbj252/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/cbj252/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/cbj252/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ong-wei-hong/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ong-wei-hong/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ong-wei-hong/ip.git (master) completed! +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [348/480] Analyzing https://github.com/AlfredBeNoel/ip.git (master)... +Sep 05, 2023 1:13:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AlfredBeNoel/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AlfredBeNoel/ip.git (master)... +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AlfredBeNoel/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/cbj252/ip.git (master)... +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AlfredBeNoel/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AlfredBeNoel/ip.git (master) completed! -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator analyzeRepos -INFO: [348/480] Analyzing https://github.com/ong-wei-hong/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ong-wei-hong/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ong-wei-hong/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/cbj252/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [349/480] Analyzing https://github.com/keaganpzh/ip.git (master)... +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/cbj252/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/cbj252/ip.git (master) completed! -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator analyzeRepos -INFO: [349/480] Analyzing https://github.com/keaganpzh/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [350/480] Analyzing https://github.com/ElginTZM/ip.git (master)... +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/keaganpzh/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/keaganpzh/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ong-wei-hong/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ong-wei-hong/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ong-wei-hong/ip.git (master) completed! -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator analyzeRepos -INFO: [350/480] Analyzing https://github.com/ElginTZM/ip.git (master)... -Sep 04, 2023 1:44:41 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ElginTZM/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ElginTZM/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ElginTZM/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/keaganpzh/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ElginTZM/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/keaganpzh/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ElginTZM/ip.git (master) completed! -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/keaganpzh/ip.git (master) completed! -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepos INFO: [351/480] Analyzing https://github.com/LimJH2002/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [352/480] Analyzing https://github.com/cmHuang777/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/LimJH2002/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/LimJH2002/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/keaganpzh/ip.git (master)... +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/keaganpzh/ip.git (master)... +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/keaganpzh/ip.git (master) completed! +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [352/480] Analyzing https://github.com/cmHuang777/ip.git (master)... +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/cmHuang777/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/cmHuang777/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LimJH2002/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/cmHuang777/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LimJH2002/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LimJH2002/ip.git (master) completed! -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepos INFO: [353/480] Analyzing https://github.com/WeeeHung/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/cmHuang777/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/cmHuang777/ip.git (master) completed! -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [354/480] Analyzing https://github.com/rayyan35p/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/WeeeHung/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/WeeeHung/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/rayyan35p/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/rayyan35p/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/cmHuang777/ip.git (master)... +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/cmHuang777/ip.git (master)... +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/cmHuang777/ip.git (master) completed! +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [354/480] Analyzing https://github.com/xxiaoweii/ip.git (master)... +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/xxiaoweii/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/xxiaoweii/ip.git (master)... +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/WeeeHung/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/WeeeHung/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/WeeeHung/ip.git (master) completed! -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [355/480] Analyzing https://github.com/dhruvir29/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [355/480] Analyzing https://github.com/rayyan35p/ip.git (master)... +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/rayyan35p/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/rayyan35p/ip.git (master)... +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/xxiaoweii/ip.git (master)... +Sep 05, 2023 1:13:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/xxiaoweii/ip.git (master)... +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/xxiaoweii/ip.git (master) completed! +Sep 05, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [356/480] Analyzing https://github.com/dhruvir29/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/dhruvir29/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/dhruvir29/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/rayyan35p/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/rayyan35p/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/rayyan35p/ip.git (master) completed! -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [356/480] Analyzing https://github.com/xxiaoweii/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/xxiaoweii/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/xxiaoweii/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepos +INFO: [357/480] Analyzing https://github.com/LinWanLeii/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LinWanLeii/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LinWanLeii/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/dhruvir29/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dhruvir29/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dhruvir29/ip.git (master) completed! -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [357/480] Analyzing https://github.com/Song-Mengfei/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepos +INFO: [358/480] Analyzing https://github.com/Song-Mengfei/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Song-Mengfei/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Song-Mengfei/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/xxiaoweii/ip.git (master)... -Sep 04, 2023 1:44:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/xxiaoweii/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/xxiaoweii/ip.git (master) completed! -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [358/480] Analyzing https://github.com/LinWanLeii/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LinWanLeii/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LinWanLeii/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Song-Mengfei/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Song-Mengfei/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Song-Mengfei/ip.git (master) completed! -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [359/480] Analyzing https://github.com/jinyuan0425/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jinyuan0425/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jinyuan0425/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LinWanLeii/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LinWanLeii/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LinWanLeii/ip.git (master) completed! -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepos +INFO: [359/480] Analyzing https://github.com/jinyuan0425/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jinyuan0425/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jinyuan0425/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Song-Mengfei/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Song-Mengfei/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Song-Mengfei/ip.git (master) completed! +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepos INFO: [360/480] Analyzing https://github.com/tiif/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tiif/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tiif/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jinyuan0425/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jinyuan0425/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jinyuan0425/ip.git (master) completed! -Sep 04, 2023 1:44:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tiif/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepos INFO: [361/480] Analyzing https://github.com/nicholascher/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tiif/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tiif/ip.git (master) completed! -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [362/480] Analyzing https://github.com/hcs1203/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tiif/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nicholascher/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nicholascher/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/hcs1203/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/hcs1203/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/hcs1203/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/hcs1203/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/hcs1203/ip.git (master) completed! -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [363/480] Analyzing https://github.com/papataco14/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tiif/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tiif/ip.git (master) completed! +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepos +INFO: [362/480] Analyzing https://github.com/papataco14/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/papataco14/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/papataco14/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/papataco14/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/papataco14/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/papataco14/ip.git (master) completed! +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepos +INFO: [363/480] Analyzing https://github.com/hcs1203/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nicholascher/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/hcs1203/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/hcs1203/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nicholascher/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/papataco14/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nicholascher/ip.git (master) completed! -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepos INFO: [364/480] Analyzing https://github.com/KamJiaYue/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/papataco14/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/papataco14/ip.git (master) completed! -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [365/480] Analyzing https://github.com/NereusWB922/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/KamJiaYue/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/KamJiaYue/ip.git (master)... -Sep 04, 2023 1:44:43 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/hcs1203/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/hcs1203/ip.git (master)... +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/hcs1203/ip.git (master) completed! +Sep 05, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepos +INFO: [365/480] Analyzing https://github.com/NereusWB922/ip.git (master)... +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/NereusWB922/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/NereusWB922/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/KamJiaYue/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/KamJiaYue/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/KamJiaYue/ip.git (master) completed! -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator analyzeRepos -INFO: [366/480] Analyzing https://github.com/PohSayKeong/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/PohSayKeong/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/PohSayKeong/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [366/480] Analyzing https://github.com/ivyy-poison/ip.git (master)... +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ivyy-poison/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ivyy-poison/ip.git (master)... +Sep 05, 2023 1:13:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/NereusWB922/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/NereusWB922/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/NereusWB922/ip.git (master) completed! -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator analyzeRepos -INFO: [367/480] Analyzing https://github.com/jacobcuison/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [367/480] Analyzing https://github.com/PohSayKeong/ip.git (master)... +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/PohSayKeong/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/PohSayKeong/ip.git (master)... +Sep 05, 2023 1:13:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ivyy-poison/ip.git (master)... +Sep 05, 2023 1:13:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ivyy-poison/ip.git (master)... +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ivyy-poison/ip.git (master) completed! +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [368/480] Analyzing https://github.com/jacobcuison/ip.git (master)... +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jacobcuison/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jacobcuison/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/PohSayKeong/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/PohSayKeong/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/PohSayKeong/ip.git (master) completed! -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator analyzeRepos -INFO: [368/480] Analyzing https://github.com/ivyy-poison/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ivyy-poison/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ivyy-poison/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jacobcuison/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jacobcuison/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jacobcuison/ip.git (master) completed! -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator analyzeRepos INFO: [369/480] Analyzing https://github.com/ji-just-ji/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ji-just-ji/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ji-just-ji/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ivyy-poison/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ivyy-poison/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ivyy-poison/ip.git (master) completed! -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jacobcuison/ip.git (master)... +Sep 05, 2023 1:13:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jacobcuison/ip.git (master)... +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jacobcuison/ip.git (master) completed! +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator analyzeRepos INFO: [370/480] Analyzing https://github.com/rocketninja7/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:22 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/rocketninja7/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/rocketninja7/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ji-just-ji/ip.git (master)... +Sep 05, 2023 1:13:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ji-just-ji/ip.git (master)... +Sep 05, 2023 1:13:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/rocketninja7/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ji-just-ji/ip.git (master) completed! +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [371/480] Analyzing https://github.com/kohkaijie/ip.git (master)... +Sep 05, 2023 1:13:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/rocketninja7/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/rocketninja7/ip.git (master) completed! -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator analyzeRepos -INFO: [371/480] Analyzing https://github.com/kohkaijie/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [372/480] Analyzing https://github.com/zekone/ip.git (master)... +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kohkaijie/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kohkaijie/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ji-just-ji/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ji-just-ji/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ji-just-ji/ip.git (master) completed! -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator analyzeRepos -INFO: [372/480] Analyzing https://github.com/zekone/ip.git (master)... -Sep 04, 2023 1:44:44 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/zekone/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/zekone/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/kohkaijie/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kohkaijie/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kohkaijie/ip.git (master) completed! -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepos INFO: [373/480] Analyzing https://github.com/markgcera/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/markgcera/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/markgcera/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/zekone/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/markgcera/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/markgcera/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/markgcera/ip.git (master) completed! -Sep 04, 2023 1:44:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/zekone/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator analyzeRepos -INFO: [374/480] Analyzing https://github.com/PearlynnT/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/zekone/ip.git (master) completed! -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator analyzeRepos -INFO: [375/480] Analyzing https://github.com/TeeRenJing/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [374/480] Analyzing https://github.com/PearlynnT/ip.git (master)... +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/PearlynnT/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/PearlynnT/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/TeeRenJing/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/TeeRenJing/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/TeeRenJing/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/TeeRenJing/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/TeeRenJing/ip.git (master) completed! -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator analyzeRepos -INFO: [376/480] Analyzing https://github.com/StevenLiudw/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/markgcera/ip.git (master)... +Sep 05, 2023 1:13:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/markgcera/ip.git (master)... +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/markgcera/ip.git (master) completed! +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [375/480] Analyzing https://github.com/StevenLiudw/ip.git (master)... +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/StevenLiudw/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/StevenLiudw/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/PearlynnT/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/PearlynnT/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/PearlynnT/ip.git (master) completed! -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [376/480] Analyzing https://github.com/TeeRenJing/ip.git (master)... +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/TeeRenJing/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/TeeRenJing/ip.git (master)... +Sep 05, 2023 1:13:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/StevenLiudw/ip.git (master)... +Sep 05, 2023 1:13:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/StevenLiudw/ip.git (master)... +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/StevenLiudw/ip.git (master) completed! +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepos INFO: [377/480] Analyzing https://github.com/mounilsankar/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/mounilsankar/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/mounilsankar/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/StevenLiudw/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/TeeRenJing/ip.git (master)... +Sep 05, 2023 1:13:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/TeeRenJing/ip.git (master)... +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/TeeRenJing/ip.git (master) completed! +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [378/480] Analyzing https://github.com/dloh2236/ip.git (master)... +Sep 05, 2023 1:13:23 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dloh2236/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dloh2236/ip.git (master)... +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/mounilsankar/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/StevenLiudw/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/mounilsankar/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/mounilsankar/ip.git (master) completed! -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/StevenLiudw/ip.git (master) completed! -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator analyzeRepos -INFO: [378/480] Analyzing https://github.com/junnengsoo/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator analyzeRepos -INFO: [379/480] Analyzing https://github.com/dloh2236/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/junnengsoo/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/junnengsoo/ip.git (master)... -Sep 04, 2023 1:44:45 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dloh2236/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dloh2236/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/junnengsoo/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/junnengsoo/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/junnengsoo/ip.git (master) completed! -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [380/480] Analyzing https://github.com/zannloo/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepos +INFO: [379/480] Analyzing https://github.com/zannloo/ip.git (master)... +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/zannloo/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/zannloo/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/dloh2236/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dloh2236/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dloh2236/ip.git (master) completed! -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [381/480] Analyzing https://github.com/freshcabbage123/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/freshcabbage123/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/freshcabbage123/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepos +INFO: [380/480] Analyzing https://github.com/junnengsoo/ip.git (master)... +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/junnengsoo/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/junnengsoo/ip.git (master)... +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/zannloo/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/zannloo/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/zannloo/ip.git (master) completed! -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/junnengsoo/ip.git (master)... +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepos +INFO: [381/480] Analyzing https://github.com/freshcabbage123/ip.git (master)... +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/junnengsoo/ip.git (master)... +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/junnengsoo/ip.git (master) completed! +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepos INFO: [382/480] Analyzing https://github.com/Kokseng1/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/freshcabbage123/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/freshcabbage123/ip.git (master)... +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Kokseng1/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Kokseng1/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Kokseng1/ip.git (master)... +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/freshcabbage123/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Kokseng1/ip.git (master)... +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Kokseng1/ip.git (master) completed! +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepos +INFO: [383/480] Analyzing https://github.com/itsNatTan/ip.git (master)... +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/freshcabbage123/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/freshcabbage123/ip.git (master) completed! -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [383/480] Analyzing https://github.com/itsNatTan/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepos +INFO: [384/480] Analyzing https://github.com/tjingsheng/ip.git (master)... +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/itsNatTan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/itsNatTan/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Kokseng1/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Kokseng1/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Kokseng1/ip.git (master) completed! -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [384/480] Analyzing https://github.com/tjingsheng/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tjingsheng/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tjingsheng/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/itsNatTan/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/itsNatTan/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/itsNatTan/ip.git (master) completed! -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepos INFO: [385/480] Analyzing https://github.com/ZD292/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ZD292/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ZD292/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tjingsheng/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tjingsheng/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tjingsheng/ip.git (master) completed! -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepos INFO: [386/480] Analyzing https://github.com/alientian/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/alientian/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/alientian/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ZD292/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/alientian/ip.git (master)... +Sep 05, 2023 1:13:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ZD292/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ZD292/ip.git (master) completed! -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepos INFO: [387/480] Analyzing https://github.com/frrrrry/ip.git (master)... -Sep 04, 2023 1:44:46 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/frrrrry/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/frrrrry/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/alientian/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/alientian/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/alientian/ip.git (master) completed! -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepos INFO: [388/480] Analyzing https://github.com/wanghejin/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/frrrrry/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/frrrrry/ip.git (master)... +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wanghejin/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wanghejin/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/frrrrry/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/frrrrry/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/frrrrry/ip.git (master) completed! -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepos INFO: [389/480] Analyzing https://github.com/MagnificentCreature/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wanghejin/ip.git (master)... +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/MagnificentCreature/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/MagnificentCreature/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wanghejin/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wanghejin/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wanghejin/ip.git (master) completed! -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [390/480] Analyzing https://github.com/tohpinren/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tohpinren/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tohpinren/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tohpinren/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tohpinren/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tohpinren/ip.git (master) completed! -Sep 04, 2023 1:44:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/MagnificentCreature/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [390/480] Analyzing https://github.com/andrefoo/ip.git (master)... +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/andrefoo/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/andrefoo/ip.git (master)... +Sep 05, 2023 1:13:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/andrefoo/ip.git (master)... +Sep 05, 2023 1:13:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/andrefoo/ip.git (master)... +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/andrefoo/ip.git (master) completed! +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepos INFO: [391/480] Analyzing https://github.com/SungMatt/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/MagnificentCreature/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/SungMatt/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/SungMatt/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/MagnificentCreature/ip.git (master)... +Sep 05, 2023 1:13:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/MagnificentCreature/ip.git (master)... +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/MagnificentCreature/ip.git (master) completed! -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [392/480] Analyzing https://github.com/XihuaZ/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/XihuaZ/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/XihuaZ/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [392/480] Analyzing https://github.com/tohpinren/ip.git (master)... +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tohpinren/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tohpinren/ip.git (master)... +Sep 05, 2023 1:13:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/SungMatt/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/SungMatt/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/SungMatt/ip.git (master) completed! -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [393/480] Analyzing https://github.com/andrefoo/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/andrefoo/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/andrefoo/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/XihuaZ/ip.git (master)... -Sep 04, 2023 1:44:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/XihuaZ/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/XihuaZ/ip.git (master) completed! -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [393/480] Analyzing https://github.com/XihuaZ/ip.git (master)... +Sep 05, 2023 1:13:25 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/XihuaZ/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/XihuaZ/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tohpinren/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tohpinren/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tohpinren/ip.git (master) completed! +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepos INFO: [394/480] Analyzing https://github.com/xavierpok/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/xavierpok/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/xavierpok/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/andrefoo/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/andrefoo/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/andrefoo/ip.git (master) completed! -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [395/480] Analyzing https://github.com/Choonyan02/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Choonyan02/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Choonyan02/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Choonyan02/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Choonyan02/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Choonyan02/ip.git (master) completed! -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [396/480] Analyzing https://github.com/bkjwjason/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/XihuaZ/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/XihuaZ/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/XihuaZ/ip.git (master) completed! +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepos +INFO: [395/480] Analyzing https://github.com/bkjwjason/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/bkjwjason/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/bkjwjason/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/bkjwjason/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/bkjwjason/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/bkjwjason/ip.git (master) completed! +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepos +INFO: [396/480] Analyzing https://github.com/Choonyan02/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Choonyan02/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Choonyan02/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/xavierpok/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/xavierpok/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/xavierpok/ip.git (master) completed! -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/bkjwjason/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepos INFO: [397/480] Analyzing https://github.com/aarontxz/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/bkjwjason/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/bkjwjason/ip.git (master) completed! -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/aarontxz/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/aarontxz/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [398/480] Analyzing https://github.com/jianyangg/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jianyangg/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jianyangg/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Choonyan02/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/aarontxz/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Choonyan02/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/aarontxz/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Choonyan02/ip.git (master) completed! +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/aarontxz/ip.git (master) completed! -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [399/480] Analyzing https://github.com/tayian/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepos +INFO: [398/480] Analyzing https://github.com/tayian/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepos +INFO: [399/480] Analyzing https://github.com/jianyangg/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tayian/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tayian/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jianyangg/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jianyangg/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jianyangg/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tayian/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jianyangg/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jianyangg/ip.git (master) completed! -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [400/480] Analyzing https://github.com/Jweewee/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tayian/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tayian/ip.git (master) completed! -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [401/480] Analyzing https://github.com/wnchan/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Jweewee/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Jweewee/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepos +INFO: [400/480] Analyzing https://github.com/wnchan/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wnchan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wnchan/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jianyangg/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jianyangg/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jianyangg/ip.git (master) completed! +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepos +INFO: [401/480] Analyzing https://github.com/Jweewee/ip.git (master)... +Sep 05, 2023 1:13:26 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Jweewee/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Jweewee/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wnchan/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Jweewee/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wnchan/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wnchan/ip.git (master) completed! -Sep 04, 2023 1:44:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [402/480] Analyzing https://github.com/anthonytamzil/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/anthonytamzil/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/anthonytamzil/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Jweewee/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Jweewee/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Jweewee/ip.git (master) completed! -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [402/480] Analyzing https://github.com/cyaoxuan/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [403/480] Analyzing https://github.com/anthonytamzil/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [403/480] Analyzing https://github.com/cyaoxuan/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/cyaoxuan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/cyaoxuan/ip.git (master)... -Sep 04, 2023 1:44:48 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/anthonytamzil/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/anthonytamzil/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/cyaoxuan/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/cyaoxuan/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/cyaoxuan/ip.git (master) completed! -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [404/480] Analyzing https://github.com/CelestineTan03/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/CelestineTan03/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/CelestineTan03/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/anthonytamzil/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [404/480] Analyzing https://github.com/CelestineTan03/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/anthonytamzil/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/anthonytamzil/ip.git (master) completed! -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/CelestineTan03/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/CelestineTan03/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepos INFO: [405/480] Analyzing https://github.com/saltedfishxx/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/saltedfishxx/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/saltedfishxx/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/CelestineTan03/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/CelestineTan03/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/CelestineTan03/ip.git (master) completed! -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [406/480] Analyzing https://github.com/AlagappanRa/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AlagappanRa/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AlagappanRa/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [406/480] Analyzing https://github.com/Ken-Lai/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Ken-Lai/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Ken-Lai/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/saltedfishxx/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/saltedfishxx/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AlagappanRa/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/saltedfishxx/ip.git (master) completed! -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepos INFO: [407/480] Analyzing https://github.com/euchangxian/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AlagappanRa/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AlagappanRa/ip.git (master) completed! -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [408/480] Analyzing https://github.com/Ken-Lai/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/euchangxian/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/euchangxian/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Ken-Lai/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Ken-Lai/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Ken-Lai/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Ken-Lai/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Ken-Lai/ip.git (master) completed! -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [408/480] Analyzing https://github.com/AlagappanRa/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AlagappanRa/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AlagappanRa/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AlagappanRa/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AlagappanRa/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AlagappanRa/ip.git (master) completed! +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepos INFO: [409/480] Analyzing https://github.com/felibunnyy/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/felibunnyy/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/felibunnyy/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/felibunnyy/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/felibunnyy/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/felibunnyy/ip.git (master) completed! -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [410/480] Analyzing https://github.com/itssisi/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/itssisi/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/itssisi/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [410/480] Analyzing https://github.com/jamz903/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jamz903/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jamz903/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/euchangxian/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/euchangxian/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/euchangxian/ip.git (master) completed! -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [411/480] Analyzing https://github.com/jamz903/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jamz903/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jamz903/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/itssisi/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/itssisi/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/itssisi/ip.git (master) completed! -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [412/480] Analyzing https://github.com/Kevin-Liusx/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [411/480] Analyzing https://github.com/Kevin-Liusx/ip.git (master)... +Sep 05, 2023 1:13:27 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Kevin-Liusx/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Kevin-Liusx/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jamz903/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Kevin-Liusx/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jamz903/ip.git (master)... -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jamz903/ip.git (master) completed! -Sep 04, 2023 1:44:49 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [412/480] Analyzing https://github.com/itssisi/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Kevin-Liusx/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Kevin-Liusx/ip.git (master) completed! +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepos INFO: [413/480] Analyzing https://github.com/Propene-Dan/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/itssisi/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/itssisi/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Propene-Dan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Propene-Dan/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Kevin-Liusx/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Kevin-Liusx/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Kevin-Liusx/ip.git (master) completed! -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [414/480] Analyzing https://github.com/ChuanXinNg/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ChuanXinNg/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ChuanXinNg/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Propene-Dan/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Propene-Dan/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Propene-Dan/ip.git (master) completed! -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [415/480] Analyzing https://github.com/kenvynKwek/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [414/480] Analyzing https://github.com/Ruizhi2001/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Ruizhi2001/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Ruizhi2001/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/itssisi/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/itssisi/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/itssisi/ip.git (master) completed! +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [415/480] Analyzing https://github.com/ChuanXinNg/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ChuanXinNg/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ChuanXinNg/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Ruizhi2001/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Ruizhi2001/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Ruizhi2001/ip.git (master) completed! +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [416/480] Analyzing https://github.com/kenvynKwek/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kenvynKwek/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kenvynKwek/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/kenvynKwek/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ChuanXinNg/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kenvynKwek/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kenvynKwek/ip.git (master) completed! -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [416/480] Analyzing https://github.com/prawnzyy/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ChuanXinNg/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/prawnzyy/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/prawnzyy/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [417/480] Analyzing https://github.com/prawnzyy/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ChuanXinNg/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ChuanXinNg/ip.git (master) completed! -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [417/480] Analyzing https://github.com/Ruizhi2001/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Ruizhi2001/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Ruizhi2001/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Ruizhi2001/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Ruizhi2001/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Ruizhi2001/ip.git (master) completed! -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [418/480] Analyzing https://github.com/nicholastng010601/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nicholastng010601/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nicholastng010601/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [418/480] Analyzing https://github.com/DistractedCat/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/prawnzyy/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/prawnzyy/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/DistractedCat/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/DistractedCat/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/DistractedCat/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/DistractedCat/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/DistractedCat/ip.git (master) completed! +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [419/480] Analyzing https://github.com/saraozn/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/prawnzyy/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/prawnzyy/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/prawnzyy/ip.git (master) completed! -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [419/480] Analyzing https://github.com/saraozn/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/saraozn/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/saraozn/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [420/480] Analyzing https://github.com/nicholastng010601/ip.git (master)... +Sep 05, 2023 1:13:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nicholastng010601/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nicholastng010601/ip.git (master)... +Sep 05, 2023 1:13:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/saraozn/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/saraozn/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/saraozn/ip.git (master) completed! -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [420/480] Analyzing https://github.com/DistractedCat/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nicholastng010601/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/DistractedCat/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/DistractedCat/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nicholastng010601/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nicholastng010601/ip.git (master) completed! -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepos INFO: [421/480] Analyzing https://github.com/yezkez10/ip.git (master)... -Sep 04, 2023 1:44:50 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/yezkez10/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/yezkez10/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nicholastng010601/ip.git (master)... +Sep 05, 2023 1:13:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nicholastng010601/ip.git (master)... +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nicholastng010601/ip.git (master) completed! +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [422/480] Analyzing https://github.com/billieboy7/ip.git (master)... +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/billieboy7/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/billieboy7/ip.git (master)... +Sep 05, 2023 1:13:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yezkez10/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yezkez10/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yezkez10/ip.git (master) completed! -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [422/480] Analyzing https://github.com/JasonRay168/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/DistractedCat/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [423/480] Analyzing https://github.com/alvinlim277/ip.git (master)... +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/alvinlim277/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/alvinlim277/ip.git (master)... +Sep 05, 2023 1:13:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/billieboy7/ip.git (master)... +Sep 05, 2023 1:13:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/billieboy7/ip.git (master)... +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/billieboy7/ip.git (master) completed! +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [424/480] Analyzing https://github.com/JasonRay168/ip.git (master)... +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/JasonRay168/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/JasonRay168/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/DistractedCat/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/DistractedCat/ip.git (master) completed! -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [423/480] Analyzing https://github.com/revdrag/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/alvinlim277/ip.git (master)... +Sep 05, 2023 1:13:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/alvinlim277/ip.git (master)... +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/alvinlim277/ip.git (master) completed! +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [425/480] Analyzing https://github.com/revdrag/ip.git (master)... +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/revdrag/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/revdrag/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/revdrag/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/revdrag/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/revdrag/ip.git (master) completed! -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [424/480] Analyzing https://github.com/alvinlim277/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/JasonRay168/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/alvinlim277/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/alvinlim277/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/JasonRay168/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/JasonRay168/ip.git (master) completed! -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [425/480] Analyzing https://github.com/billieboy7/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/billieboy7/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/billieboy7/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/billieboy7/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/billieboy7/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/billieboy7/ip.git (master) completed! -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepos INFO: [426/480] Analyzing https://github.com/jannnice/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/alvinlim277/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jannnice/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jannnice/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/alvinlim277/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/alvinlim277/ip.git (master) completed! -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/revdrag/ip.git (master)... +Sep 05, 2023 1:13:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/revdrag/ip.git (master)... +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/revdrag/ip.git (master) completed! +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepos INFO: [427/480] Analyzing https://github.com/dinde2004/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:29 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/dinde2004/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/dinde2004/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jannnice/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dinde2004/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jannnice/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jannnice/ip.git (master) completed! -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [428/480] Analyzing https://github.com/samuelim01/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [428/480] Analyzing https://github.com/evanyan13/ip.git (master)... +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dinde2004/ip.git (master)... +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/evanyan13/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/evanyan13/ip.git (master)... +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dinde2004/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dinde2004/ip.git (master) completed! -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [429/480] Analyzing https://github.com/evanyan13/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [429/480] Analyzing https://github.com/samuelim01/ip.git (master)... +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/samuelim01/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/samuelim01/ip.git (master)... -Sep 04, 2023 1:44:51 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/evanyan13/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/evanyan13/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/evanyan13/ip.git (master)... +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/samuelim01/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/evanyan13/ip.git (master)... +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/evanyan13/ip.git (master) completed! +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [430/480] Analyzing https://github.com/seanpzk/ip.git (master)... +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/samuelim01/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/samuelim01/ip.git (master) completed! -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [430/480] Analyzing https://github.com/seanpzk/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/evanyan13/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [431/480] Analyzing https://github.com/KumChaiYin/ip.git (master)... +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/seanpzk/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/seanpzk/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/evanyan13/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/evanyan13/ip.git (master) completed! -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [431/480] Analyzing https://github.com/KumChaiYin/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/KumChaiYin/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/KumChaiYin/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/seanpzk/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/KumChaiYin/ip.git (master)... +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/seanpzk/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/seanpzk/ip.git (master) completed! -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepos INFO: [432/480] Analyzing https://github.com/Sasmik23/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Sasmik23/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Sasmik23/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/KumChaiYin/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/KumChaiYin/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/KumChaiYin/ip.git (master) completed! -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepos INFO: [433/480] Analyzing https://github.com/lsyurea/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Sasmik23/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Sasmik23/ip.git (master)... +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lsyurea/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lsyurea/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Sasmik23/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Sasmik23/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Sasmik23/ip.git (master) completed! -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepos INFO: [434/480] Analyzing https://github.com/geraldngjx/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/geraldngjx/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/geraldngjx/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lsyurea/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lsyurea/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lsyurea/ip.git (master) completed! -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [435/480] Analyzing https://github.com/lululwtv/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [435/480] Analyzing https://github.com/leontan2/ip.git (master)... +Sep 05, 2023 1:13:30 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/leontan2/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/leontan2/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/geraldngjx/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/geraldngjx/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/geraldngjx/ip.git (master) completed! +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [436/480] Analyzing https://github.com/lululwtv/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lululwtv/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lululwtv/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/geraldngjx/ip.git (master)... -Sep 04, 2023 1:44:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/leontan2/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/leontan2/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/leontan2/ip.git (master) completed! +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [437/480] Analyzing https://github.com/garylow2001/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/garylow2001/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/garylow2001/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lululwtv/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/geraldngjx/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lululwtv/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/geraldngjx/ip.git (master) completed! -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [436/480] Analyzing https://github.com/garylow2001/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lululwtv/ip.git (master) completed! -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [437/480] Analyzing https://github.com/leontan2/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/garylow2001/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/garylow2001/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/leontan2/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/leontan2/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/garylow2001/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/garylow2001/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/garylow2001/ip.git (master) completed! -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos INFO: [438/480] Analyzing https://github.com/wamps-jp/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/leontan2/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wamps-jp/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wamps-jp/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/leontan2/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/leontan2/ip.git (master) completed! -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [439/480] Analyzing https://github.com/suryanshkushwaha/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wamps-jp/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wamps-jp/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wamps-jp/ip.git (master) completed! -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [439/480] Analyzing https://github.com/jacksonyuan256/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/garylow2001/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jacksonyuan256/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jacksonyuan256/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/garylow2001/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/garylow2001/ip.git (master) completed! +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos INFO: [440/480] Analyzing https://github.com/dickongwd/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/suryanshkushwaha/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/suryanshkushwaha/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/dickongwd/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/dickongwd/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/suryanshkushwaha/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/suryanshkushwaha/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/suryanshkushwaha/ip.git (master) completed! -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [441/480] Analyzing https://github.com/jacksonyuan256/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jacksonyuan256/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jacksonyuan256/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jacksonyuan256/ip.git (master) completed! +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [441/480] Analyzing https://github.com/suryanshkushwaha/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/suryanshkushwaha/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/suryanshkushwaha/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/dickongwd/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jacksonyuan256/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jacksonyuan256/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dickongwd/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dickongwd/ip.git (master) completed! -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos INFO: [442/480] Analyzing https://github.com/wr1159/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wr1159/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wr1159/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jacksonyuan256/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jacksonyuan256/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jacksonyuan256/ip.git (master) completed! -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [443/480] Analyzing https://github.com/Nauxe/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Nauxe/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Nauxe/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/suryanshkushwaha/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/suryanshkushwaha/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/suryanshkushwaha/ip.git (master) completed! +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [443/480] Analyzing https://github.com/zhanyang01/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zhanyang01/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zhanyang01/ip.git (master)... +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wr1159/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wr1159/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wr1159/ip.git (master) completed! -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [444/480] Analyzing https://github.com/yyyaohhh/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yyyaohhh/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yyyaohhh/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [444/480] Analyzing https://github.com/Nauxe/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Nauxe/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Nauxe/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Nauxe/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Nauxe/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Nauxe/ip.git (master) completed! -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [445/480] Analyzing https://github.com/zhanyang01/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zhanyang01/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zhanyang01/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yyyaohhh/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yyyaohhh/ip.git (master)... -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yyyaohhh/ip.git (master) completed! -Sep 04, 2023 1:44:53 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [445/480] Analyzing https://github.com/yyyaohhh/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zhanyang01/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yyyaohhh/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yyyaohhh/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zhanyang01/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zhanyang01/ip.git (master) completed! +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepos INFO: [446/480] Analyzing https://github.com/czhiruo/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/czhiruo/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/czhiruo/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zhanyang01/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yyyaohhh/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yyyaohhh/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yyyaohhh/ip.git (master) completed! +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [447/480] Analyzing https://github.com/victorpengmx/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/victorpengmx/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/victorpengmx/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/czhiruo/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zhanyang01/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zhanyang01/ip.git (master) completed! -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [447/480] Analyzing https://github.com/longnguyentan/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/czhiruo/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/czhiruo/ip.git (master) completed! -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [448/480] Analyzing https://github.com/victorpengmx/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [448/480] Analyzing https://github.com/Cikguseven/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Cikguseven/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Cikguseven/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/victorpengmx/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/victorpengmx/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/victorpengmx/ip.git (master) completed! +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [449/480] Analyzing https://github.com/longnguyentan/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/longnguyentan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/longnguyentan/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/victorpengmx/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/victorpengmx/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Cikguseven/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Cikguseven/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Cikguseven/ip.git (master) completed! +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [450/480] Analyzing https://github.com/lipwei1808/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lipwei1808/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lipwei1808/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/longnguyentan/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/longnguyentan/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/longnguyentan/ip.git (master) completed! -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [449/480] Analyzing https://github.com/Cikguseven/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/victorpengmx/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Cikguseven/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Cikguseven/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/victorpengmx/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/victorpengmx/ip.git (master) completed! -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [450/480] Analyzing https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [451/480] Analyzing https://github.com/Eola-Z/ip.git (master)... +Sep 05, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Eola-Z/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Eola-Z/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Eola-Z/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Eola-Z/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Eola-Z/ip.git (master) completed! +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [452/480] Analyzing https://github.com/Mohammed-Faizzzz/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Mohammed-Faizzzz/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lipwei1808/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lipwei1808/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lipwei1808/ip.git (master) completed! +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [453/480] Analyzing https://github.com/jibtaf/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jibtaf/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jibtaf/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Mohammed-Faizzzz/ip.git (master) completed! -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [451/480] Analyzing https://github.com/jibtaf/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Cikguseven/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jibtaf/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jibtaf/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Cikguseven/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Cikguseven/ip.git (master) completed! -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [452/480] Analyzing https://github.com/lipwei1808/ip.git (master)... -Sep 04, 2023 1:44:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lipwei1808/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lipwei1808/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [454/480] Analyzing https://github.com/ChangruHenryQian/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ChangruHenryQian/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ChangruHenryQian/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jibtaf/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ChangruHenryQian/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jibtaf/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jibtaf/ip.git (master) completed! -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [453/480] Analyzing https://github.com/dylkaw/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ChangruHenryQian/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ChangruHenryQian/ip.git (master) completed! +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [455/480] Analyzing https://github.com/dylkaw/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [456/480] Analyzing https://github.com/nikele2001/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/dylkaw/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/dylkaw/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lipwei1808/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lipwei1808/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lipwei1808/ip.git (master) completed! -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [454/480] Analyzing https://github.com/DeltonCheng/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nikele2001/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nikele2001/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/dylkaw/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/DeltonCheng/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/DeltonCheng/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dylkaw/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dylkaw/ip.git (master) completed! -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [455/480] Analyzing https://github.com/nikele2001/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nikele2001/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nikele2001/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [457/480] Analyzing https://github.com/DeltonCheng/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/DeltonCheng/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/DeltonCheng/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nikele2001/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/DeltonCheng/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/DeltonCheng/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/DeltonCheng/ip.git (master) completed! -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [456/480] Analyzing https://github.com/Eola-Z/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Eola-Z/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Eola-Z/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nikele2001/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nikele2001/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Eola-Z/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/DeltonCheng/ip.git (master) completed! +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [458/480] Analyzing https://github.com/craigtonlian/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nikele2001/ip.git (master) completed! -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [457/480] Analyzing https://github.com/craigtonlian/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Eola-Z/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Eola-Z/ip.git (master) completed! -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [458/480] Analyzing https://github.com/ChangruHenryQian/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [459/480] Analyzing https://github.com/wjacobw/ip.git (master)... +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/craigtonlian/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/craigtonlian/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ChangruHenryQian/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ChangruHenryQian/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ChangruHenryQian/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ChangruHenryQian/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ChangruHenryQian/ip.git (master) completed! -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [459/480] Analyzing https://github.com/iantsaii/ip.git (master)... -Sep 04, 2023 1:44:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/iantsaii/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/iantsaii/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/craigtonlian/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/craigtonlian/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/craigtonlian/ip.git (master) completed! -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wjacobw/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wjacobw/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wjacobw/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wjacobw/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wjacobw/ip.git (master) completed! +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepos INFO: [460/480] Analyzing https://github.com/ruo-x/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ruo-x/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ruo-x/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/iantsaii/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/iantsaii/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/iantsaii/ip.git (master) completed! -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [461/480] Analyzing https://github.com/nicrandomlee/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nicrandomlee/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nicrandomlee/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nicrandomlee/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nicrandomlee/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nicrandomlee/ip.git (master) completed! -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [462/480] Analyzing https://github.com/brein62/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/brein62/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/brein62/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/craigtonlian/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/craigtonlian/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/craigtonlian/ip.git (master) completed! +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [461/480] Analyzing https://github.com/iantsaii/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/iantsaii/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/iantsaii/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ruo-x/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ruo-x/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ruo-x/ip.git (master) completed! -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [463/480] Analyzing https://github.com/wjacobw/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wjacobw/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wjacobw/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wjacobw/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wjacobw/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wjacobw/ip.git (master) completed! -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [464/480] Analyzing https://github.com/angkyakdifp/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [462/480] Analyzing https://github.com/angkyakdifp/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/angkyakdifp/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/angkyakdifp/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/brein62/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/brein62/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/brein62/ip.git (master) completed! -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [465/480] Analyzing https://github.com/Bryan-Goh/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Bryan-Goh/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Bryan-Goh/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/iantsaii/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/iantsaii/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/iantsaii/ip.git (master) completed! +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [463/480] Analyzing https://github.com/brein62/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/brein62/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/brein62/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/angkyakdifp/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/angkyakdifp/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/angkyakdifp/ip.git (master) completed! -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [466/480] Analyzing https://github.com/MadLamprey/ip.git (master)... -Sep 04, 2023 1:44:56 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/MadLamprey/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/MadLamprey/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [464/480] Analyzing https://github.com/Bryan-Goh/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Bryan-Goh/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Bryan-Goh/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/brein62/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/brein62/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/brein62/ip.git (master) completed! +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [465/480] Analyzing https://github.com/nicrandomlee/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nicrandomlee/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nicrandomlee/ip.git (master)... +Sep 05, 2023 1:13:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Bryan-Goh/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Bryan-Goh/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Bryan-Goh/ip.git (master) completed! -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [467/480] Analyzing https://github.com/xyT-T/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [466/480] Analyzing https://github.com/kiatkat/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kiatkat/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kiatkat/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nicrandomlee/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nicrandomlee/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nicrandomlee/ip.git (master) completed! +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [467/480] Analyzing https://github.com/MadLamprey/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/MadLamprey/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/MadLamprey/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kiatkat/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kiatkat/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kiatkat/ip.git (master) completed! +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [468/480] Analyzing https://github.com/xyT-T/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/xyT-T/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/xyT-T/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/xyT-T/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/MadLamprey/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/xyT-T/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/xyT-T/ip.git (master) completed! -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [468/480] Analyzing https://github.com/kiatkat/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/MadLamprey/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/MadLamprey/ip.git (master) completed! -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos INFO: [469/480] Analyzing https://github.com/jiakai-17/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kiatkat/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kiatkat/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jiakai-17/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jiakai-17/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kiatkat/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kiatkat/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kiatkat/ip.git (master) completed! -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepos +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/MadLamprey/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/MadLamprey/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/MadLamprey/ip.git (master) completed! +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos INFO: [470/480] Analyzing https://github.com/nreHieW/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nreHieW/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nreHieW/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nreHieW/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jiakai-17/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jiakai-17/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nreHieW/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jiakai-17/ip.git (master) completed! -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [471/480] Analyzing https://github.com/nathanielcalimag/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nathanielcalimag/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nathanielcalimag/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nreHieW/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nreHieW/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nreHieW/ip.git (master) completed! -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [471/480] Analyzing https://github.com/Saezenn/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [472/480] Analyzing https://github.com/nathanielcalimag/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [472/480] Analyzing https://github.com/Saezenn/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Saezenn/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Saezenn/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nathanielcalimag/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nathanielcalimag/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nathanielcalimag/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nathanielcalimag/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nathanielcalimag/ip.git (master) completed! +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Saezenn/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [473/480] Analyzing https://github.com/jellywaiyan/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Saezenn/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Saezenn/ip.git (master) completed! -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [473/480] Analyzing https://github.com/jellywaiyan/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [474/480] Analyzing https://github.com/Tang-Moyan/ip.git (master)... +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jellywaiyan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jellywaiyan/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nathanielcalimag/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nathanielcalimag/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nathanielcalimag/ip.git (master) completed! -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [474/480] Analyzing https://github.com/DonovanJJ/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/DonovanJJ/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/DonovanJJ/ip.git (master)... -Sep 04, 2023 1:44:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jellywaiyan/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jellywaiyan/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jellywaiyan/ip.git (master) completed! -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [475/480] Analyzing https://github.com/Tang-Moyan/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Tang-Moyan/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Tang-Moyan/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/DonovanJJ/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/DonovanJJ/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/DonovanJJ/ip.git (master) completed! -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [476/480] Analyzing https://github.com/marquestye/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/marquestye/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/marquestye/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Tang-Moyan/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Tang-Moyan/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Tang-Moyan/ip.git (master) completed! -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [477/480] Analyzing https://github.com/Sebtey/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [475/480] Analyzing https://github.com/marquestye/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/marquestye/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/marquestye/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jellywaiyan/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jellywaiyan/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jellywaiyan/ip.git (master) completed! +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [476/480] Analyzing https://github.com/Sebtey/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Sebtey/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Sebtey/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Sebtey/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/marquestye/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Sebtey/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Sebtey/ip.git (master) completed! -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [478/480] Analyzing https://github.com/rionshocker/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/marquestye/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/marquestye/ip.git (master) completed! -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [479/480] Analyzing https://github.com/tyouwei/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/rionshocker/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/rionshocker/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator updateRepoConfig +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [477/480] Analyzing https://github.com/DonovanJJ/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/DonovanJJ/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/DonovanJJ/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Sebtey/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Sebtey/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Sebtey/ip.git (master) completed! +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [478/480] Analyzing https://github.com/tyouwei/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tyouwei/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 05, 2023 1:13:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tyouwei/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/rionshocker/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/rionshocker/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/rionshocker/ip.git (master) completed! -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [480/480] Analyzing https://github.com/Blizzeracz/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Blizzeracz/ip.git (master) does not contain a standalone config file. -Sep 04, 2023 1:44:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Blizzeracz/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/DonovanJJ/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/DonovanJJ/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/DonovanJJ/ip.git (master) completed! +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [479/480] Analyzing https://github.com/rionshocker/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/rionshocker/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/rionshocker/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tyouwei/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tyouwei/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tyouwei/ip.git (master) completed! -Sep 04, 2023 1:44:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [480/480] Analyzing https://github.com/Blizzeracz/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Blizzeracz/ip.git (master) does not contain a standalone config file. +Sep 05, 2023 1:13:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Blizzeracz/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/rionshocker/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/rionshocker/ip.git (master)... +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/rionshocker/ip.git (master) completed! +Sep 05, 2023 1:13:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Blizzeracz/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 05, 2023 1:13:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Blizzeracz/ip.git (master)... -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator analyzeRepo +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Blizzeracz/ip.git (master) completed! -Sep 04, 2023 1:44:58 PM reposense.report.ReportGenerator generateReposReport +Sep 05, 2023 1:13:36 AM reposense.report.ReportGenerator generateReposReport INFO: The report is generated at /home/runner/work/ip-dashboard/ip-dashboard/reposense-report -Sep 04, 2023 1:45:00 PM reposense.RepoSense main -INFO: Elapsed processing time: 1 minute(s) 49.61 second(s) +Sep 05, 2023 1:13:38 AM reposense.RepoSense main +INFO: Elapsed processing time: 1 minute(s) 47.24 second(s) diff --git a/ruth-lim_ip_master/authorship.json b/ruth-lim_ip_master/authorship.json index 15ef8756..9e6b1b80 100644 --- a/ruth-lim_ip_master/authorship.json +++ b/ruth-lim_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"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":"ruth-lim"},"content":"1. Open Intellij (if you are not in the welcome screen, click `duke.Storage` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2023-08-29"},{"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":"ruth-lim"},"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":{"ruth-lim":3,"-":21}},{"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":"ruth-lim"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ruth-lim":7,"-":41}},{"path":"src/main/java/duke/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents the possible commands for the chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public enum CommandType {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":" BYE, LIST, MARK, UNMARK, DELETE, CHECK, TODAY, FIND,","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" TODO, DEADLINE, EVENT,","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":9}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeDatabaseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.EmptyCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" * Main class representing the chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" private static final String DATAPATH \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" private Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" private Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" * Constructs a Duke instance.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" * @param filePath The file path for storing task data.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" this.taskList \u003d new TaskList(this.storage.loadData());","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" } catch (DukeDatabaseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" this.ui.showDukeException(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" * Main execution method that runs the chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" private void run() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" this.ui.showWelcome();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" String userInput \u003d ui.readInput();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" if (userInput.trim().isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" throw new EmptyCommandException();","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" Command command \u003d Parser.parseCommand(userInput);","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" command.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" isExit \u003d command.isExit();","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" ui.showDukeException(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" } catch (ArrayIndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" ui.showArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" new Duke(DATAPATH).run();","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ruth-lim":60,"-":3}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.command.AddDeadlineCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.command.AddEventCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.command.AddTodoCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import duke.command.CheckCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"import duke.command.TodayCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.InvalidFormatException;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.UnknownCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" * Parser for user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" * Parses the input and creates the corresponding Command object.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" * @return The Command object based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" * @throws DukeException If there is an issue parsing the input or creating the Command.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" public static Command parseCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" String command \u003d parts[0].toUpperCase();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" CommandType commandType;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" commandType \u003d CommandType.valueOf(command);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" case BYE:","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" case LIST:","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" case MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" return new MarkCommand(Integer.parseInt(parseArgument(parts)) - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" case UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" return new UnmarkCommand(Integer.parseInt(parseArgument(parts)) - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" case TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" return new AddTodoCommand(parseArgument(parts));","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" return parseAddDeadlineCommand(parseArgument(parts));","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" case EVENT:","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" return parseAddEventCommand(parseArgument(parts));","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" case DELETE:","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" return new DeleteCommand(Integer.parseInt(parseArgument(parts)) - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" case FIND:","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" return new FindCommand(parseArgument(parts));","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":" case CHECK:","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":" return new CheckCommand(Parser.parseArgument(parts));","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":" case TODAY:","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":" return new TodayCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"ruth-lim"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"ruth-lim"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ruth-lim"},"content":" * Parses the argument from a user input and returns it.","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"ruth-lim"},"content":" * @param parts The split user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"ruth-lim"},"content":" * @return The argument portion of the user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"ruth-lim"},"content":" public static String parseArgument(String[] parts) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"ruth-lim"},"content":" if (parts.length \u003e 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"ruth-lim"},"content":" return parts[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"ruth-lim"},"content":" return \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"ruth-lim"},"content":" * Parses the argument to create an AddDeadlineCommand.","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"ruth-lim"},"content":" * @param argument The argument portion of the user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"ruth-lim"},"content":" * @return The AddDeadlineCommand based on the argument.","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"ruth-lim"},"content":" * @throws InvalidFormatException If there is an issue with the argument format.","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"ruth-lim"},"content":" private static AddDeadlineCommand parseAddDeadlineCommand(String argument) throws InvalidFormatException {","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"ruth-lim"},"content":" String[] deadlineParts \u003d argument.split(\"/by\");","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"ruth-lim"},"content":" if (deadlineParts.length \u003c 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"ruth-lim"},"content":" throw new InvalidFormatException(\"Please use the format: deadline \u003cdescription\u003e /by \u003cd/M/yyyy HHmm\u003e.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"ruth-lim"},"content":" String description \u003d deadlineParts[0].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"ruth-lim"},"content":" String by \u003d deadlineParts[1].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"ruth-lim"},"content":" return new AddDeadlineCommand(description, dateTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"ruth-lim"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"ruth-lim"},"content":" throw new InvalidFormatException(\"Invalid date and time format. Please use the format: d/M/yyyy HHmm.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"ruth-lim"},"content":" * Parses the argument to create an AddEventCommand.","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"ruth-lim"},"content":" * @param argument The argument portion of the user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"ruth-lim"},"content":" * @return The AddEventCommand based on the argument.","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"ruth-lim"},"content":" * @throws InvalidFormatException If there is an issue with the argument format.","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"ruth-lim"},"content":" private static AddEventCommand parseAddEventCommand(String argument) throws InvalidFormatException {","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"ruth-lim"},"content":" String[] eventParts \u003d argument.split(\"/at\");","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"ruth-lim"},"content":" if (eventParts.length \u003c 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"ruth-lim"},"content":" throw new InvalidFormatException(\"Please use the format: event \u003cdescription\u003e /at \u003cd/M/yyyy HHmm\u003e\");","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"ruth-lim"},"content":" String description \u003d eventParts[0].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"ruth-lim"},"content":" String at \u003d eventParts[1].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(at, DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"ruth-lim"},"content":" return new AddEventCommand(description, dateTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"ruth-lim"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"ruth-lim"},"content":" throw new InvalidFormatException(\"Invalid date and time format. Please use the format: d/M/yyyy HHmm.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":138}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeDatabaseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" * Handles the loading and storing tasks to a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" private String filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" * @param filePath The file path for storing task data.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" * Loads tasks from teh specified file path.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" * @return The list of tasks loaded.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" * @throws DukeDatabaseException If there is a problem with creating the database.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" public ArrayList\u003cTask\u003e loadData() throws DukeDatabaseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" boolean createdFile \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" createFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" createdFile \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" loadedTasks.add(readEntry(line));","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" scanner.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" if (createdFile) {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" return loadedTasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" this.createFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ruth-lim"},"content":" * Creates the storage txt file and its directory.","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ruth-lim"},"content":" * @throws DukeDatabaseException If there is a problem with creating the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ruth-lim"},"content":" private void createFile() throws DukeDatabaseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"ruth-lim"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"ruth-lim"},"content":" File directory \u003d new File(file.getParent());","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"ruth-lim"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"ruth-lim"},"content":" directory.mkdirs();","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"ruth-lim"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"ruth-lim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"ruth-lim"},"content":" throw new DukeDatabaseException();","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"ruth-lim"},"content":" * Reads the entry from the txt file and converts to a Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"ruth-lim"},"content":" * @param entry The entry to be read.","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"ruth-lim"},"content":" * @return The corresponding Task object read from the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"ruth-lim"},"content":" private Task readEntry(String entry) {","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"ruth-lim"},"content":" String[] parts \u003d entry.split(\" \\\\| \");","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"ruth-lim"},"content":" Task taskToAdd \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"ruth-lim"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"ruth-lim"},"content":" switch (parts[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"ruth-lim"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"ruth-lim"},"content":" taskToAdd \u003d new Todo(parts[2]);","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"ruth-lim"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"ruth-lim"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"ruth-lim"},"content":" taskToAdd \u003d new Deadline(parts[2], LocalDateTime.parse(parts[3], formatter));","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"ruth-lim"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"ruth-lim"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"ruth-lim"},"content":" taskToAdd \u003d new Event(parts[2], LocalDateTime.parse(parts[3], formatter));","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"ruth-lim"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"ruth-lim"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"ruth-lim"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"ruth-lim"},"content":" if (parts[1].equals(\"1\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"ruth-lim"},"content":" taskToAdd.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"ruth-lim"},"content":" return taskToAdd;","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"ruth-lim"},"content":" * Saves the tasks from the TaskList to the storage txt file.","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"ruth-lim"},"content":" * @param taskList The TaskList containing the tasks to be saved.","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"ruth-lim"},"content":" * @throws IOException If there is an issue writing to the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"ruth-lim"},"content":" public void saveData(TaskList taskList) throws IOException {","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"ruth-lim"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"ruth-lim"},"content":" for (int i \u003d 0; i \u003c taskList.getLength(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"ruth-lim"},"content":" String line \u003d task.toFileString();","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"ruth-lim"},"content":" fw.write(line + System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"ruth-lim"},"content":" fw.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"ruth-lim":139}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" * Represents the user interface for the chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" private static final String LINE \u003d \"\\t____________________________________________________________\";","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" private Scanner input \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" * Reads the user input from the CLI.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" * @return The user input;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" public String readInput() {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" return this.input.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" * Shows user the welcome message when chatbot is started.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t Hello! I\u0027m Bard.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t What can I do for you?\");","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" System.out.println();","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" * Shows user the exit message when chatbot is exited.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" public void showExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" this.input.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" * Shows user the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" * @param taskList The list of tasks to show.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" public void showList(TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t There are no tasks in your list.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" System.out.println();","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" return;","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t Here are the tasks in your list:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" for (int i \u003d 0; i \u003c taskList.getLength(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t \" + (i + 1) + \". \" + taskList.getTask(i));","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":" System.out.println();","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ruth-lim"},"content":" * Shows user a message when a task is added.","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ruth-lim"},"content":" * @param task The added task.","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ruth-lim"},"content":" * @param totalNumTask The total number of tasks in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"ruth-lim"},"content":" public void showAdd(Task task, int totalNumTask) {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"ruth-lim"},"content":" + \"\\t\\t\" + task + \"\\n\\t Now you have \" + totalNumTask + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"ruth-lim"},"content":" System.out.println();","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"ruth-lim"},"content":" * Shows user a message when a task is deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"ruth-lim"},"content":" * @param task The deleted task.","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"ruth-lim"},"content":" * @param totalNumTask The total number of tasks in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"ruth-lim"},"content":" public void showDelete(Task task, int totalNumTask) {","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"ruth-lim"},"content":" + \"\\t\\t\" + task","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"ruth-lim"},"content":" + \"\\n\\t Now you have \" + totalNumTask + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"ruth-lim"},"content":" System.out.println();","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"ruth-lim"},"content":" * Shows user a message when a task is marked as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"ruth-lim"},"content":" * @param task The task marked as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"ruth-lim"},"content":" public void showDone(Task task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"ruth-lim"},"content":" + \"\\t\\t\" + task);","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"ruth-lim"},"content":" System.out.println();","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"ruth-lim"},"content":" * Shows user a message when a task is marked as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"ruth-lim"},"content":" * @param task The task marked as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"ruth-lim"},"content":" public void showNotDone(Task task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t OK, I\u0027ve marked this task as NOT done yet:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"ruth-lim"},"content":" + \"\\t\\t\" + task);","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"ruth-lim"},"content":" System.out.println();","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"ruth-lim"},"content":" * Shows user the tasks for a specific date.","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"ruth-lim"},"content":" * @param date The date for which the tasks are displayed.","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"ruth-lim"},"content":" * @param matchingTasks An ArrayList of tasks that match the search criteria.","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"ruth-lim"},"content":" public void showTasksOnDate(LocalDate date, ArrayList\u003cTask\u003e matchingTasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t Tasks on \" + date.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\")) + \":\");","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"ruth-lim"},"content":" boolean foundTasks \u003d !matchingTasks.isEmpty();","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"ruth-lim"},"content":" int taskNumber \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"ruth-lim"},"content":" if (foundTasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"ruth-lim"},"content":" for (Task task : matchingTasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t \" + taskNumber + \". \" + task);","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"ruth-lim"},"content":" taskNumber++;","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"ruth-lim"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t\\t Yay! You have no tasks on \"","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"ruth-lim"},"content":" + date.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\")) + \" :D\");","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"ruth-lim"},"content":" System.out.println();","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":153,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"ruth-lim"},"content":" * Shows user the tasks for today.","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"ruth-lim"},"content":" * @param today The current date.","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"ruth-lim"},"content":" * @param matchingTasks An ArrayList of tasks that match the search criteria.","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"ruth-lim"},"content":" public void showTasksForToday(LocalDate today, ArrayList\u003cTask\u003e matchingTasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t Tasks for today (\" + today.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\")) + \"):\");","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"ruth-lim"},"content":" boolean foundTasks \u003d !matchingTasks.isEmpty();","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"ruth-lim"},"content":" int taskNumber \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":167,"author":{"gitId":"ruth-lim"},"content":" if (foundTasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"ruth-lim"},"content":" for (Task task : matchingTasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t \" + taskNumber + \". \" + task);","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"ruth-lim"},"content":" taskNumber++;","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"ruth-lim"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t\\t Yay! You have no tasks today :D\");","lastModifiedDate":"2023-08-28"},{"lineNumber":174,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":175,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":176,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":177,"author":{"gitId":"ruth-lim"},"content":" System.out.println();","lastModifiedDate":"2023-08-28"},{"lineNumber":178,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":179,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":180,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"ruth-lim"},"content":" * Shows user the list of matching tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"ruth-lim"},"content":" * @param matchingTasks An ArrayList of tasks that match the search criteria.","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"ruth-lim"},"content":" public void showMatchingTasks(ArrayList\u003cTask\u003e matchingTasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":186,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"ruth-lim"},"content":" if (matchingTasks.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t There are no matching tasks in your list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":189,"author":{"gitId":"ruth-lim"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":191,"author":{"gitId":"ruth-lim"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t \" + (i + 1) + \". \" + matchingTasks.get(i));","lastModifiedDate":"2023-08-29"},{"lineNumber":193,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":195,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"ruth-lim"},"content":" System.out.println();","lastModifiedDate":"2023-08-29"},{"lineNumber":197,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":199,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":200,"author":{"gitId":"ruth-lim"},"content":" * Shows user an error message for Duke exceptions.","lastModifiedDate":"2023-08-29"},{"lineNumber":201,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":202,"author":{"gitId":"ruth-lim"},"content":" * @param e The Duke exception to display.","lastModifiedDate":"2023-08-29"},{"lineNumber":203,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":204,"author":{"gitId":"ruth-lim"},"content":" public void showDukeException(DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":205,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":206,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t\" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":207,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":208,"author":{"gitId":"ruth-lim"},"content":" System.out.println();","lastModifiedDate":"2023-08-28"},{"lineNumber":209,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":210,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":211,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":212,"author":{"gitId":"ruth-lim"},"content":" * Shows user an error message for invalid date-time format.","lastModifiedDate":"2023-08-29"},{"lineNumber":213,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":214,"author":{"gitId":"ruth-lim"},"content":" public void showInvalidDateTimeFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":215,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":216,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\tPlease enter the time in the format of \u003cd/M/yyyy HHmm\u003e!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":217,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":218,"author":{"gitId":"ruth-lim"},"content":" System.out.println();","lastModifiedDate":"2023-08-28"},{"lineNumber":219,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":220,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":221,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":222,"author":{"gitId":"ruth-lim"},"content":" * Shows user an error message for invalid date format.","lastModifiedDate":"2023-08-29"},{"lineNumber":223,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":224,"author":{"gitId":"ruth-lim"},"content":" public void showInvalidDateFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":225,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":226,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\tPlease enter the date in the format of \u003cd/M/yyyy\u003e!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":227,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":228,"author":{"gitId":"ruth-lim"},"content":" System.out.println();","lastModifiedDate":"2023-08-28"},{"lineNumber":229,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":230,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":231,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":232,"author":{"gitId":"ruth-lim"},"content":" * Shows user an error message for saving tasks to data file.","lastModifiedDate":"2023-08-29"},{"lineNumber":233,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":234,"author":{"gitId":"ruth-lim"},"content":" public void showSavingError() {","lastModifiedDate":"2023-08-28"},{"lineNumber":235,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":236,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\tError saving tasks to the data file.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":237,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":238,"author":{"gitId":"ruth-lim"},"content":" System.out.println();","lastModifiedDate":"2023-08-28"},{"lineNumber":239,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":240,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":241,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":242,"author":{"gitId":"ruth-lim"},"content":" * Shows user an error message for array index out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":243,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":244,"author":{"gitId":"ruth-lim"},"content":" public void showArrayIndexOutOfBoundsException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":245,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":246,"author":{"gitId":"ruth-lim"},"content":" System.out.println(\"\\t ☹ OOPS!!! Please provide a valid task number.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":247,"author":{"gitId":"ruth-lim"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":248,"author":{"gitId":"ruth-lim"},"content":" System.out.println();","lastModifiedDate":"2023-08-28"},{"lineNumber":249,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":250,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":250}},{"path":"src/main/java/duke/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to add a deadline task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" private LocalDateTime dateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" * Constructs an AddDeadlineCommand with the provided description and date-time.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" * @param dateTime The date and time associated with the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public AddDeadlineCommand(String description, LocalDateTime dateTime) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" if (description.trim().isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" Deadline newDeadline \u003d new Deadline(description, dateTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(newDeadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" ui.showAdd(newDeadline, taskList.getLength());","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" } catch (EmptyDescriptionException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" ui.showDukeException(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" ui.showInvalidDateTimeFormat();","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":52}},{"path":"src/main/java/duke/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to add an event task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" private LocalDateTime dateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" * Constructs an AddEventCommand with the provided description and date-time.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" * @param dateTime The date and time associated with the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public AddEventCommand(String description, LocalDateTime dateTime) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" if (description.trim().isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" throw new EmptyDescriptionException(\"event\");","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" Event newEvent \u003d new Event(description, dateTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(newEvent);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" ui.showAdd(newEvent, taskList.getLength());","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" } catch (EmptyDescriptionException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" ui.showDukeException(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" ui.showInvalidDateTimeFormat();","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":52}},{"path":"src/main/java/duke/command/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to add a todo task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"public class AddTodoCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" * Constructs an AddTodoCommand with the provided description.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" public AddTodoCommand(String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" if (description.trim().isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" throw new EmptyDescriptionException(\"todo\");","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" Todo newTodo \u003d new Todo(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(newTodo);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" ui.showAdd(newTodo, taskList.getLength());","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" } catch (EmptyDescriptionException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" ui.showDukeException(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":43}},{"path":"src/main/java/duke/command/CheckCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to check and display tasks on a specific date.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"public class CheckCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" private String dateToCheck;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" * Constructs a CheckCommand with the provided date.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" * @param dateToCheck The date to check for tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public CheckCommand(String dateToCheck) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" this.dateToCheck \u003d dateToCheck;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" if (dateToCheck.trim().isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" throw new EmptyDescriptionException(\"date\");","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" LocalDate date \u003d LocalDate.parse(dateToCheck.trim(), DateTimeFormatter.ofPattern(\"d/M/yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" for (int i \u003d 0; i \u003c taskList.getLength(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" if (task.isOnDate(date)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" ui.showTasksOnDate(date, matchingTasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" } catch (EmptyDescriptionException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" ui.showDukeException(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" ui.showInvalidDateFormat();","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":59}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Represents an abstract command that can be executed by the chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" * Executes the command\u0027s action.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" * @param taskList The list of tasks that the command operates on.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" * @param ui The user interface instance to interact with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * @param storage The storage instance to manage data.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" * @throws DukeException If an exception specific to Duke\u0027s operations occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" * @return True if the command is an exit command, false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":29}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.InvalidTaskIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" * Constructs a DeleteCommand with the provided task index.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * @param taskIndex The index of the task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d taskList.getLength()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" throw new InvalidTaskIndexException(taskIndex + 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" Task removedTask \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" taskList.deleteTask(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" ui.showDelete(removedTask, taskList.getLength());","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" ui.showDukeException(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" } catch (ArrayIndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" ui.showArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":46}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to exit the chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" storage.saveData(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" ui.showExit();","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" ui.showSavingError();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":28}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to find tasks containing a specific keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" private String keyword;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * Constructs a FindCommand with the provided keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" for (int i \u003d 0; i \u003c taskList.getLength(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" ui.showMatchingTasks(matchingTasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":43}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to list all tasks in the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" ui.showList(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":21}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.InvalidTaskIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to mark a task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * Constructs a MarkCommand with the provided task index.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" * @param taskIndex The index of the task to be marked as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" public MarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d taskList.getLength()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" throw new InvalidTaskIndexException(taskIndex + 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" ui.showDone(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" storage.saveData(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" ui.showDukeException(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" ui.showSavingError();","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":48}},{"path":"src/main/java/duke/command/TodayCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to display tasks for today.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"public class TodayCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" LocalDate today \u003d LocalDate.now();","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" for (int i \u003d 0; i \u003c taskList.getLength(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" if (task.isOnDate(today)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" ui.showTasksForToday(today, matchingTasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":35}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.InvalidTaskIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to mark a task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" * Constructs an UnmarkCommand with the provided task index.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" * @param taskIndex The index of the task to be marked as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" public UnmarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d taskList.getLength()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" throw new InvalidTaskIndexException(taskIndex + 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" ui.showNotDone(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" storage.saveData(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" ui.showDukeException(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" ui.showSavingError();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" } catch (ArrayIndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" ui.showArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":51}},{"path":"src/main/java/duke/exception/DukeDatabaseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents an exception that is thrown when there is an error relating to the chatbot\u0027s database.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class DukeDatabaseException extends DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Constructs a DukeDatabaseException with an error message indicating a database error.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" public DukeDatabaseException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" super(\" ☹ OOPS!!! Error encountered with database.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":14}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Abstract representation of all duke exceptions.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public abstract class DukeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Constructs a DukeException with the specified error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":16}},{"path":"src/main/java/duke/exception/EmptyCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents an exception that occurs when a user enters an empty command to the chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class EmptyCommandException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Constructs an EmptyCommandException with an error message indicating an empty command.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" public EmptyCommandException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" super(\" ☹ OOPS!!! Please enter a valid command.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":14}},{"path":"src/main/java/duke/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents an exception that occurs when the description of a task is empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class EmptyDescriptionException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Constructs an EmptyDescriptionException with an error message based on the task type.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" * @param taskType The type of task for which the description is empty or missing.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" public EmptyDescriptionException(String taskType) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" super(generateErrorMessage(taskType));","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * Generates an error message based on the task type.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" * @param taskType The type of task for which the description is empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" * @return An error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" private static String generateErrorMessage(String taskType) {","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" if (taskType.equals(\"event\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" return \" ☹ OOPS!!! The description of an event cannot be empty.\";","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" return \" ☹ OOPS!!! The description of a \" + taskType + \" cannot be empty.\";","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":30}},{"path":"src/main/java/duke/exception/InvalidFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents an exception that occurs when the format of a command is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class InvalidFormatException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Constructs an InvalidFormatException with an error message explaining the invalid command format.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" * @param formatDescription A description of the expected format of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" public InvalidFormatException(String formatDescription) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" super(\" ☹ OOPS!!! The format of the command is invalid. \\n\\t \" + formatDescription);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ruth-lim":16}},{"path":"src/main/java/duke/exception/InvalidTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents an exception that occurs when an invalid task index is provided.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class InvalidTaskIndexException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Constructs an InvalidTaskIndexException with an error message indicating the invalid task index.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" * @param taskIndex The invalid task index provided by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" public InvalidTaskIndexException(int taskIndex) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" super(\" ☹ OOPS!!! I cannot find the task with index \" + taskIndex + \".\");","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":16}},{"path":"src/main/java/duke/exception/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents an exception that occurs when user inputs an unknown or unrecognised command.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class UnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Constructs an UnknownCommandException with an error message indicating an unrecognised command.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" super(\" ☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":14}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" * Represents a Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" protected LocalDateTime dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" * Constructs a Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * @param dateTime The date and time of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" public Deadline(String description, LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public LocalDateTime getDateTime() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" return this.dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" return this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" return \"D | \" + (isDone ? \"1\" : \"0\") + \" | \" + description","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" + \" | \" + this.dateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" public boolean isOnDate(LocalDate date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" return this.dateTime.toLocalDate().equals(date);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy\");","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"h:mma\"); // Print in 12-hour time format","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" String timeString \u003d this.dateTime.format(timeFormatter).toLowerCase();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" return \"[D]\" + super.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" + \" (by: \" + this.dateTime.format(dateFormatter) + \" \" + timeString + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":53}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" * Represents an Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" protected LocalDateTime dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" * Constructs an Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" * @param dateTime The date and time of the event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" public Event(String description, LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" public LocalDateTime getDateTime() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" return this.dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" return this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" return \"E | \" + (isDone ? \"1\" : \"0\") + \" | \" + description","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" + \" | \" + this.dateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" public boolean isOnDate(LocalDate date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" return this.dateTime.toLocalDate().equals(date);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy\");","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"h:mma\"); // Print in 12-hour time format","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" String timeString \u003d this.dateTime.format(timeFormatter).toLowerCase();","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" + \" (at: \" + this.dateTime.format(dateFormatter) + \" \" + timeString + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":54}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" * Represents a task in the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" protected LocalDateTime dateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" * Constructs a task with a description.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" * Returns the task information formatted for storage txt file.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" * @return A string representation of the task for storage txt file.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" public abstract String toFileString();","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" return this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" * Returns the string indicating the task\u0027s status (done or not done).","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" return (isDone ? \"[X]\" : \"[ ]\"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" * Checks if the task is marked as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" * @return True if task is marked as done; false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" return this.isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" /** Mark the task as done. */","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" /** Mark the task as not done. */","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" public abstract boolean isOnDate(LocalDate date);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":" * @return A formatted string describing the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"ruth-lim"},"content":" String formattedDescription \u003d getStatusIcon() + \" \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"ruth-lim"},"content":" if (dateTime !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"ruth-lim"},"content":" String formattedDateTime \u003d dateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"ruth-lim"},"content":" return formattedDescription + \" (at: \" + formattedDateTime + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"ruth-lim"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"ruth-lim"},"content":" return formattedDescription;","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":78}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" private ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" * Constructs a TaskList with existing tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" * @param tasks The initial list of tasks to populate the TaskList.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" this.list.addAll(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" * Deletes a task from the TaskList.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" * @param taskIndex The index of the task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" public void deleteTask(int taskIndex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" this.list.remove(taskIndex);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" * Retrieves a task from the TaskList based on the task index.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" * @param taskIndex The index of the task to be retrieved.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" return this.list.get(taskIndex);","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" * Returns the number of tasks in the TaskList.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" public int getLength() {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" return this.list.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" * Checks if the TaskList is empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" * @return True if the TaskList is empty, false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" return this.getLength() \u003d\u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":64}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":" * Represents a Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" * Constructs a Todo task with a description.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" * @param description The description of the Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" * Returns the task information formatted for storage in the txt file.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" * @return A string representation of the Todo task for storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" return \"T | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" public boolean isOnDate(LocalDate date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":38}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeDatabaseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" public void loadData_nonExistentFile_throwsNullPointerException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" String filePath \u003d \"nonexistent_file.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" assertThrows(NullPointerException.class, storage::loadData);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" public void loadData_existingFile_success() throws DukeDatabaseException {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" String filePath \u003d \"test_data.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" writer.write(\"T | 0 | Task 1\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" writer.write(\"D | 1 | Deadline Task | 2023-08-30 14:30\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" writer.write(\"E | 0 | Event Task | 2023-08-31 15:00\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d storage.loadData();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" assertEquals(3, loadedTasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" assertTrue(loadedTasks.get(0) instanceof Todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" assertTrue(loadedTasks.get(1) instanceof Deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" assertTrue(loadedTasks.get(2) instanceof Event);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" fail(\"IOException should not occur.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" } finally {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" if (file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" file.delete();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" public void saveData_success() throws DukeDatabaseException, IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" String filePath \u003d \"test_data.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" TaskList taskList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(new Todo(\"Test Todo\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(new Deadline(\"Test Deadline\", LocalDateTime.now()));","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(new Event(\"Test Event\", LocalDateTime.now()));","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":" storage.saveData(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"ruth-lim"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d storage.loadData();","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ruth-lim"},"content":" assertEquals(3, loadedTasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ruth-lim"},"content":" assertTrue(loadedTasks.get(0) instanceof Todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ruth-lim"},"content":" assertTrue(loadedTasks.get(1) instanceof Deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ruth-lim"},"content":" assertTrue(loadedTasks.get(2) instanceof Event);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"ruth-lim"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"ruth-lim"},"content":" if (file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"ruth-lim"},"content":" file.delete();","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"ruth-lim"},"content":" public void saveData_ioException_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"ruth-lim"},"content":" String invalidFilePath \u003d \"/invalid/path/test_data.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"ruth-lim"},"content":" Storage storage \u003d new Storage(invalidFilePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"ruth-lim"},"content":" // Trying to save data to a directory instead of a file","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"ruth-lim"},"content":" assertThrows(IOException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"ruth-lim"},"content":" storage.saveData(new TaskList(new ArrayList\u003c\u003e()));","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"ruth-lim"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":94}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" public void constructor_validInput_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" Deadline deadline \u003d new Deadline(\"Finish project\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"Finish project\", deadline.getDescription());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" assertFalse(deadline.isDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" assertEquals(dateTime, deadline.getDateTime());","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" public void constructor_invalidDateTime_throwsDateTimeParseException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" assertThrows(DateTimeParseException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" new Event(\"Finish Project\", LocalDateTime.parse(\"2023-08-30 14:30:00\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" public void toFileString_isNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" Deadline deadline \u003d new Deadline(\"Finish project\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"D | 0 | Finish project | 2023-08-30 14:30\";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, deadline.toFileString());","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" public void toFileString_isDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" Deadline deadline \u003d new Deadline(\"Finish project\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"D | 1 | Finish project | 2023-08-30 14:30\";","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, deadline.toFileString());","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" public void toString_isNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" Deadline deadline \u003d new Deadline(\"Finish project\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"[D][ ] Finish project (by: 30 Aug 2023 2:30pm)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, deadline.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" public void toString_isDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" Deadline deadline \u003d new Deadline(\"Finish project\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"[D][X] Finish project (by: 30 Aug 2023 2:30pm)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, deadline.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":69}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"public class EventTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" public void constructor_validInput_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" Event event \u003d new Event(\"Meeting\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"Meeting\", event.getDescription());","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" assertFalse(event.isDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" assertEquals(dateTime, event.getDateTime());","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public void constructor_invalidDateTime_throwsDateTimeParseException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" assertThrows(DateTimeParseException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" new Event(\"Meeting\", LocalDateTime.parse(\"2023-08-30 14:30:00\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" public void toFileString_isNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" Event event \u003d new Event(\"Meeting\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"E | 0 | Meeting | 2023-08-30 14:30\";","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, event.toFileString());","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" public void toFileString_isDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" Event event \u003d new Event(\"Meeting\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" event.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"E | 1 | Meeting | 2023-08-30 14:30\";","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, event.toFileString());","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" public void toString_isNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" Event event \u003d new Event(\"Meeting\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"[E][ ] Meeting (at: 30 Aug 2023 2:30pm)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, event.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" public void toString_isDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" Event event \u003d new Event(\"Meeting\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" event.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"[E][X] Meeting (at: 30 Aug 2023 2:30pm)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, event.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":69}},{"path":"src/test/java/duke/task/MockDeadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents a mock deadline task in the Duke chatbot application.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class MockDeadline extends Deadline {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":" public MockDeadline(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" super(description, null);","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" return \"Mock Deadline File String\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":15}},{"path":"src/test/java/duke/task/MockEvent.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents a mock event task in the Duke chatbot application.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class MockEvent extends Event {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":" public MockEvent(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" super(description, null);","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" return \"Mock Event File String\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":15}},{"path":"src/test/java/duke/task/MockTodo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents a mock todo task in the Duke chatbot application.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class MockTodo extends Todo {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":" public MockTodo(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" return \"Mock Todo File String\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":15}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" @BeforeEach","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" public void setUp() {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" // Initialize the taskList before each test","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" // Add tasks into the array list","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" tasks.add(new MockTodo(\"Todo Task\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" tasks.add(new MockDeadline(\"Deadline Task\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" tasks.add(new MockEvent(\"Event Task\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" taskList \u003d new TaskList(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" public void addTask_validInput_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d new MockTodo(\"Sample Todo Task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" // Check the new task is added to the end","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" assertEquals(4, taskList.getLength());","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" assertEquals(task, taskList.getTask(3));","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" public void deleteTask_validInput_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" int initialSize \u003d taskList.getLength();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" // Check the task is deleted and list size is reduced","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" assertEquals(initialSize - 1, taskList.getLength());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" public void deleteTask_invalidIndex_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" // Try to delete from an invalid index","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" taskList.deleteTask(10);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" public void deleteTask_emptyList_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" // Create an empty list","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" TaskList emptyList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" // Try to delete from an empty list","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" emptyList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":" public void getTask_validInput_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d taskList.getTask(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"Deadline Task\", task.description);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ruth-lim"},"content":" public void getTask_invalidIndex_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ruth-lim"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ruth-lim"},"content":" taskList.getTask(10);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"ruth-lim"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"ruth-lim"},"content":" public void getLength_emptyList_success() {","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"ruth-lim"},"content":" taskList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"ruth-lim"},"content":" assertEquals(0, taskList.getLength());","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"ruth-lim"},"content":" public void getLength_nonEmptyList_success() {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"ruth-lim"},"content":" taskList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"ruth-lim"},"content":" for (int i \u003d 0; i \u003c 5; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(new MockTodo(\"Test Task\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"ruth-lim"},"content":" assertEquals(5, taskList.getLength());","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"ruth-lim"},"content":" public void isEmpty_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"ruth-lim"},"content":" assertFalse(taskList.isEmpty());","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"ruth-lim"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"ruth-lim"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"ruth-lim"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"ruth-lim"},"content":" assertTrue(taskList.isEmpty());","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"ruth-lim"},"content":" public void isEmpty_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"ruth-lim"},"content":" assertFalse(taskList.isEmpty());","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"ruth-lim"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"ruth-lim"},"content":" assertFalse(taskList.isEmpty());","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":112}},{"path":"src/test/java/duke/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" public void getStatusIcon_todoNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"[ ]\", todo.getStatusIcon());","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" public void getStatusIcon_todoDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"[X]\", todo.getStatusIcon());","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public void markAsDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" assertTrue(todo.isDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" public void markAsNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" todo.markAsNotDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" assertFalse(todo.isDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" public void toFileString_isNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"T | 0 | Sample Todo\", todo.toFileString());","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" public void toFileString_isDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"T | 1 | Sample Todo\", todo.toFileString());","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" public void toString_isDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"[T][ ] Sample Todo\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" public void toString_isNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"[T][X] Sample Todo\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":65}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"todo read book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"deadline return book /by 29/8/2023 1800","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"event project meeting /at 29/8/2023 2000","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"mark","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":9}},{"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":"ruth-lim"},"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":{"ruth-lim":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"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":"ruth-lim"},"content":"1. Open Intellij (if you are not in the welcome screen, click `duke.Storage` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2023-08-29"},{"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":"ruth-lim"},"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":{"ruth-lim":3,"-":21}},{"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":"ruth-lim"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\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":"ruth-lim"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"javafx {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" version \u003d \"20.0.1\"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" modules \u003d [ \u0027javafx.controls\u0027 ]","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" mavenCentral()","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":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ruth-lim":26,"-":43}},{"path":"src/main/java/duke/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents the possible commands for the chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public enum CommandType {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":" BYE, LIST, MARK, UNMARK, DELETE, CHECK, TODAY, FIND,","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" TODO, DEADLINE, EVENT,","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":9}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"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":"ruth-lim"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ruth-lim":62}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeDatabaseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.EmptyCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" * Main class representing the chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" private static final String DATAPATH \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" private Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" private Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" * Constructs a Duke instance.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" * @param filePath The file path for storing task data.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" this.taskList \u003d new TaskList(this.storage.loadData());","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" } catch (DukeDatabaseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" this.ui.showDukeException(e);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" public Duke() {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" this(DATAPATH);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" * Main execution method that processes user input and returns a response string.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" * @return The response to the user as a string.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" public String getResponse(String userInput) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" if (userInput.trim().isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" throw new EmptyCommandException();","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" Command command \u003d Parser.parseCommand(userInput);","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" return command.execute(taskList, ui, storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" return ui.showDukeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" } catch (ArrayIndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" return ui.showArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" new Duke(DATAPATH);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ruth-lim":60,"-":3}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ruth-lim":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ruth-lim":32}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import javafx.application.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"import java.util.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" private Duke duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" * Initializes the main window of the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" startupMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"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":"ruth-lim"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" if (input.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" TimerTask task \u003d new TimerTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" Platform.exit();","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" System.exit(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":" };","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":" Timer timer \u003d new Timer(\"Delay\");","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":" timer.schedule(task, 1000L);","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"ruth-lim"},"content":" * Duke startup message for GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"ruth-lim"},"content":" private void startupMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"ruth-lim"},"content":" dialogContainer.getChildren().addAll(DialogBox.getDukeDialog(ui.showWelcome(), dukeImage));","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ruth-lim":79}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.command.AddDeadlineCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.command.AddEventCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.command.AddTodoCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import duke.command.CheckCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"import duke.command.TodayCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.InvalidFormatException;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.UnknownCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" * Parser for user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" * Parses the input and creates the corresponding Command object.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" * @return The Command object based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" * @throws DukeException If there is an issue parsing the input or creating the Command.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" public static Command parseCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" String command \u003d parts[0].toUpperCase();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" CommandType commandType;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" commandType \u003d CommandType.valueOf(command);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" case BYE:","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" case LIST:","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" case MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" return new MarkCommand(Integer.parseInt(parseArgument(parts)) - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" case UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" return new UnmarkCommand(Integer.parseInt(parseArgument(parts)) - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" case TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" return new AddTodoCommand(parseArgument(parts));","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" return parseAddDeadlineCommand(parseArgument(parts));","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" case EVENT:","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" return parseAddEventCommand(parseArgument(parts));","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" case DELETE:","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" return new DeleteCommand(Integer.parseInt(parseArgument(parts)) - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" case FIND:","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" return new FindCommand(parseArgument(parts));","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":" case CHECK:","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":" return new CheckCommand(Parser.parseArgument(parts));","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":" case TODAY:","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":" return new TodayCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"ruth-lim"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"ruth-lim"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ruth-lim"},"content":" * Parses the argument from a user input and returns it.","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"ruth-lim"},"content":" * @param parts The split user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"ruth-lim"},"content":" * @return The argument portion of the user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"ruth-lim"},"content":" public static String parseArgument(String[] parts) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"ruth-lim"},"content":" if (parts.length \u003e 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"ruth-lim"},"content":" return parts[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"ruth-lim"},"content":" return \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"ruth-lim"},"content":" * Parses the argument to create an AddDeadlineCommand.","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"ruth-lim"},"content":" * @param argument The argument portion of the user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"ruth-lim"},"content":" * @return The AddDeadlineCommand based on the argument.","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"ruth-lim"},"content":" * @throws InvalidFormatException If there is an issue with the argument format.","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"ruth-lim"},"content":" private static AddDeadlineCommand parseAddDeadlineCommand(String argument) throws InvalidFormatException {","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"ruth-lim"},"content":" String[] deadlineParts \u003d argument.split(\"/by\");","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"ruth-lim"},"content":" if (deadlineParts.length \u003c 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"ruth-lim"},"content":" throw new InvalidFormatException(\"Please use the format: deadline \u003cdescription\u003e /by \u003cd/M/yyyy HHmm\u003e.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"ruth-lim"},"content":" String description \u003d deadlineParts[0].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"ruth-lim"},"content":" String by \u003d deadlineParts[1].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"ruth-lim"},"content":" return new AddDeadlineCommand(description, dateTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"ruth-lim"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"ruth-lim"},"content":" throw new InvalidFormatException(\"Invalid date and time format. Please use the format: d/M/yyyy HHmm.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"ruth-lim"},"content":" * Parses the argument to create an AddEventCommand.","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"ruth-lim"},"content":" * @param argument The argument portion of the user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"ruth-lim"},"content":" * @return The AddEventCommand based on the argument.","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"ruth-lim"},"content":" * @throws InvalidFormatException If there is an issue with the argument format.","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"ruth-lim"},"content":" private static AddEventCommand parseAddEventCommand(String argument) throws InvalidFormatException {","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"ruth-lim"},"content":" String[] eventParts \u003d argument.split(\"/at\");","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"ruth-lim"},"content":" if (eventParts.length \u003c 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"ruth-lim"},"content":" throw new InvalidFormatException(\"Please use the format: event \u003cdescription\u003e /at \u003cd/M/yyyy HHmm\u003e\");","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"ruth-lim"},"content":" String description \u003d eventParts[0].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"ruth-lim"},"content":" String at \u003d eventParts[1].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(at, DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"ruth-lim"},"content":" return new AddEventCommand(description, dateTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"ruth-lim"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"ruth-lim"},"content":" throw new InvalidFormatException(\"Invalid date and time format. Please use the format: d/M/yyyy HHmm.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":138}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeDatabaseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" * Handles the loading and storing tasks to a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" private String filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" * @param filePath The file path for storing task data.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" * Loads tasks from teh specified file path.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" * @return The list of tasks loaded.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" * @throws DukeDatabaseException If there is a problem with creating the database.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" public ArrayList\u003cTask\u003e loadData() throws DukeDatabaseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" boolean createdFile \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" createFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" createdFile \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" loadedTasks.add(readEntry(line));","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" scanner.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" if (createdFile) {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" return loadedTasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" this.createFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ruth-lim"},"content":" * Creates the storage txt file and its directory.","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ruth-lim"},"content":" * @throws DukeDatabaseException If there is a problem with creating the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ruth-lim"},"content":" private void createFile() throws DukeDatabaseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"ruth-lim"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"ruth-lim"},"content":" File directory \u003d new File(file.getParent());","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"ruth-lim"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"ruth-lim"},"content":" directory.mkdirs();","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"ruth-lim"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"ruth-lim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"ruth-lim"},"content":" throw new DukeDatabaseException();","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"ruth-lim"},"content":" * Reads the entry from the txt file and converts to a Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"ruth-lim"},"content":" * @param entry The entry to be read.","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"ruth-lim"},"content":" * @return The corresponding Task object read from the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"ruth-lim"},"content":" private Task readEntry(String entry) {","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"ruth-lim"},"content":" String[] parts \u003d entry.split(\" \\\\| \");","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"ruth-lim"},"content":" Task taskToAdd \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"ruth-lim"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"ruth-lim"},"content":" switch (parts[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"ruth-lim"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"ruth-lim"},"content":" taskToAdd \u003d new Todo(parts[2]);","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"ruth-lim"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"ruth-lim"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"ruth-lim"},"content":" taskToAdd \u003d new Deadline(parts[2], LocalDateTime.parse(parts[3], formatter));","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"ruth-lim"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"ruth-lim"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"ruth-lim"},"content":" taskToAdd \u003d new Event(parts[2], LocalDateTime.parse(parts[3], formatter));","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"ruth-lim"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"ruth-lim"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"ruth-lim"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"ruth-lim"},"content":" if (parts[1].equals(\"1\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"ruth-lim"},"content":" taskToAdd.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"ruth-lim"},"content":" return taskToAdd;","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"ruth-lim"},"content":" * Saves the tasks from the TaskList to the storage txt file.","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"ruth-lim"},"content":" * @param taskList The TaskList containing the tasks to be saved.","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"ruth-lim"},"content":" * @throws IOException If there is an issue writing to the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"ruth-lim"},"content":" public void saveData(TaskList taskList) throws IOException {","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"ruth-lim"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"ruth-lim"},"content":" for (int i \u003d 0; i \u003c taskList.getLength(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"ruth-lim"},"content":" String line \u003d task.toFileString();","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"ruth-lim"},"content":" fw.write(line + System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"ruth-lim"},"content":" fw.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"ruth-lim":139}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" * Represents the user interface for the chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" private Scanner input \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" private StringBuilder messages;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" public Ui() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" messages \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" * Reads the user input from the CLI.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" * @return The user input;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" public String readInput() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" return this.input.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" * Shows user the welcome message when chatbot is started.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" String message \u003d \"Hello! I\u0027m Bard.\\nWhat can I do for you?\";","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" display(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" * Shows user the exit message when chatbot is exited.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" public String showExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" this.input.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" * Shows user the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" * @param taskList The list of tasks to show.","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" public String showList(TaskList taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" message.append(\"There are no tasks in your list.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" message.append(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" for (int i \u003d 0; i \u003c taskList.getLength(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" message.append(\"\\n\").append(i + 1).append(\". \").append(taskList.getTask(i));","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" display(message.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":" return message.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ruth-lim"},"content":" * Shows user a message when a task is added.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ruth-lim"},"content":" * @param task The added task.","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ruth-lim"},"content":" * @param totalNumTask The total number of tasks in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ruth-lim"},"content":" public String showAdd(Task task, int totalNumTask) {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"ruth-lim"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"ruth-lim"},"content":" + task + \"\\nNow you have \" + totalNumTask + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"ruth-lim"},"content":" * Shows user a message when a task is deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"ruth-lim"},"content":" * @param task The deleted task.","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"ruth-lim"},"content":" * @param totalNumTask The total number of tasks in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"ruth-lim"},"content":" public String showDelete(Task task, int totalNumTask) {","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"ruth-lim"},"content":" return \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"ruth-lim"},"content":" + task + \"\\nNow you have \" + totalNumTask + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"ruth-lim"},"content":" * Shows user a message when a task is marked as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"ruth-lim"},"content":" * @param task The task marked as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"ruth-lim"},"content":" public String showDone(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"ruth-lim"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"ruth-lim"},"content":" * Shows user a message when a task is marked as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"ruth-lim"},"content":" * @param task The task marked as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"ruth-lim"},"content":" public String showNotDone(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"ruth-lim"},"content":" return \"OK, I\u0027ve marked this task as NOT done yet:\\n\" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"ruth-lim"},"content":" * Shows user the tasks for a specific date.","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"ruth-lim"},"content":" * @param date The date for which the tasks are displayed.","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"ruth-lim"},"content":" * @param matchingTasks An ArrayList of tasks that match the search criteria.","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"ruth-lim"},"content":" public String showTasksOnDate(LocalDate date, ArrayList\u003cTask\u003e matchingTasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"ruth-lim"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"ruth-lim"},"content":" message.append(\"Tasks on \").append(date.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\"))).append(\":\");","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"ruth-lim"},"content":" boolean foundTasks \u003d !matchingTasks.isEmpty();","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"ruth-lim"},"content":" int taskNumber \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"ruth-lim"},"content":" if (foundTasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"ruth-lim"},"content":" for (Task task : matchingTasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"ruth-lim"},"content":" message.append(\"\\n\").append(taskNumber).append(\". \").append(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"ruth-lim"},"content":" taskNumber++;","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"ruth-lim"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"ruth-lim"},"content":" message.append(\"\\nYay! You have no tasks on \")","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"ruth-lim"},"content":" .append(date.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\"))).append(\" :D\");","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"ruth-lim"},"content":" display(message.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"ruth-lim"},"content":" return message.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"ruth-lim"},"content":" * Shows user the tasks for today.","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"ruth-lim"},"content":" * @param today The current date.","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"ruth-lim"},"content":" * @param matchingTasks An ArrayList of tasks that match the search criteria.","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"ruth-lim"},"content":" public String showTasksForToday(LocalDate today, ArrayList\u003cTask\u003e matchingTasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"ruth-lim"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"ruth-lim"},"content":" message.append(\"Tasks for today (\")","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"ruth-lim"},"content":" .append(today.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\"))).append(\"):\");","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"ruth-lim"},"content":" boolean foundTasks \u003d !matchingTasks.isEmpty();","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"ruth-lim"},"content":" int taskNumber \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"ruth-lim"},"content":" if (foundTasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"ruth-lim"},"content":" for (Task task : matchingTasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"ruth-lim"},"content":" message.append(\"\\n\").append(taskNumber).append(\". \").append(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"ruth-lim"},"content":" taskNumber++;","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":153,"author":{"gitId":"ruth-lim"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"ruth-lim"},"content":" message.append(\"\\nYay! You have no tasks today :D\");","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"ruth-lim"},"content":" display(message.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"ruth-lim"},"content":" return message.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"ruth-lim"},"content":" * Shows user the list of matching tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"ruth-lim"},"content":" * @param matchingTasks An ArrayList of tasks that match the search criteria.","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"ruth-lim"},"content":" public String showMatchingTasks(ArrayList\u003cTask\u003e matchingTasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"ruth-lim"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"ruth-lim"},"content":" if (matchingTasks.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"ruth-lim"},"content":" message.append(\"There are no matching tasks in your list.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"ruth-lim"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"ruth-lim"},"content":" message.append(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"ruth-lim"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"ruth-lim"},"content":" message.append(\"\\n\").append(i + 1).append(\". \").append(matchingTasks.get(i));","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"ruth-lim"},"content":" display(message.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"ruth-lim"},"content":" return message.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"ruth-lim"},"content":" * Shows user an error message for Duke exceptions.","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"ruth-lim"},"content":" * @param e The Duke exception to display.","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"ruth-lim"},"content":" public String showDukeException(DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"ruth-lim"},"content":" String message \u003d e.getMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"ruth-lim"},"content":" display(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"ruth-lim"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":190,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":191,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"ruth-lim"},"content":" * Shows user an error message for invalid date-time format.","lastModifiedDate":"2023-08-29"},{"lineNumber":193,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"ruth-lim"},"content":" public String showInvalidDateTimeFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"ruth-lim"},"content":" String message \u003d \"Please enter the time in the format of \u003cd/M/yyyy HHmm\u003e!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":196,"author":{"gitId":"ruth-lim"},"content":" display(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":197,"author":{"gitId":"ruth-lim"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":198,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":199,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":200,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":201,"author":{"gitId":"ruth-lim"},"content":" * Shows user an error message for invalid date format.","lastModifiedDate":"2023-08-29"},{"lineNumber":202,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":203,"author":{"gitId":"ruth-lim"},"content":" public String showInvalidDateFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":204,"author":{"gitId":"ruth-lim"},"content":" String message \u003d \"Please enter the date in the format of \u003cd/M/yyyy\u003e!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"ruth-lim"},"content":" display(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":206,"author":{"gitId":"ruth-lim"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":207,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":208,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":209,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":210,"author":{"gitId":"ruth-lim"},"content":" * Shows user an error message for saving tasks to data file.","lastModifiedDate":"2023-08-29"},{"lineNumber":211,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":212,"author":{"gitId":"ruth-lim"},"content":" public String showSavingError() {","lastModifiedDate":"2023-09-04"},{"lineNumber":213,"author":{"gitId":"ruth-lim"},"content":" String message \u003d \"Error saving tasks to the data file.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"ruth-lim"},"content":" display(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":215,"author":{"gitId":"ruth-lim"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":216,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":217,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":218,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":219,"author":{"gitId":"ruth-lim"},"content":" * Shows user an error message for array index out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":220,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":221,"author":{"gitId":"ruth-lim"},"content":" public String showArrayIndexOutOfBoundsException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":222,"author":{"gitId":"ruth-lim"},"content":" String message \u003d \"☹ OOPS!!! Please provide a valid task number.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":223,"author":{"gitId":"ruth-lim"},"content":" display(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":224,"author":{"gitId":"ruth-lim"},"content":" return message;","lastModifiedDate":"2023-09-04"},{"lineNumber":225,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":226,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":227,"author":{"gitId":"ruth-lim"},"content":" // New method to display messages","lastModifiedDate":"2023-09-04"},{"lineNumber":228,"author":{"gitId":"ruth-lim"},"content":" private void display(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":229,"author":{"gitId":"ruth-lim"},"content":" messages.append(message).append(\"\\n\"); // Append the message to the StringBuilder","lastModifiedDate":"2023-09-04"},{"lineNumber":230,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":231,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":232,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":232}},{"path":"src/main/java/duke/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to add a deadline task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" private LocalDateTime dateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" * Constructs an AddDeadlineCommand with the provided description and date-time.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" * @param dateTime The date and time associated with the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public AddDeadlineCommand(String description, LocalDateTime dateTime) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" if (description.trim().isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" Deadline newDeadline \u003d new Deadline(description, dateTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(newDeadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" return ui.showAdd(newDeadline, taskList.getLength());","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" } catch (EmptyDescriptionException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" return ui.showDukeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" return ui.showInvalidDateTimeFormat();","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":52}},{"path":"src/main/java/duke/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to add an event task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" private LocalDateTime dateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" * Constructs an AddEventCommand with the provided description and date-time.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" * @param dateTime The date and time associated with the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public AddEventCommand(String description, LocalDateTime dateTime) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" if (description.trim().isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" throw new EmptyDescriptionException(\"event\");","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" Event newEvent \u003d new Event(description, dateTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(newEvent);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" return ui.showAdd(newEvent, taskList.getLength());","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" } catch (EmptyDescriptionException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" return ui.showDukeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" return ui.showInvalidDateTimeFormat();","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":52}},{"path":"src/main/java/duke/command/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to add a todo task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"public class AddTodoCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" * Constructs an AddTodoCommand with the provided description.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" public AddTodoCommand(String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" if (description.trim().isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" throw new EmptyDescriptionException(\"todo\");","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" Todo newTodo \u003d new Todo(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(newTodo);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" return ui.showAdd(newTodo, taskList.getLength());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" } catch (EmptyDescriptionException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" return ui.showDukeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":43}},{"path":"src/main/java/duke/command/CheckCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to check and display tasks on a specific date.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"public class CheckCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" private String dateToCheck;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" * Constructs a CheckCommand with the provided date.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" * @param dateToCheck The date to check for tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public CheckCommand(String dateToCheck) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" this.dateToCheck \u003d dateToCheck;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" if (dateToCheck.trim().isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" throw new EmptyDescriptionException(\"date\");","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" LocalDate date \u003d LocalDate.parse(dateToCheck.trim(), DateTimeFormatter.ofPattern(\"d/M/yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" for (int i \u003d 0; i \u003c taskList.getLength(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" if (task.isOnDate(date)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" return ui.showTasksOnDate(date, matchingTasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" } catch (EmptyDescriptionException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" return ui.showDukeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" return ui.showInvalidDateFormat();","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":59}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Represents an abstract command that can be executed by the chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" * Executes the command\u0027s action.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" * @param taskList The list of tasks that the command operates on.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" * @param ui The user interface instance to interact with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * @param storage The storage instance to manage data.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" * @throws DukeException If an exception specific to Duke\u0027s operations occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" public abstract String execute(TaskList taskList, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" * @return True if the command is an exit command, false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":29}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.InvalidTaskIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" * Constructs a DeleteCommand with the provided task index.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * @param taskIndex The index of the task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d taskList.getLength()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" throw new InvalidTaskIndexException(taskIndex + 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" Task removedTask \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" taskList.deleteTask(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" return ui.showDelete(removedTask, taskList.getLength());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" return ui.showDukeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" } catch (ArrayIndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" return ui.showArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":46}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to exit the chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" storage.saveData(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" return ui.showExit();","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" return ui.showSavingError();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":28}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to find tasks containing a specific keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" private String keyword;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * Constructs a FindCommand with the provided keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" for (int i \u003d 0; i \u003c taskList.getLength(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" return ui.showMatchingTasks(matchingTasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":43}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to list all tasks in the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" return ui.showList(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":21}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.InvalidTaskIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to mark a task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * Constructs a MarkCommand with the provided task index.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" * @param taskIndex The index of the task to be marked as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" public MarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d taskList.getLength()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" throw new InvalidTaskIndexException(taskIndex + 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" storage.saveData(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" return ui.showDone(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" return ui.showDukeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" return ui.showSavingError();","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":48}},{"path":"src/main/java/duke/command/TodayCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to display tasks for today.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"public class TodayCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" LocalDate today \u003d LocalDate.now();","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" for (int i \u003d 0; i \u003c taskList.getLength(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" if (task.isOnDate(today)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" return ui.showTasksForToday(today, matchingTasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":35}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.InvalidTaskIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" * Represents a command to mark a task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" * Constructs an UnmarkCommand with the provided task index.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" * @param taskIndex The index of the task to be marked as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" public UnmarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d taskList.getLength()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" throw new InvalidTaskIndexException(taskIndex + 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" storage.saveData(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" return ui.showNotDone(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" return ui.showDukeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" return ui.showSavingError();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" } catch (ArrayIndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" return ui.showArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":51}},{"path":"src/main/java/duke/exception/DukeDatabaseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents an exception that is thrown when there is an error relating to the chatbot\u0027s database.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class DukeDatabaseException extends DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Constructs a DukeDatabaseException with an error message indicating a database error.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" public DukeDatabaseException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" super(\" ☹ OOPS!!! Error encountered with database.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":14}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Abstract representation of all duke exceptions.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public abstract class DukeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Constructs a DukeException with the specified error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":16}},{"path":"src/main/java/duke/exception/EmptyCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents an exception that occurs when a user enters an empty command to the chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class EmptyCommandException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Constructs an EmptyCommandException with an error message indicating an empty command.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" public EmptyCommandException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" super(\" ☹ OOPS!!! Please enter a valid command.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":14}},{"path":"src/main/java/duke/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents an exception that occurs when the description of a task is empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class EmptyDescriptionException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Constructs an EmptyDescriptionException with an error message based on the task type.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" * @param taskType The type of task for which the description is empty or missing.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" public EmptyDescriptionException(String taskType) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" super(generateErrorMessage(taskType));","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * Generates an error message based on the task type.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" * @param taskType The type of task for which the description is empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" * @return An error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" private static String generateErrorMessage(String taskType) {","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" if (taskType.equals(\"event\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" return \" ☹ OOPS!!! The description of an event cannot be empty.\";","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" return \" ☹ OOPS!!! The description of a \" + taskType + \" cannot be empty.\";","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":30}},{"path":"src/main/java/duke/exception/InvalidFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents an exception that occurs when the format of a command is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class InvalidFormatException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Constructs an InvalidFormatException with an error message explaining the invalid command format.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" * @param formatDescription A description of the expected format of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" public InvalidFormatException(String formatDescription) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" super(\" ☹ OOPS!!! The format of the command is invalid. \\n\\t \" + formatDescription);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ruth-lim":16}},{"path":"src/main/java/duke/exception/InvalidTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents an exception that occurs when an invalid task index is provided.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class InvalidTaskIndexException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Constructs an InvalidTaskIndexException with an error message indicating the invalid task index.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" * @param taskIndex The invalid task index provided by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" public InvalidTaskIndexException(int taskIndex) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" super(\" ☹ OOPS!!! I cannot find the task with index \" + taskIndex + \".\");","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":16}},{"path":"src/main/java/duke/exception/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents an exception that occurs when user inputs an unknown or unrecognised command.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class UnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" * Constructs an UnknownCommandException with an error message indicating an unrecognised command.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" super(\" ☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":14}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" * Represents a Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" protected LocalDateTime dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" * Constructs a Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * @param dateTime The date and time of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" public Deadline(String description, LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public LocalDateTime getDateTime() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" return this.dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" return this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" return \"D | \" + (isDone ? \"1\" : \"0\") + \" | \" + description","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" + \" | \" + this.dateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" public boolean isOnDate(LocalDate date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" return this.dateTime.toLocalDate().equals(date);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy\");","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"h:mma\"); // Print in 12-hour time format","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" String timeString \u003d this.dateTime.format(timeFormatter).toLowerCase();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" return \"[D]\" + super.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" + \" (by: \" + this.dateTime.format(dateFormatter) + \" \" + timeString + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":53}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" * Represents an Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" protected LocalDateTime dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" * Constructs an Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" * @param dateTime The date and time of the event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" public Event(String description, LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" public LocalDateTime getDateTime() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" return this.dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" return this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" return \"E | \" + (isDone ? \"1\" : \"0\") + \" | \" + description","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" + \" | \" + this.dateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" public boolean isOnDate(LocalDate date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" return this.dateTime.toLocalDate().equals(date);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy\");","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"h:mma\"); // Print in 12-hour time format","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" String timeString \u003d this.dateTime.format(timeFormatter).toLowerCase();","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" + \" (at: \" + this.dateTime.format(dateFormatter) + \" \" + timeString + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":54}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" * Represents a task in the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" protected LocalDateTime dateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" * Constructs a task with a description.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" * Returns the task information formatted for storage txt file.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" * @return A string representation of the task for storage txt file.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" public abstract String toFileString();","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" return this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" * Returns the string indicating the task\u0027s status (done or not done).","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" return (isDone ? \"[X]\" : \"[ ]\"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" * Checks if the task is marked as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" * @return True if task is marked as done; false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" return this.isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" /** Mark the task as done. */","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" /** Mark the task as not done. */","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" public abstract boolean isOnDate(LocalDate date);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":" * @return A formatted string describing the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"ruth-lim"},"content":" String formattedDescription \u003d getStatusIcon() + \" \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"ruth-lim"},"content":" if (dateTime !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"ruth-lim"},"content":" String formattedDateTime \u003d dateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"ruth-lim"},"content":" return formattedDescription + \" (at: \" + formattedDateTime + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"ruth-lim"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"ruth-lim"},"content":" return formattedDescription;","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":78}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" private ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" * Constructs a TaskList with existing tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" * @param tasks The initial list of tasks to populate the TaskList.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" this.list.addAll(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" * Deletes a task from the TaskList.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" * @param taskIndex The index of the task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" public void deleteTask(int taskIndex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" this.list.remove(taskIndex);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" * Retrieves a task from the TaskList based on the task index.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" * @param taskIndex The index of the task to be retrieved.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" return this.list.get(taskIndex);","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" * Returns the number of tasks in the TaskList.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" public int getLength() {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" return this.list.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" * Checks if the TaskList is empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" * @return True if the TaskList is empty, false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" return this.getLength() \u003d\u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"ruth-lim":64}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":" * Represents a Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" * Constructs a Todo task with a description.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" * @param description The description of the Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" * Returns the task information formatted for storage in the txt file.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" * @return A string representation of the Todo task for storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" return \"T | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" public boolean isOnDate(LocalDate date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":38}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: transparent;\" 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-05"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" \u003cLabel fx:id\u003d\"dialog\" lineSpacing\u003d\"1.0\" maxHeight\u003d\"1.7976931348623157E308\" minHeight\u003d\"-Infinity\" style\u003d\"-fx-background-color: EFF4FF; -fx-background-radius: 10;\" text\u003d\"Label\" textOverrun\u003d\"WORD_ELLIPSIS\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" \u003cFont name\u003d\"Helvetica Neue\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" \u003cInsets left\u003d\"6.0\" right\u003d\"6.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"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":23,"author":{"gitId":"ruth-lim"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"8.0\" right\u003d\"8.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ruth-lim":27}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"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":11,"author":{"gitId":"ruth-lim"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" promptText\u003d\"Enter command here!\" scaleShape\u003d\"false\" style\u003d\"-fx-border-color: EFF4FF;\" AnchorPane.bottomAnchor\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" \u003cFont name\u003d\"Helvetica Neue\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" \u003c/font\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" \u003cButton fx:id\u003d\"sendButton\" alignment\u003d\"CENTER\" contentDisplay\u003d\"CENTER\" 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\" textAlignment\u003d\"CENTER\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" \u003cFont name\u003d\"Helvetica Neue\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"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":21,"author":{"gitId":"ruth-lim"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" style\u003d\"-fx-background-color: white;\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ruth-lim":26}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"import duke.exception.DukeDatabaseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" public void loadData_nonExistentFile_throwsNullPointerException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" String filePath \u003d \"nonexistent_file.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" assertThrows(NullPointerException.class, storage::loadData);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" public void loadData_existingFile_success() throws DukeDatabaseException {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" String filePath \u003d \"test_data.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" writer.write(\"T | 0 | Task 1\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" writer.write(\"D | 1 | Deadline Task | 2023-08-30 14:30\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" writer.write(\"E | 0 | Event Task | 2023-08-31 15:00\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d storage.loadData();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" assertEquals(3, loadedTasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" assertTrue(loadedTasks.get(0) instanceof Todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" assertTrue(loadedTasks.get(1) instanceof Deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" assertTrue(loadedTasks.get(2) instanceof Event);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" fail(\"IOException should not occur.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" } finally {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" if (file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" file.delete();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" public void saveData_success() throws DukeDatabaseException, IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" String filePath \u003d \"test_data.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" TaskList taskList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(new Todo(\"Test Todo\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(new Deadline(\"Test Deadline\", LocalDateTime.now()));","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(new Event(\"Test Event\", LocalDateTime.now()));","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":" storage.saveData(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"ruth-lim"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d storage.loadData();","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ruth-lim"},"content":" assertEquals(3, loadedTasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ruth-lim"},"content":" assertTrue(loadedTasks.get(0) instanceof Todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ruth-lim"},"content":" assertTrue(loadedTasks.get(1) instanceof Deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ruth-lim"},"content":" assertTrue(loadedTasks.get(2) instanceof Event);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"ruth-lim"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"ruth-lim"},"content":" if (file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"ruth-lim"},"content":" file.delete();","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"ruth-lim"},"content":" public void saveData_ioException_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"ruth-lim"},"content":" String invalidFilePath \u003d \"/invalid/path/test_data.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"ruth-lim"},"content":" Storage storage \u003d new Storage(invalidFilePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"ruth-lim"},"content":" // Trying to save data to a directory instead of a file","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"ruth-lim"},"content":" assertThrows(IOException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"ruth-lim"},"content":" storage.saveData(new TaskList(new ArrayList\u003c\u003e()));","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"ruth-lim"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":94}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" public void constructor_validInput_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" Deadline deadline \u003d new Deadline(\"Finish project\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"Finish project\", deadline.getDescription());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" assertFalse(deadline.isDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" assertEquals(dateTime, deadline.getDateTime());","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" public void constructor_invalidDateTime_throwsDateTimeParseException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" assertThrows(DateTimeParseException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" new Event(\"Finish Project\", LocalDateTime.parse(\"2023-08-30 14:30:00\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" public void toFileString_isNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" Deadline deadline \u003d new Deadline(\"Finish project\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"D | 0 | Finish project | 2023-08-30 14:30\";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, deadline.toFileString());","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" public void toFileString_isDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" Deadline deadline \u003d new Deadline(\"Finish project\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"D | 1 | Finish project | 2023-08-30 14:30\";","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, deadline.toFileString());","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" public void toString_isNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" Deadline deadline \u003d new Deadline(\"Finish project\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"[D][ ] Finish project (by: 30 Aug 2023 2:30pm)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, deadline.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" public void toString_isDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" Deadline deadline \u003d new Deadline(\"Finish project\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"[D][X] Finish project (by: 30 Aug 2023 2:30pm)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, deadline.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":69}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"public class EventTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" public void constructor_validInput_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" Event event \u003d new Event(\"Meeting\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"Meeting\", event.getDescription());","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" assertFalse(event.isDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" assertEquals(dateTime, event.getDateTime());","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public void constructor_invalidDateTime_throwsDateTimeParseException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" assertThrows(DateTimeParseException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" new Event(\"Meeting\", LocalDateTime.parse(\"2023-08-30 14:30:00\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" public void toFileString_isNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" Event event \u003d new Event(\"Meeting\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"E | 0 | Meeting | 2023-08-30 14:30\";","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, event.toFileString());","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" public void toFileString_isDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" Event event \u003d new Event(\"Meeting\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" event.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"E | 1 | Meeting | 2023-08-30 14:30\";","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, event.toFileString());","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" public void toString_isNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" Event event \u003d new Event(\"Meeting\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"[E][ ] Meeting (at: 30 Aug 2023 2:30pm)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, event.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" public void toString_isDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 30, 14, 30);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" Event event \u003d new Event(\"Meeting\", dateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" event.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" String expected \u003d \"[E][X] Meeting (at: 30 Aug 2023 2:30pm)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":" assertEquals(expected, event.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":69}},{"path":"src/test/java/duke/task/MockDeadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents a mock deadline task in the Duke chatbot application.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class MockDeadline extends Deadline {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":" public MockDeadline(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" super(description, null);","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" return \"Mock Deadline File String\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":15}},{"path":"src/test/java/duke/task/MockEvent.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents a mock event task in the Duke chatbot application.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class MockEvent extends Event {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":" public MockEvent(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" super(description, null);","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" return \"Mock Event File String\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":15}},{"path":"src/test/java/duke/task/MockTodo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":" * Represents a mock todo task in the Duke chatbot application.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"public class MockTodo extends Todo {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":" public MockTodo(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" return \"Mock Todo File String\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":15}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" @BeforeEach","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" public void setUp() {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" // Initialize the taskList before each test","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" // Add tasks into the array list","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":" tasks.add(new MockTodo(\"Todo Task\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" tasks.add(new MockDeadline(\"Deadline Task\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" tasks.add(new MockEvent(\"Event Task\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" taskList \u003d new TaskList(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":" public void addTask_validInput_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d new MockTodo(\"Sample Todo Task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" // Check the new task is added to the end","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" assertEquals(4, taskList.getLength());","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" assertEquals(task, taskList.getTask(3));","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" public void deleteTask_validInput_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" int initialSize \u003d taskList.getLength();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":" // Check the task is deleted and list size is reduced","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" assertEquals(initialSize - 1, taskList.getLength());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" public void deleteTask_invalidIndex_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" // Try to delete from an invalid index","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" taskList.deleteTask(10);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":" public void deleteTask_emptyList_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" // Create an empty list","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" TaskList emptyList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" // Try to delete from an empty list","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" emptyList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ruth-lim"},"content":" public void getTask_validInput_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ruth-lim"},"content":" Task task \u003d taskList.getTask(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"Deadline Task\", task.description);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ruth-lim"},"content":" public void getTask_invalidIndex_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ruth-lim"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ruth-lim"},"content":" taskList.getTask(10);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"ruth-lim"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"ruth-lim"},"content":" public void getLength_emptyList_success() {","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"ruth-lim"},"content":" taskList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"ruth-lim"},"content":" assertEquals(0, taskList.getLength());","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"ruth-lim"},"content":" public void getLength_nonEmptyList_success() {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"ruth-lim"},"content":" taskList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"ruth-lim"},"content":" for (int i \u003d 0; i \u003c 5; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"ruth-lim"},"content":" taskList.addTask(new MockTodo(\"Test Task\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"ruth-lim"},"content":" assertEquals(5, taskList.getLength());","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"ruth-lim"},"content":" public void isEmpty_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"ruth-lim"},"content":" assertFalse(taskList.isEmpty());","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"ruth-lim"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"ruth-lim"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"ruth-lim"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"ruth-lim"},"content":" assertTrue(taskList.isEmpty());","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"ruth-lim"},"content":" public void isEmpty_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"ruth-lim"},"content":" assertFalse(taskList.isEmpty());","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"ruth-lim"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"ruth-lim"},"content":" assertFalse(taskList.isEmpty());","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":112}},{"path":"src/test/java/duke/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ruth-lim"},"content":" public void getStatusIcon_todoNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"[ ]\", todo.getStatusIcon());","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ruth-lim"},"content":" public void getStatusIcon_todoDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ruth-lim"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"[X]\", todo.getStatusIcon());","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ruth-lim"},"content":" public void markAsDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ruth-lim"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ruth-lim"},"content":" assertTrue(todo.isDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ruth-lim"},"content":" public void markAsNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ruth-lim"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ruth-lim"},"content":" todo.markAsNotDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ruth-lim"},"content":" assertFalse(todo.isDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ruth-lim"},"content":" public void toFileString_isNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"T | 0 | Sample Todo\", todo.toFileString());","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ruth-lim"},"content":" public void toFileString_isDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ruth-lim"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"T | 1 | Sample Todo\", todo.toFileString());","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ruth-lim"},"content":" public void toString_isDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"[T][ ] Sample Todo\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ruth-lim"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ruth-lim"},"content":" public void toString_isNotDone_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ruth-lim"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ruth-lim"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ruth-lim"},"content":" assertEquals(\"[T][X] Sample Todo\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ruth-lim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ruth-lim"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ruth-lim"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ruth-lim":65}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ruth-lim"},"content":"todo read book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"ruth-lim"},"content":"deadline return book /by 29/8/2023 1800","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ruth-lim"},"content":"event project meeting /at 29/8/2023 2000","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ruth-lim"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"ruth-lim"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"ruth-lim"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ruth-lim"},"content":"mark","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ruth-lim"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ruth-lim"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ruth-lim":9}},{"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":"ruth-lim"},"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":{"ruth-lim":1,"-":20}}] diff --git a/ruth-lim_ip_master/commits.json b/ruth-lim_ip_master/commits.json index 745569d0..f5a1045e 100644 --- a/ruth-lim_ip_master/commits.json +++ b/ruth-lim_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ruth-lim":[{"date":"2023-08-23","commitResults":[{"hash":"7d83da6e27e25bf0fe0fb6a2da7dca493f20cf18","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"869ed743ac364eec931ff664bcbbaf000b0167e3","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"a6d70dcf551d026cb352004a7071594422cf6508","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"96c047ea8816be4304f0857f3040c7931658bebd","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":28}}},{"hash":"fb69752ebdb76273bf2c3f41477d50b25c93c7ff","isMergeCommit":false,"messageTitle":"Level-4 ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":4}}},{"hash":"a5a6796ebba45c66327c44cd8de2da911c669b4e","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":15,"deletions":15}}},{"hash":"5efc0c698db0b1e4c2c94a0b5577278b9cd7cf6a","isMergeCommit":false,"messageTitle":"Level-5: Handle Errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":63}}},{"hash":"5665d06ebb31b04db9483e22d0d96f6faef957a4","isMergeCommit":false,"messageTitle":"Level-5 Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":22}}},{"hash":"d4448f7338d7e1a1587c37e0d8aab171756491d5","isMergeCommit":false,"messageTitle":"Level-6 Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"461352523c421dc97b853096bf0b340e933a193a","isMergeCommit":false,"messageTitle":"A-Enums Use Enums + added more error handling","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":213,"deletions":105}}}]},{"date":"2023-08-26","commitResults":[{"hash":"00b457ac623c6d70f45d7982d9273ed718dd8156","isMergeCommit":false,"messageTitle":"Add Storage.java","messageBody":"feat: Implement saving of tasks in hard drive\n\n* Implement loading and saving tasks from/to data file\n* Handle corrupt or invalid data file\n","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":149,"deletions":28},"md":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"b1081a636685e0af7d88ee69a3342f795a947cae","isMergeCommit":false,"messageTitle":"Update to LocalDateTime for Deadline and Event","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":68,"deletions":27}}},{"hash":"04b62566fca17bd72fa82fd02fdf6351904748fd","isMergeCommit":false,"messageTitle":"Add CHECK and TODAY commands","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"ba90dd3acbcc7eed31c48dc35ce7a6bfdf6c9c0b","isMergeCommit":false,"messageTitle":"Add TaskList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":34}}},{"hash":"c5edc4150cf27ac90ab089c0a849e6c6a7f74e0f","isMergeCommit":false,"messageTitle":"Add UI.java to handle interactions with the user","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":227,"deletions":208}}},{"hash":"acb0b7b3a4b42144fd69ace1d39e0d7070117894","isMergeCommit":false,"messageTitle":"Modify Storage.java to load and save tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":73}}},{"hash":"45dd1c3faafa23382e1fa1ee1157952205928424","isMergeCommit":false,"messageTitle":"Add Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":41}}},{"hash":"103dcdfe34ee7d11a4c7cab9ecaaec1535d1f7b9","isMergeCommit":false,"messageTitle":"Add *Command classes that inherit from an abstract Command class","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":360,"deletions":204}}}]},{"date":"2023-08-29","commitResults":[{"hash":"48745a41d275331c4c70dea93fc4f99faa114dcd","isMergeCommit":false,"messageTitle":"Divide classes into packages, all classes are under duke package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":10},"bat":{"insertions":1,"deletions":1},"md":{"insertions":3,"deletions":3}}},{"hash":"709a96cf7e47f37885a3e00d654d010f724214f8","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027 into branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"b662565aa6445e3baa2146beb3ad5c5a53b5e97b","isMergeCommit":false,"messageTitle":"Add JUnit tests for TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":158,"deletions":14}}},{"hash":"ebf46972e4a2352ed14be3fa0ae655cc2dfb6d58","isMergeCommit":false,"messageTitle":"Add JUnit tests for Todo, Deadline and Event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":207,"deletions":2}}},{"hash":"5cc4415029101ce884a5b7ace0853c4a3ce7521c","isMergeCommit":false,"messageTitle":"Add JUnit test for Storage","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":0}}},{"hash":"a314720981d885247d1044fd6ae448c1577c58ee","isMergeCommit":false,"messageTitle":"Create JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":12,"deletions":4}}},{"hash":"b0152d3215fa00b1bdd3b1325095918ed1d10a46","isMergeCommit":false,"messageTitle":"Add JavaDoc comments for all classes.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":408,"deletions":34}}},{"hash":"1f0a847b7fb4d83f5521f3ea9fdf8942eb1208db","isMergeCommit":false,"messageTitle":"Add Find feature to find task in the list by keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":1}}},{"hash":"aa1ac396fc2e723886ce6e8173e9f9b0ea9f8dff","isMergeCommit":false,"messageTitle":"Update classes to comply with Java coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":8}}},{"hash":"6d60e6c99ff7a1e4cc06f9d0c36120edb5e568ab","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027 into master","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"65abcf7cbc9a2898f441e73bd035b3aa330f9f12","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"244d16b4532887a766df428fe5b8f58abe3205da","isMergeCommit":false,"messageTitle":"Extract task filtering logic from Ui into Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":44}}}]},{"date":"2023-09-03","commitResults":[{"hash":"0a462a05bbe2e17216515521411c91a5fff4afd5","isMergeCommit":false,"messageTitle":"Add CheckStyle to detect coding style violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"9824780aa110eb294c091835a631f64db6acd197","isMergeCommit":false,"messageTitle":"Correct coding style violations","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":111,"deletions":77}}}]}]},"authorFileTypeContributionMap":{"ruth-lim":{"java":1964,"md":3,"fxml":0,"sh":0,"bat":1,"gradle":7,"txt":9}},"authorContributionVariance":{"ruth-lim":178387.44},"authorDisplayNameMap":{"ruth-lim":"CS2103T-W10-3 RUTH.. ERN"}} +{"authorDailyContributionsMap":{"ruth-lim":[{"date":"2023-08-23","commitResults":[{"hash":"7d83da6e27e25bf0fe0fb6a2da7dca493f20cf18","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"869ed743ac364eec931ff664bcbbaf000b0167e3","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"a6d70dcf551d026cb352004a7071594422cf6508","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"96c047ea8816be4304f0857f3040c7931658bebd","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":28}}},{"hash":"fb69752ebdb76273bf2c3f41477d50b25c93c7ff","isMergeCommit":false,"messageTitle":"Level-4 ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":4}}},{"hash":"a5a6796ebba45c66327c44cd8de2da911c669b4e","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":15,"deletions":15}}},{"hash":"5efc0c698db0b1e4c2c94a0b5577278b9cd7cf6a","isMergeCommit":false,"messageTitle":"Level-5: Handle Errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":63}}},{"hash":"5665d06ebb31b04db9483e22d0d96f6faef957a4","isMergeCommit":false,"messageTitle":"Level-5 Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":22}}},{"hash":"d4448f7338d7e1a1587c37e0d8aab171756491d5","isMergeCommit":false,"messageTitle":"Level-6 Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"461352523c421dc97b853096bf0b340e933a193a","isMergeCommit":false,"messageTitle":"A-Enums Use Enums + added more error handling","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":213,"deletions":105}}}]},{"date":"2023-08-26","commitResults":[{"hash":"00b457ac623c6d70f45d7982d9273ed718dd8156","isMergeCommit":false,"messageTitle":"Add Storage.java","messageBody":"feat: Implement saving of tasks in hard drive\n\n* Implement loading and saving tasks from/to data file\n* Handle corrupt or invalid data file\n","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":149,"deletions":28},"md":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"b1081a636685e0af7d88ee69a3342f795a947cae","isMergeCommit":false,"messageTitle":"Update to LocalDateTime for Deadline and Event","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":68,"deletions":27}}},{"hash":"04b62566fca17bd72fa82fd02fdf6351904748fd","isMergeCommit":false,"messageTitle":"Add CHECK and TODAY commands","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"ba90dd3acbcc7eed31c48dc35ce7a6bfdf6c9c0b","isMergeCommit":false,"messageTitle":"Add TaskList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":34}}},{"hash":"c5edc4150cf27ac90ab089c0a849e6c6a7f74e0f","isMergeCommit":false,"messageTitle":"Add UI.java to handle interactions with the user","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":227,"deletions":208}}},{"hash":"acb0b7b3a4b42144fd69ace1d39e0d7070117894","isMergeCommit":false,"messageTitle":"Modify Storage.java to load and save tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":73}}},{"hash":"45dd1c3faafa23382e1fa1ee1157952205928424","isMergeCommit":false,"messageTitle":"Add Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":41}}},{"hash":"103dcdfe34ee7d11a4c7cab9ecaaec1535d1f7b9","isMergeCommit":false,"messageTitle":"Add *Command classes that inherit from an abstract Command class","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":360,"deletions":204}}}]},{"date":"2023-08-29","commitResults":[{"hash":"48745a41d275331c4c70dea93fc4f99faa114dcd","isMergeCommit":false,"messageTitle":"Divide classes into packages, all classes are under duke package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":10},"bat":{"insertions":1,"deletions":1},"md":{"insertions":3,"deletions":3}}},{"hash":"709a96cf7e47f37885a3e00d654d010f724214f8","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027 into branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"b662565aa6445e3baa2146beb3ad5c5a53b5e97b","isMergeCommit":false,"messageTitle":"Add JUnit tests for TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":158,"deletions":14}}},{"hash":"ebf46972e4a2352ed14be3fa0ae655cc2dfb6d58","isMergeCommit":false,"messageTitle":"Add JUnit tests for Todo, Deadline and Event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":207,"deletions":2}}},{"hash":"5cc4415029101ce884a5b7ace0853c4a3ce7521c","isMergeCommit":false,"messageTitle":"Add JUnit test for Storage","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":0}}},{"hash":"a314720981d885247d1044fd6ae448c1577c58ee","isMergeCommit":false,"messageTitle":"Create JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":12,"deletions":4}}},{"hash":"b0152d3215fa00b1bdd3b1325095918ed1d10a46","isMergeCommit":false,"messageTitle":"Add JavaDoc comments for all classes.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":408,"deletions":34}}},{"hash":"1f0a847b7fb4d83f5521f3ea9fdf8942eb1208db","isMergeCommit":false,"messageTitle":"Add Find feature to find task in the list by keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":1}}},{"hash":"aa1ac396fc2e723886ce6e8173e9f9b0ea9f8dff","isMergeCommit":false,"messageTitle":"Update classes to comply with Java coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":8}}},{"hash":"6d60e6c99ff7a1e4cc06f9d0c36120edb5e568ab","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027 into master","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"65abcf7cbc9a2898f441e73bd035b3aa330f9f12","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"244d16b4532887a766df428fe5b8f58abe3205da","isMergeCommit":false,"messageTitle":"Extract task filtering logic from Ui into Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":44}}}]},{"date":"2023-09-03","commitResults":[{"hash":"0a462a05bbe2e17216515521411c91a5fff4afd5","isMergeCommit":false,"messageTitle":"Add CheckStyle to detect coding style violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"9824780aa110eb294c091835a631f64db6acd197","isMergeCommit":false,"messageTitle":"Correct coding style violations","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":111,"deletions":77}}}]},{"date":"2023-09-04","commitResults":[{"hash":"ed4000f84fcc9374676ae9bdfe2b43e1aa2b5476","isMergeCommit":false,"messageTitle":"Setup JavaFX for project","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":21,"deletions":0},"fxml":{"insertions":42,"deletions":0},"java":{"insertions":168,"deletions":0}}},{"hash":"8bcdae8dfd0219d9016e2841179d31b60b218485","isMergeCommit":false,"messageTitle":"Update Duke to read and return String","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":152,"deletions":167}}}]},{"date":"2023-09-05","commitResults":[{"hash":"324bf10f611b54a671e577f06247ab8b9a6fca11","isMergeCommit":false,"messageTitle":"Style GUI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":19,"deletions":8},"java":{"insertions":2,"deletions":2}}},{"hash":"b24d306ee7012e7e81c5a594395915b43dc8e07b","isMergeCommit":false,"messageTitle":"Close platform and terminate program upon bye command","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"ruth-lim":{"java":2131,"md":3,"fxml":53,"sh":0,"bat":1,"gradle":26,"txt":9}},"authorContributionVariance":{"ruth-lim":166754.58},"authorDisplayNameMap":{"ruth-lim":"CS2103T-W10-3 RUTH.. ERN"}} diff --git a/ryanongwx_ip_master/authorship.json b/ryanongwx_ip_master/authorship.json index fa7133d3..2d2656a0 100644 --- a/ryanongwx_ip_master/authorship.json +++ b/ryanongwx_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":"ryanongwx"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"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,"ryanongwx":1}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":" protected LocalDate byDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":" protected LocalTime byTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":" protected String byDateTimeString;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" public Deadline(String description, boolean isDone, String byDateAndTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" parseDateTime(byDateAndTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" this.byDateTimeString \u003d byDateAndTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" public boolean isValidDate(String dateTimeString) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" String[] parts \u003d dateTimeString.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" LocalDate.parse(parts[0], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" LocalTime.parse(parts[1], DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" public void parseDateTime(String dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" if (isValidDate(dateTime)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" String[] parts \u003d dateTime.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" byDate \u003d LocalDate.parse(parts[0], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" byTime \u003d LocalTime.parse(parts[1], DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" if (byDate !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":" + \" \" + byTime.format(DateTimeFormatter.ofPattern(\"h:mm a\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byDateTimeString + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" if (byDate !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" return \"D,\" + (isDone ? \"1\" : \"0\") + \",\" + description + \",\" + byDate + \" \" + byTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":" return \"D,\" + (isDone ? \"1\" : \"0\") + \",\" + description + \",\" + byDateTimeString;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ryanongwx":57}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":" * Duke is a task management chatbot that allows users to manage their tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":" * including todos, deadlines, and events.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":" * The main method that initializes and runs the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" * @param args The command-line arguments (not used in this context).","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":" Storage storage \u003d new Storage(\"src/main/java/duke/data/duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" Ui.showGreeting();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d storage.loadTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" taskList.setTasks(loadedTasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" String userInput;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" while (true) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" userInput \u003d ui.getUserInput();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":" if (userInput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" Ui.showByeMessage();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" } else if (userInput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" Ui.showList(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" } else if (userInput.startsWith(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" // Give users a way to find a task by searching for a keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" String keyword \u003d userInput.substring(\"find\".length()).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":" taskList.findTasksByKeyword(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" Parser.parseAndAddTask(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ryanongwx":39,"-":4}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":" * Represents an event task that occurs within a specified date and time range.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":" * Extends the base class Task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" protected LocalDate fromDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" protected LocalTime fromTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" protected LocalDate toDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":" protected LocalTime toTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" * Constructs an event task with description and date-time range.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" * @param isDone Indicates whether the task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" * @param from The starting date and time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":" * @param to The ending date and time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" public Event(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" parseDateTime(from, to);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" * Checks if a given date-time string is in a valid format.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" * @param dateTimeString The date-time string to be checked.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" * @return True if the date-time string is in a valid format, otherwise false.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" public boolean isValidDate(String dateTimeString) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" String[] parts \u003d dateTimeString.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" LocalDate.parse(parts[0], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" LocalTime.parse(parts[1], DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":" * Parses the given date-time strings into LocalDate and LocalTime objects.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":" * @param fromdateTime The starting date-time string of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" * @param todateTime The ending date-time string of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" public void parseDateTime(String fromdateTime, String todateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":" if (isValidDate(fromdateTime) \u0026\u0026 isValidDate(todateTime)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" String[] fromparts \u003d fromdateTime.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" fromDate \u003d LocalDate.parse(fromparts[0], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":" fromTime \u003d LocalTime.parse(fromparts[1], DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" String[] toparts \u003d todateTime.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" toDate \u003d LocalDate.parse(toparts[0], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":" toTime \u003d LocalTime.parse(toparts[1], DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ryanongwx"},"content":" * Generates a string representation of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ryanongwx"},"content":" * @return A formatted string describing the event task, including date and","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ryanongwx"},"content":" * time.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ryanongwx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"ryanongwx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"ryanongwx"},"content":" if (fromDate !\u003d null \u0026\u0026 toDate !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"ryanongwx"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"ryanongwx"},"content":" + \" \" + fromTime.format(DateTimeFormatter.ofPattern(\"h:mm a\")) + \" to: \"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"ryanongwx"},"content":" + toDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"ryanongwx"},"content":" + \" \" + toTime.format(DateTimeFormatter.ofPattern(\"h:mm a\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"ryanongwx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"ryanongwx"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \"","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"ryanongwx"},"content":" + to + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":91,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ryanongwx"},"content":" * Converts the event task to a string format suitable for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ryanongwx"},"content":" * @return A string representation of the event task for saving purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ryanongwx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"ryanongwx"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"ryanongwx"},"content":" if (fromDate !\u003d null \u0026\u0026 toDate !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"ryanongwx"},"content":" return \"E,\" + isDone + \",\" + description + \",\" + fromDate + \" \" + fromTime + \",\" + toDate + \" \" + toTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"ryanongwx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"ryanongwx"},"content":" return \"E,\" + isDone + \",\" + description + \",\" + from + \",\" + to;","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":105,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ryanongwx":105}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":" * The Parser class handles the parsing of user input commands and performs","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":" * corresponding actions.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":" public static final String COMMAND_TODO \u003d \"todo\";","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":" public static final String COMMAND_DEADLINE \u003d \"deadline\";","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":" public static final String COMMAND_EVENT \u003d \"event\";","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":" public static final String COMMAND_DELETE \u003d \"delete\";","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" public static final String COMMAND_MARK \u003d \"mark\";","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" public static final String COMMAND_UNMARK \u003d \"unmark\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" * Parses the user input and adds the corresponding task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" * @param userInput The user input command.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list to which the task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" * @throws IllegalArgumentException If the input command is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" public static void parseAndAddTask(String userInput, TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" String[] words \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" switch (words[0].toLowerCase()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" case COMMAND_TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" addTodoTask(words[1], taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" case COMMAND_DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" addDeadlineTask(words[1], taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" case COMMAND_EVENT:","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" addEventTask(words[1], taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" case COMMAND_MARK:","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" parseMarkTask(words[1], taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" case COMMAND_UNMARK:","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" parseUnmarkTask(words[1], taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" case COMMAND_DELETE:","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":" parseDeleteTask(words[1], taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" throw new IllegalArgumentException(\"Invalid command: \" + words[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" * Parses the user input and adds a todo task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" * @param args The user input arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list to which the task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" * @throws IllegalArgumentException If the description of the todo task is","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":" * empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":" private static void addTodoTask(String args, TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" if (args.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":" throw new IllegalArgumentException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":" taskList.addTodo(args, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" * Parses the user input and adds a deadline task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":" * @param args The user input arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list to which the task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ryanongwx"},"content":" * @throws IllegalArgumentException If the deadline format is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ryanongwx"},"content":" private static void addDeadlineTask(String args, TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ryanongwx"},"content":" String[] parts \u003d args.split(\" /by \");","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ryanongwx"},"content":" if (parts.length !\u003d 2 || parts[0].isEmpty() || parts[1].isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ryanongwx"},"content":" throw new IllegalArgumentException(\"☹ OOPS!!! Invalid deadline format.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"ryanongwx"},"content":" taskList.addDeadline(parts[0], false, parts[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ryanongwx"},"content":" * Parses the user input and adds an event task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ryanongwx"},"content":" * @param args The user input arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list to which the task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ryanongwx"},"content":" * @throws IllegalArgumentException If the event format is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ryanongwx"},"content":" private static void addEventTask(String args, TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"ryanongwx"},"content":" String[] parts \u003d args.split(\" /from \");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ryanongwx"},"content":" String from \u003d parts[1].split(\" /to \")[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ryanongwx"},"content":" String to \u003d parts[1].split(\" /to \")[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ryanongwx"},"content":" taskList.addEvent(parts[0], false, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ryanongwx"},"content":" * Parses the user input and marks a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ryanongwx"},"content":" * @param args The user input arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ryanongwx"},"content":" private static void parseMarkTask(String args, TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"ryanongwx"},"content":" int index \u003d Integer.parseInt(args) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"ryanongwx"},"content":" taskList.markTask(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ryanongwx"},"content":" * Parses the user input and unmarks a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"ryanongwx"},"content":" * @param args The user input arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"ryanongwx"},"content":" private static void parseUnmarkTask(String args, TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"ryanongwx"},"content":" int index \u003d Integer.parseInt(args) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"ryanongwx"},"content":" taskList.unmarkTask(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"ryanongwx"},"content":" * Parses the user input and deletes a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"ryanongwx"},"content":" * @param args The user input arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"ryanongwx"},"content":" private static void parseDeleteTask(String args, TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"ryanongwx"},"content":" int index \u003d Integer.parseInt(args) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"ryanongwx"},"content":" taskList.removeTask(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ryanongwx":127}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import java.io.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":" * Represents a class that handles the loading and saving of tasks to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":" private String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" * @param filePath The path to the file for loading and saving tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" * Loads tasks from the file and returns them as an ArrayList.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" * @return An ArrayList containing the loaded tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" public ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(filePath))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" String line;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" String[] values \u003d line.split(\",\");","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" String taskType \u003d values[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" boolean isDone \u003d values[1].trim().equals(\"true\");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" String description \u003d values[2].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":" tasks.add(new ToDo(description, isDone));","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" String byDateAndTime \u003d values[3].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" tasks.add(new Deadline(description, isDone, byDateAndTime));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":" String from \u003d values[3].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" String to \u003d values[4].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" tasks.add(new Event(description, isDone, from, to));","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":" System.out.println(\"Error loading tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" * Saves tasks to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" * @param tasks An ArrayList containing tasks to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":" String line \u003d task.toSaveString();","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" writer.write(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" writer.newLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" System.out.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ryanongwx":69}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":" * Represents a task with a description and completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":" protected static int total \u003d 0;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" * Constructs a task with the given description and completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" Task.total +\u003d 1;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" * Gets the status icon of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" * @return The status icon (\"X\" if done, \" \" if not done).","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" * Converts the task to a formatted string.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description; // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" public void unmark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":" * Gets the total number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":" * @return The total number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":" public static int getTotal() {","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" return Task.total;","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" * Removes the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":" public void remove() {","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":" Task.total -\u003d 1;","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ryanongwx"},"content":" * Converts the task to a string for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ryanongwx"},"content":" * @return The formatted string for saving the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ryanongwx"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"ryanongwx"},"content":" return \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ryanongwx"},"content":" * Checks if the task is done.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ryanongwx"},"content":" * @return True if the task is done, false otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ryanongwx"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ryanongwx"},"content":" return isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ryanongwx":89}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":" * Represents a list of tasks with various operations for managing tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" * Adds a deadline task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" * @param isDone Indicates whether the task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" * @param byDateAndTime The date and time of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" public void addDeadline(String description, boolean isDone, String byDateAndTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" Deadline deadline \u003d new Deadline(description, isDone, byDateAndTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":" Ui.showAddConfirmation(deadline, this.getTotalTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" * Adds a todo task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" * @param isDone Indicates whether the task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":" public void addTodo(String description, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" ToDo todo \u003d new ToDo(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" tasks.add(todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" Ui.showAddConfirmation(todo, this.getTotalTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" * Adds an event task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" * @param isDone Indicates whether the task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":" * @param from The starting date and time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" * @param to The ending date and time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" public void addEvent(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" Event event \u003d new Event(description, isDone, from, to);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" Ui.showAddConfirmation(event, this.getTotalTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" * Removes a task from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" public void removeTask(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" Ui.showRemoved(tasks.get(index), this.getTotalTasks() - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ryanongwx"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ryanongwx"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ryanongwx"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ryanongwx"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ryanongwx"},"content":" * Returns the total number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ryanongwx"},"content":" * @return The total number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ryanongwx"},"content":" public int getTotalTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"ryanongwx"},"content":" return tasks.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ryanongwx"},"content":" * Marks a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ryanongwx"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ryanongwx"},"content":" public void markTask(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"ryanongwx"},"content":" tasks.get(index).markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"ryanongwx"},"content":" Ui.showMarkedAsDone(tasks.get(index));","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ryanongwx"},"content":" * Unmarks a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ryanongwx"},"content":" * @param index The index of the task to be unmarked.","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ryanongwx"},"content":" public void unmarkTask(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"ryanongwx"},"content":" tasks.get(index).unmark();","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"ryanongwx"},"content":" Ui.showUnmarked(tasks.get(index));","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"ryanongwx"},"content":" * Sets the tasks in the list to the given tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The ArrayList of tasks to be set.","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"ryanongwx"},"content":" public void setTasks(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"ryanongwx"},"content":" tasks.addAll(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"ryanongwx"},"content":" * Finds tasks in the task list that match a given keyword and displays them to","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"ryanongwx"},"content":" * the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"ryanongwx"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"ryanongwx"},"content":" public void findTasksByKeyword(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"ryanongwx"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"ryanongwx"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"ryanongwx"},"content":" if (task.toSaveString().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"ryanongwx"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"ryanongwx"},"content":" Ui.showMatchingTasks(matchingTasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ryanongwx":133}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":" * Represents a todo task that can be added to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":" * Constructs a todo task with the specified description and status.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" * @param isDone Indicates whether the task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" * Returns a string representation of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" * @return A string containing the status icon and description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" * Returns a formatted string for saving the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" * @return A string containing the task type, status, and description.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" return \"T,\" + isDone + \",\" + description;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ryanongwx":37}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":" * Represents the user interface for interacting with the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":" private static final String LINE_SEPARATOR \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" * Constructs a new UI instance with a scanner for user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":" public Ui() {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" * Displays a greeting message.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" public static void showGreeting() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" System.out.println(\"Hello! I\u0027m yourChatBot\");","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" * Retrieves user input from the scanner.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" * @return The user\u0027s input as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" public String getUserInput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" * Displays the list of tasks in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list containing the tasks to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" public static void showList(TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" String todolistoutput \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" for (int i \u003d 0; i \u003c taskList.getTotalTasks(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":" todolistoutput +\u003d i + 1 + \". \" + taskList.getTasks().get(i) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" System.out.println(todolistoutput);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" * Displays a message indicating that a task has been marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" * @param task The task that has been marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" public static void showMarkedAsDone(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n\" + task);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" * Displays a message indicating that a task has been marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":" * @param task The task that has been marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ryanongwx"},"content":" public static void showUnmarked(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ryanongwx"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\\n\" + task);","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ryanongwx"},"content":" * Displays a message indicating that a task has been removed.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ryanongwx"},"content":" * @param task The task that has been removed.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ryanongwx"},"content":" * @param totalTasks The total number of tasks remaining.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ryanongwx"},"content":" public static void showRemoved(Task task, int totalTasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"ryanongwx"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\\n\" + task);","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"ryanongwx"},"content":" System.out.println(\"Now you have \" + totalTasks + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ryanongwx"},"content":" * Displays an error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ryanongwx"},"content":" * @param errorMessage The error message to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ryanongwx"},"content":" public static void showError(String errorMessage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"ryanongwx"},"content":" System.out.println(errorMessage);","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ryanongwx"},"content":" * Displays a confirmation message after adding a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ryanongwx"},"content":" * @param task The task that has been added.","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ryanongwx"},"content":" * @param totalTasks The total number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ryanongwx"},"content":" public static void showAddConfirmation(Task task, int totalTasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"ryanongwx"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n\" + task);","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"ryanongwx"},"content":" System.out.println(\"Now you have \" + totalTasks + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"ryanongwx"},"content":" * Displays a farewell message.","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"ryanongwx"},"content":" public static void showByeMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"ryanongwx"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"ryanongwx"},"content":" * Displays a list of tasks that match the given keyword to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"ryanongwx"},"content":" * @param matchingTasks The list of tasks that match the keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"ryanongwx"},"content":" public static void showMatchingTasks(ArrayList\u003cTask\u003e matchingTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"ryanongwx"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"ryanongwx"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"ryanongwx"},"content":" System.out.println(i + 1 + \". \" + matchingTasks.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"ryanongwx"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ryanongwx":137}},{"path":"src/main/java/duke/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"T,false,read book","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"E,false,project meeting,2019-10-15 16:00,2019-10-15 20:00","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"T,false,join sports club","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"E,false,Birthday party,2023-08-30 15:00,2023-08-30 18:00","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ryanongwx":4}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" public void testParseAndAddTask_AddTodoTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" String userInput \u003d \"todo Buy groceries\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" Parser.parseAndAddTask(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" assertEquals(1, taskList.getTotalTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" assertTrue(taskList.getTasks().get(0) instanceof ToDo);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" public void testParseAndAddTask_AddDeadlineTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" String userInput \u003d \"deadline Return book /by 2023-12-31\";","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" Parser.parseAndAddTask(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" assertEquals(1, taskList.getTotalTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" assertTrue(taskList.getTasks().get(0) instanceof Deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" public void testParseAndAddTask_AddEventTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" String userInput \u003d \"event Birthday party /from 2023-08-30 15:00 /to 2023-08-30 18:00\";","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" Parser.parseAndAddTask(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" assertEquals(1, taskList.getTotalTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" assertTrue(taskList.getTasks().get(0) instanceof Event);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" public void testParseAndAddTask_InvalidCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" String userInput \u003d \"invalidcommand\";","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" Parser.parseAndAddTask(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":" public void testParseAndAddTask_MarkTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":" taskList.addTodo(\"Test task\", false);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" String userInput \u003d \"mark 1\";","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" Parser.parseAndAddTask(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" assertTrue(taskList.getTasks().get(0).isDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" public void testParseAndAddTask_UnmarkTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":" taskList.addTodo(\"Test task\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":" String userInput \u003d \"unmark 1\";","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ryanongwx"},"content":" Parser.parseAndAddTask(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ryanongwx"},"content":" assertFalse(taskList.getTasks().get(0).isDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ryanongwx"},"content":" public void testParseAndAddTask_DeleteTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ryanongwx"},"content":" taskList.addTodo(\"Test task\", false);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ryanongwx"},"content":" String userInput \u003d \"delete 1\";","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ryanongwx"},"content":" Parser.parseAndAddTask(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ryanongwx"},"content":" assertEquals(0, taskList.getTotalTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ryanongwx":87}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" void testLoadTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" // Test loading of tasks from file","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":" Path tempFilePath \u003d Files.createTempFile(null, \".txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" Storage storage \u003d new Storage(tempFilePath.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" ArrayList\u003cTask\u003e expectedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" expectedTasks.add(new ToDo(\"Task 1\", true));","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" expectedTasks.add(new Deadline(\"Deadline 1\", false, \"2023-08-29 1800\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" expectedTasks.add(new Event(\"Event 1\", true, \"2023-08-30 0900\", \"2023-08-30 1200\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" storage.saveTasks(expectedTasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d storage.loadTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" assertEquals(expectedTasks.size(), loadedTasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" for (int i \u003d 0; i \u003c expectedTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" Task expectedTask \u003d expectedTasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" Task loadedTask \u003d loadedTasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" assertEquals(expectedTask.toSaveString(), loadedTask.toSaveString());","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" Files.deleteIfExists(tempFilePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" fail(\"Exception occurred during testing: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" void testSaveTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" // Test saving of todolist to file","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" Path tempFilePath \u003d Files.createTempFile(null, \".txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" Storage storage \u003d new Storage(tempFilePath.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" ArrayList\u003cTask\u003e tasksToSave \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" tasksToSave.add(new ToDo(\"Task 1\", true));","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" tasksToSave.add(new Deadline(\"Deadline 1\", false, \"2023-08-29 1800\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" tasksToSave.add(new Event(\"Event 1\", true, \"2023-08-30 0900\", \"2023-08-30 1200\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" storage.saveTasks(tasksToSave);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d storage.loadTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" assertEquals(tasksToSave.size(), loadedTasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":" for (int i \u003d 0; i \u003c tasksToSave.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" Task savedTask \u003d tasksToSave.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":" Task loadedTask \u003d loadedTasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" assertEquals(savedTask.toSaveString(), loadedTask.toSaveString());","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":" Files.deleteIfExists(tempFilePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" fail(\"Exception occurred during testing: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ryanongwx":70}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"delete 2","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"blah","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ryanongwx":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":"ryanongwx"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }","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":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"ryanongwx":15}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":" protected LocalDate byDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":" protected LocalTime byTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":" protected String byDateTimeString;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" public Deadline(String description, boolean isDone, String byDateAndTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" parseDateTime(byDateAndTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" this.byDateTimeString \u003d byDateAndTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" public boolean isValidDate(String dateTimeString) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" String[] parts \u003d dateTimeString.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" LocalDate.parse(parts[0], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" LocalTime.parse(parts[1], DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" public void parseDateTime(String dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" if (isValidDate(dateTime)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" String[] parts \u003d dateTime.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" byDate \u003d LocalDate.parse(parts[0], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" byTime \u003d LocalTime.parse(parts[1], DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" if (byDate !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":" + \" \" + byTime.format(DateTimeFormatter.ofPattern(\"h:mm a\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byDateTimeString + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" if (byDate !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" return \"D,\" + (isDone ? \"1\" : \"0\") + \",\" + description + \",\" + byDate + \" \" + byTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":" return \"D,\" + (isDone ? \"1\" : \"0\") + \",\" + description + \",\" + byDateTimeString;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ryanongwx":57}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":"import javafx.scene.input.KeyCode;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" * Duke is a task management chatbot GUI that allows users to manage their tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" * including todos, deadlines, and events.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" private Scene scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" private String outputText;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" Storage storage \u003d new Storage(\"src/main/java/duke/data/duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" Ui.getGreeting();","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d storage.loadTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" taskList.setTasks(loadedTasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":" Image logoImage \u003d new Image(getClass().getResourceAsStream(\"/duke/assets/images/profile.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":" ImageView botGreetingLogoImageView \u003d new ImageView(logoImage);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" botGreetingLogoImageView.setFitWidth(40);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":" botGreetingLogoImageView.setFitHeight(40);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":" Label greetingLabel \u003d new Label(Ui.getGreeting());","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" HBox botGreetingMessage \u003d new HBox(botGreetingLogoImageView, greetingLabel);","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" botGreetingMessage.setAlignment(Pos.CENTER_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":" dialogContainer.getChildren().addAll(botGreetingMessage);","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" sendButton.setOnAction(event -\u003e {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":" String inputText \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"ryanongwx"},"content":" if (inputText.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"ryanongwx"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ryanongwx"},"content":" outputText \u003d Ui.getByeMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"ryanongwx"},"content":" } else if (inputText.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"ryanongwx"},"content":" outputText \u003d Ui.getList(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"ryanongwx"},"content":" } else if (inputText.startsWith(\"find\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"ryanongwx"},"content":" String keyword \u003d inputText.substring(\"find\".length()).trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"ryanongwx"},"content":" outputText \u003d taskList.findTasksByKeyword(keyword);","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"ryanongwx"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"ryanongwx"},"content":" outputText \u003d Parser.parseAndAddTask(inputText, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"ryanongwx"},"content":" if (!inputText.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"ryanongwx"},"content":" ImageView botLogoImageView \u003d new ImageView(logoImage);","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"ryanongwx"},"content":" botLogoImageView.setFitWidth(40);","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"ryanongwx"},"content":" botLogoImageView.setFitHeight(40);","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"ryanongwx"},"content":" ImageView userLogoImageView \u003d new ImageView(logoImage);","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"ryanongwx"},"content":" userLogoImageView.setFitWidth(40);","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"ryanongwx"},"content":" userLogoImageView.setFitHeight(40);","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"ryanongwx"},"content":" Label userLabel \u003d new Label(inputText);","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"ryanongwx"},"content":" userLabel.setStyle(\"-fx-background-color: lightblue; -fx-border-radius: 5; -fx-padding: 5px;\");","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"ryanongwx"},"content":" Label botLabel \u003d new Label(outputText);","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"ryanongwx"},"content":" botLabel.setStyle(\"-fx-background-color: lightgray; -fx-border-radius: 5; -fx-padding: 5px;\");","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"ryanongwx"},"content":" HBox userMessage \u003d new HBox(userLogoImageView, userLabel);","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"ryanongwx"},"content":" HBox botMessage \u003d new HBox(botLabel, botLogoImageView);","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"ryanongwx"},"content":" userMessage.setAlignment(Pos.CENTER_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"ryanongwx"},"content":" botMessage.setAlignment(Pos.CENTER_RIGHT);","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"ryanongwx"},"content":" dialogContainer.getChildren().addAll(userMessage, botMessage);","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"ryanongwx"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":107,"author":{"gitId":"ryanongwx"},"content":" });","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"ryanongwx"},"content":" userInput.setOnKeyPressed(event -\u003e {","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"ryanongwx"},"content":" if (event.getCode() \u003d\u003d KeyCode.ENTER) {","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"ryanongwx"},"content":" sendButton.fire();","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":113,"author":{"gitId":"ryanongwx"},"content":" });","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"ryanongwx"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"ryanongwx"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"ryanongwx"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"ryanongwx"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"ryanongwx"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"ryanongwx"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"ryanongwx"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"ryanongwx"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"ryanongwx"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"ryanongwx"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"ryanongwx"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"ryanongwx"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"ryanongwx"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"ryanongwx"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"ryanongwx"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"ryanongwx"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"ryanongwx"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"ryanongwx"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"ryanongwx"},"content":" AnchorPane.setLeftAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"ryanongwx"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":147,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ryanongwx":146,"-":2}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":" * Represents an event task that occurs within a specified date and time range.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":" * Extends the base class Task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" protected LocalDate fromDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" protected LocalTime fromTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" protected LocalDate toDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":" protected LocalTime toTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" * Constructs an event task with description and date-time range.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" * @param isDone Indicates whether the task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" * @param from The starting date and time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":" * @param to The ending date and time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" public Event(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" parseDateTime(from, to);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" * Checks if a given date-time string is in a valid format.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" * @param dateTimeString The date-time string to be checked.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" * @return True if the date-time string is in a valid format, otherwise false.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" public boolean isValidDate(String dateTimeString) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" String[] parts \u003d dateTimeString.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" LocalDate.parse(parts[0], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" LocalTime.parse(parts[1], DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":" * Parses the given date-time strings into LocalDate and LocalTime objects.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":" * @param fromdateTime The starting date-time string of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" * @param todateTime The ending date-time string of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" public void parseDateTime(String fromdateTime, String todateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":" if (isValidDate(fromdateTime) \u0026\u0026 isValidDate(todateTime)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" String[] fromparts \u003d fromdateTime.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" fromDate \u003d LocalDate.parse(fromparts[0], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":" fromTime \u003d LocalTime.parse(fromparts[1], DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" String[] toparts \u003d todateTime.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" toDate \u003d LocalDate.parse(toparts[0], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":" toTime \u003d LocalTime.parse(toparts[1], DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ryanongwx"},"content":" * Generates a string representation of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ryanongwx"},"content":" * @return A formatted string describing the event task, including date and","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ryanongwx"},"content":" * time.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ryanongwx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"ryanongwx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"ryanongwx"},"content":" if (fromDate !\u003d null \u0026\u0026 toDate !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"ryanongwx"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"ryanongwx"},"content":" + \" \" + fromTime.format(DateTimeFormatter.ofPattern(\"h:mm a\")) + \" to: \"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"ryanongwx"},"content":" + toDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"ryanongwx"},"content":" + \" \" + toTime.format(DateTimeFormatter.ofPattern(\"h:mm a\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"ryanongwx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"ryanongwx"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \"","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"ryanongwx"},"content":" + to + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":91,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ryanongwx"},"content":" * Converts the event task to a string format suitable for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ryanongwx"},"content":" * @return A string representation of the event task for saving purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ryanongwx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"ryanongwx"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"ryanongwx"},"content":" if (fromDate !\u003d null \u0026\u0026 toDate !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"ryanongwx"},"content":" return \"E,\" + isDone + \",\" + description + \",\" + fromDate + \" \" + fromTime + \",\" + toDate + \" \" + toTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"ryanongwx"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"ryanongwx"},"content":" return \"E,\" + isDone + \",\" + description + \",\" + from + \",\" + to;","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":105,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ryanongwx":105}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":" Application.launch(Duke.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ryanongwx":12}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":" * The Parser class handles the parsing of user input commands and performs","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":" * corresponding actions.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":" public static final String COMMAND_TODO \u003d \"todo\";","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":" public static final String COMMAND_DEADLINE \u003d \"deadline\";","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":" public static final String COMMAND_EVENT \u003d \"event\";","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":" public static final String COMMAND_DELETE \u003d \"delete\";","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" public static final String COMMAND_MARK \u003d \"mark\";","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" public static final String COMMAND_UNMARK \u003d \"unmark\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" * Parses the user input and adds the corresponding task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" * @param userInput The user input command.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list to which the task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" * @throws IllegalArgumentException If the input command is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" public static String parseAndAddTask(String userInput, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" String[] words \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" switch (words[0].toLowerCase()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" case COMMAND_TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" return addTodoTask(words[1], taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":" case COMMAND_DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" return addDeadlineTask(words[1], taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" case COMMAND_EVENT:","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" return addEventTask(words[1], taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" case COMMAND_MARK:","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" return parseMarkTask(words[1], taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" case COMMAND_UNMARK:","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" return parseUnmarkTask(words[1], taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" case COMMAND_DELETE:","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":" return parseDeleteTask(words[1], taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" throw new IllegalArgumentException(\"Invalid command: \" + words[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" * Parses the user input and adds a todo task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" * @param args The user input arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list to which the task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":" * @throws IllegalArgumentException If the description of the todo task is","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" * empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" private static String addTodoTask(String args, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" if (args.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":" throw new IllegalArgumentException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":" return taskList.addTodo(args, false);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" * Parses the user input and adds a deadline task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" * @param args The user input arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list to which the task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":" * @throws IllegalArgumentException If the deadline format is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" private static String addDeadlineTask(String args, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" String[] parts \u003d args.split(\" /by \");","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":" if (parts.length !\u003d 2 || parts[0].isEmpty() || parts[1].isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":" throw new IllegalArgumentException(\"☹ OOPS!!! Invalid deadline format.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"ryanongwx"},"content":" return taskList.addDeadline(parts[0], false, parts[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ryanongwx"},"content":" * Parses the user input and adds an event task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ryanongwx"},"content":" * @param args The user input arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list to which the task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ryanongwx"},"content":" * @throws IllegalArgumentException If the event format is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ryanongwx"},"content":" private static String addEventTask(String args, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"ryanongwx"},"content":" String[] parts \u003d args.split(\" /from \");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ryanongwx"},"content":" String from \u003d parts[1].split(\" /to \")[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ryanongwx"},"content":" String to \u003d parts[1].split(\" /to \")[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ryanongwx"},"content":" return taskList.addEvent(parts[0], false, from, to);","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ryanongwx"},"content":" * Parses the user input and marks a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ryanongwx"},"content":" * @param args The user input arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ryanongwx"},"content":" private static String parseMarkTask(String args, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"ryanongwx"},"content":" int index \u003d Integer.parseInt(args) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"ryanongwx"},"content":" return taskList.markTask(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ryanongwx"},"content":" * Parses the user input and unmarks a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ryanongwx"},"content":" * @param args The user input arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ryanongwx"},"content":" private static String parseUnmarkTask(String args, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"ryanongwx"},"content":" int index \u003d Integer.parseInt(args) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"ryanongwx"},"content":" return taskList.unmarkTask(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"ryanongwx"},"content":" * Parses the user input and deletes a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"ryanongwx"},"content":" * @param args The user input arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"ryanongwx"},"content":" private static String parseDeleteTask(String args, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"ryanongwx"},"content":" int index \u003d Integer.parseInt(args) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"ryanongwx"},"content":" return taskList.removeTask(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ryanongwx":121}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import java.io.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":" * Represents a class that handles the loading and saving of tasks to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":" private String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" * @param filePath The path to the file for loading and saving tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" * Loads tasks from the file and returns them as an ArrayList.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" * @return An ArrayList containing the loaded tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" public ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(filePath))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" String line;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" String[] values \u003d line.split(\",\");","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" String taskType \u003d values[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" boolean isDone \u003d values[1].trim().equals(\"true\");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" String description \u003d values[2].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":" tasks.add(new ToDo(description, isDone));","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" String byDateAndTime \u003d values[3].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" tasks.add(new Deadline(description, isDone, byDateAndTime));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":" String from \u003d values[3].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" String to \u003d values[4].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" tasks.add(new Event(description, isDone, from, to));","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":" System.out.println(\"Error loading tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" * Saves tasks to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" * @param tasks An ArrayList containing tasks to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":" String line \u003d task.toSaveString();","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" writer.write(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" writer.newLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" System.out.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ryanongwx":69}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":" * Represents a task with a description and completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":" protected static int total \u003d 0;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" * Constructs a task with the given description and completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" Task.total +\u003d 1;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" * Gets the status icon of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" * @return The status icon (\"X\" if done, \" \" if not done).","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" * Converts the task to a formatted string.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description; // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" public void unmark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":" * Gets the total number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":" * @return The total number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":" public static int getTotal() {","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" return Task.total;","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" * Removes the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":" public void remove() {","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":" Task.total -\u003d 1;","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ryanongwx"},"content":" * Converts the task to a string for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ryanongwx"},"content":" * @return The formatted string for saving the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ryanongwx"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"ryanongwx"},"content":" return \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ryanongwx"},"content":" * Checks if the task is done.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ryanongwx"},"content":" * @return True if the task is done, false otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ryanongwx"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ryanongwx"},"content":" return isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ryanongwx":89}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":" * Represents a list of tasks with various operations for managing tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" * Adds a deadline task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" * @param isDone Indicates whether the task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" * @param byDateAndTime The date and time of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" public String addDeadline(String description, boolean isDone, String byDateAndTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" Deadline deadline \u003d new Deadline(description, isDone, byDateAndTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":" return Ui.getAddConfirmation(deadline, this.getTotalTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" * Adds a todo task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" * @param isDone Indicates whether the task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":" public String addTodo(String description, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" ToDo todo \u003d new ToDo(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" tasks.add(todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" return Ui.getAddConfirmation(todo, this.getTotalTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" * Adds an event task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" * @param isDone Indicates whether the task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":" * @param from The starting date and time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" * @param to The ending date and time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" * @return A message displaying event added to tasklist.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" public String addEvent(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":" Event event \u003d new Event(description, isDone, from, to);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":" return Ui.getAddConfirmation(event, this.getTotalTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":" * Removes a task from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" * @return A message displaying event removed from tasklist.","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":" public String removeTask(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":" Task tmp \u003d tasks.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" int tmp1 \u003d this.getTotalTasks() - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ryanongwx"},"content":" return Ui.getRemoved(tmp, tmp1);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ryanongwx"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ryanongwx"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ryanongwx"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"ryanongwx"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ryanongwx"},"content":" * Returns the total number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ryanongwx"},"content":" * @return The total number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ryanongwx"},"content":" public int getTotalTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"ryanongwx"},"content":" return tasks.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ryanongwx"},"content":" * Marks a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ryanongwx"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ryanongwx"},"content":" * @return A message displaying tasked marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ryanongwx"},"content":" public String markTask(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"ryanongwx"},"content":" tasks.get(index).markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"ryanongwx"},"content":" return Ui.getMarkedAsDone(tasks.get(index));","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ryanongwx"},"content":" * Unmarks a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ryanongwx"},"content":" * @param index The index of the task to be unmarked.","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ryanongwx"},"content":" * * @return A message displaying tasked unmarked as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"ryanongwx"},"content":" public String unmarkTask(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"ryanongwx"},"content":" tasks.get(index).unmark();","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"ryanongwx"},"content":" return Ui.getUnmarked(tasks.get(index));","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"ryanongwx"},"content":" * Sets the tasks in the list to the given tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The ArrayList of tasks to be set.","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"ryanongwx"},"content":" public void setTasks(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"ryanongwx"},"content":" tasks.addAll(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"ryanongwx"},"content":" * Finds tasks in the task list that match a given keyword and displays them to","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"ryanongwx"},"content":" * the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"ryanongwx"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"ryanongwx"},"content":" * @return A message all tasks found.","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"ryanongwx"},"content":" public String findTasksByKeyword(String keyword) {","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"ryanongwx"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"ryanongwx"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"ryanongwx"},"content":" if (task.toSaveString().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"ryanongwx"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"ryanongwx"},"content":" return Ui.getMatchingTasks(matchingTasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ryanongwx":141}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":" * Represents a todo task that can be added to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":" * Constructs a todo task with the specified description and status.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" * @param isDone Indicates whether the task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" * Returns a string representation of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" * @return A string containing the status icon and description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" * Returns a formatted string for saving the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" * @return A string containing the task type, status, and description.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" return \"T,\" + isDone + \",\" + description;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ryanongwx":37}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":" * Represents the user interface for interacting with the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":" * Constructs a new UI instance with a scanner for user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" public Ui() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":" * Returns a greeting message.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" public static String getGreeting() {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" return \"Hello! I\u0027m yourChatBot\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" * Returns a message displaying the list of tasks in the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" * @param taskList The task list containing the tasks to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":" * @return A message displaying the list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" public static String getList(TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" StringBuilder todolistoutput \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" for (int i \u003d 0; i \u003c taskList.getTotalTasks(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" todolistoutput.append(i + 1).append(\". \").append(taskList.getTasks().get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" return todolistoutput.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" * Returns a message indicating that a task has been marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" * @param task The task that has been marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":" * @return A message indicating the task has been marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" public static String getMarkedAsDone(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task;","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" * Returns a message indicating that a task has been marked as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" * @param task The task that has been marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" * @return A message indicating the task has been marked as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" public static String getUnmarked(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":" * Returns a message indicating that a task has been removed.","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":" * @param task The task that has been removed.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" * @param totalTasks The total number of tasks remaining.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" * @return A message indicating the task has been removed.","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":" public static String getRemoved(Task task, int totalTasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + task + \"\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" \"Now you have \" + totalTasks + \" tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ryanongwx"},"content":" * Returns an error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ryanongwx"},"content":" * @param errorMessage The error message to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ryanongwx"},"content":" * @return An error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ryanongwx"},"content":" public static String getError(String errorMessage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"ryanongwx"},"content":" return errorMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ryanongwx"},"content":" * Returns a confirmation message after adding a task.","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ryanongwx"},"content":" * @param task The task that has been added.","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ryanongwx"},"content":" * @param totalTasks The total number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ryanongwx"},"content":" * @return A confirmation message.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ryanongwx"},"content":" public static String getAddConfirmation(Task task, int totalTasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"ryanongwx"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + task + \"\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"ryanongwx"},"content":" \"Now you have \" + totalTasks + \" tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ryanongwx"},"content":" * Returns a farewell message.","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"ryanongwx"},"content":" * @return A farewell message.","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ryanongwx"},"content":" public static String getByeMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"ryanongwx"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ryanongwx"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ryanongwx"},"content":" * Returns a list of tasks that match the given keyword to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"ryanongwx"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ryanongwx"},"content":" * @param matchingTasks The list of tasks that match the keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ryanongwx"},"content":" * @return A list of matching tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"ryanongwx"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ryanongwx"},"content":" public static String getMatchingTasks(ArrayList\u003cTask\u003e matchingTasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"ryanongwx"},"content":" StringBuilder matchingTasksOutput \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"ryanongwx"},"content":" matchingTasksOutput.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"ryanongwx"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"ryanongwx"},"content":" matchingTasksOutput.append(i + 1).append(\". \").append(matchingTasks.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"ryanongwx"},"content":" return matchingTasksOutput.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ryanongwx":115}},{"path":"src/main/java/duke/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"T,false,read book","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"E,false,project meeting,2019-10-15 16:00,2019-10-15 20:00","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"T,false,join sports club","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"E,false,Birthday party,2023-08-30 15:00,2023-08-30 18:00","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ryanongwx":4}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":" public void testParseAndAddTask_AddTodoTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" String userInput \u003d \"todo Buy groceries\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" Parser.parseAndAddTask(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" assertEquals(1, taskList.getTotalTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":" assertTrue(taskList.getTasks().get(0) instanceof ToDo);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" public void testParseAndAddTask_AddDeadlineTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" String userInput \u003d \"deadline Return book /by 2023-12-31\";","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" Parser.parseAndAddTask(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" assertEquals(1, taskList.getTotalTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" assertTrue(taskList.getTasks().get(0) instanceof Deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" public void testParseAndAddTask_AddEventTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" String userInput \u003d \"event Birthday party /from 2023-08-30 15:00 /to 2023-08-30 18:00\";","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" Parser.parseAndAddTask(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" assertEquals(1, taskList.getTotalTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":" assertTrue(taskList.getTasks().get(0) instanceof Event);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" public void testParseAndAddTask_InvalidCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" String userInput \u003d \"invalidcommand\";","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" Parser.parseAndAddTask(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":" public void testParseAndAddTask_MarkTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":" taskList.addTodo(\"Test task\", false);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" String userInput \u003d \"mark 1\";","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" Parser.parseAndAddTask(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" assertTrue(taskList.getTasks().get(0).isDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" public void testParseAndAddTask_UnmarkTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":" taskList.addTodo(\"Test task\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":" String userInput \u003d \"unmark 1\";","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ryanongwx"},"content":" Parser.parseAndAddTask(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ryanongwx"},"content":" assertFalse(taskList.getTasks().get(0).isDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ryanongwx"},"content":" public void testParseAndAddTask_DeleteTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ryanongwx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ryanongwx"},"content":" taskList.addTodo(\"Test task\", false);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ryanongwx"},"content":" String userInput \u003d \"delete 1\";","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ryanongwx"},"content":" Parser.parseAndAddTask(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ryanongwx"},"content":" assertEquals(0, taskList.getTotalTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ryanongwx":87}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ryanongwx"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ryanongwx"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ryanongwx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ryanongwx"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ryanongwx"},"content":" void testLoadTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ryanongwx"},"content":" // Test loading of tasks from file","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ryanongwx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ryanongwx"},"content":" Path tempFilePath \u003d Files.createTempFile(null, \".txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ryanongwx"},"content":" Storage storage \u003d new Storage(tempFilePath.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ryanongwx"},"content":" ArrayList\u003cTask\u003e expectedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ryanongwx"},"content":" expectedTasks.add(new ToDo(\"Task 1\", true));","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ryanongwx"},"content":" expectedTasks.add(new Deadline(\"Deadline 1\", false, \"2023-08-29 1800\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ryanongwx"},"content":" expectedTasks.add(new Event(\"Event 1\", true, \"2023-08-30 0900\", \"2023-08-30 1200\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ryanongwx"},"content":" storage.saveTasks(expectedTasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ryanongwx"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d storage.loadTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ryanongwx"},"content":" assertEquals(expectedTasks.size(), loadedTasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ryanongwx"},"content":" for (int i \u003d 0; i \u003c expectedTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ryanongwx"},"content":" Task expectedTask \u003d expectedTasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ryanongwx"},"content":" Task loadedTask \u003d loadedTasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ryanongwx"},"content":" assertEquals(expectedTask.toSaveString(), loadedTask.toSaveString());","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ryanongwx"},"content":" Files.deleteIfExists(tempFilePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ryanongwx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ryanongwx"},"content":" fail(\"Exception occurred during testing: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ryanongwx"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ryanongwx"},"content":" void testSaveTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ryanongwx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ryanongwx"},"content":" // Test saving of todolist to file","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ryanongwx"},"content":" Path tempFilePath \u003d Files.createTempFile(null, \".txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ryanongwx"},"content":" Storage storage \u003d new Storage(tempFilePath.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ryanongwx"},"content":" ArrayList\u003cTask\u003e tasksToSave \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ryanongwx"},"content":" tasksToSave.add(new ToDo(\"Task 1\", true));","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ryanongwx"},"content":" tasksToSave.add(new Deadline(\"Deadline 1\", false, \"2023-08-29 1800\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ryanongwx"},"content":" tasksToSave.add(new Event(\"Event 1\", true, \"2023-08-30 0900\", \"2023-08-30 1200\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ryanongwx"},"content":" storage.saveTasks(tasksToSave);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ryanongwx"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d storage.loadTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ryanongwx"},"content":" assertEquals(tasksToSave.size(), loadedTasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ryanongwx"},"content":" for (int i \u003d 0; i \u003c tasksToSave.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ryanongwx"},"content":" Task savedTask \u003d tasksToSave.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ryanongwx"},"content":" Task loadedTask \u003d loadedTasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ryanongwx"},"content":" assertEquals(savedTask.toSaveString(), loadedTask.toSaveString());","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ryanongwx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ryanongwx"},"content":" Files.deleteIfExists(tempFilePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ryanongwx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ryanongwx"},"content":" fail(\"Exception occurred during testing: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ryanongwx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ryanongwx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ryanongwx":70}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ryanongwx"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"ryanongwx"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"ryanongwx"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"ryanongwx"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"ryanongwx"},"content":"delete 2","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"ryanongwx"},"content":"blah","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ryanongwx":6}}] diff --git a/ryanongwx_ip_master/commits.json b/ryanongwx_ip_master/commits.json index 07e82bfe..b2d0e6b1 100644 --- a/ryanongwx_ip_master/commits.json +++ b/ryanongwx_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ryanongwx":[{"date":"2023-08-22","commitResults":[{"hash":"702b16df0826014e34cc9c102182a11e4f8fc986","isMergeCommit":false,"messageTitle":"Level-0 Rename, Greet, Exit","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"5eaf67dbf2740611065ff7239230619f77104e4d","isMergeCommit":false,"messageTitle":"Level-1 Echo","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"9243cb186cc61470eca2d7622ffe5f2482fddf9b","isMergeCommit":false,"messageTitle":"Level-2 Add, List","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":5}}},{"hash":"011dca1454c3fd9c6cd5188a101e460258c8b528","isMergeCommit":false,"messageTitle":"Level-3 Mark as Done","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":3}}},{"hash":"61ca2597fcfa2cb3a7f8e2b9bc0ceee414453383","isMergeCommit":false,"messageTitle":"Level-4 ToDos, Events, Deadlines","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":9}}},{"hash":"ec3249dac7cb311fb26d671cbd0c69e6a2cdd2d7","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":1,"deletions":1},"sh":{"insertions":0,"deletions":0}}},{"hash":"ec8778cf487d8b6859ea05353ce4bffd59b0839b","isMergeCommit":false,"messageTitle":"Level-5 Handle Errors","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":35,"deletions":15}}},{"hash":"31dca0587aefa74bc01921118314b0dedb16ca3e","isMergeCommit":false,"messageTitle":"Level-6 Delete","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":17,"deletions":5}}}]},{"date":"2023-08-29","commitResults":[{"hash":"cc1083c0b637d527a5ba4f46fc4d1255b3c07f08","isMergeCommit":false,"messageTitle":"Level-7 Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":407,"deletions":107}}},{"hash":"4f8ba8f784472ca87bc23ce1a97cb505324afa25","isMergeCommit":false,"messageTitle":"Level-8 Dates and Times","messageBody":"","tags":["Level-8","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4},"java":{"insertions":99,"deletions":126}}},{"hash":"dca9aae0f5fb9a2d0b3c9d0a7a39b5e80e9b9481","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":19,"deletions":2}}},{"hash":"c23eb0a25c57f5959b8d3c23cced1b60bb40e683","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"Merge\n","fileTypesAndContributionMap":{}},{"hash":"50a9846f240a1ce875be47c68ca5e2de196d5be6","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"e0722b6d5eb59625f37b03bd031adf276a1ec3f2","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JUnit","A-JAR"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":168,"deletions":7}}},{"hash":"a2301cd99fae9d4aa2550136d61c601b6cddf2ec","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","tags":["CodingStandard","A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":282,"deletions":2}}},{"hash":"c2764c92deb87f2c8db35d6b1f4fd0275732c387","isMergeCommit":false,"messageTitle":"Level-9 Find","messageBody":"","tags":["Level-9","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"ryanongwx":{"java":950,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":10}},"authorContributionVariance":{"ryanongwx":56779.87},"authorDisplayNameMap":{"ryanongwx":"CS2103T-T12-4 RYAN..XIAN"}} +{"authorDailyContributionsMap":{"ryanongwx":[{"date":"2023-08-22","commitResults":[{"hash":"702b16df0826014e34cc9c102182a11e4f8fc986","isMergeCommit":false,"messageTitle":"Level-0 Rename, Greet, Exit","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"5eaf67dbf2740611065ff7239230619f77104e4d","isMergeCommit":false,"messageTitle":"Level-1 Echo","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"9243cb186cc61470eca2d7622ffe5f2482fddf9b","isMergeCommit":false,"messageTitle":"Level-2 Add, List","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":5}}},{"hash":"011dca1454c3fd9c6cd5188a101e460258c8b528","isMergeCommit":false,"messageTitle":"Level-3 Mark as Done","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":3}}},{"hash":"61ca2597fcfa2cb3a7f8e2b9bc0ceee414453383","isMergeCommit":false,"messageTitle":"Level-4 ToDos, Events, Deadlines","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":9}}},{"hash":"ec3249dac7cb311fb26d671cbd0c69e6a2cdd2d7","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":1,"deletions":1},"sh":{"insertions":0,"deletions":0}}},{"hash":"ec8778cf487d8b6859ea05353ce4bffd59b0839b","isMergeCommit":false,"messageTitle":"Level-5 Handle Errors","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":35,"deletions":15}}},{"hash":"31dca0587aefa74bc01921118314b0dedb16ca3e","isMergeCommit":false,"messageTitle":"Level-6 Delete","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":17,"deletions":5}}}]},{"date":"2023-08-29","commitResults":[{"hash":"cc1083c0b637d527a5ba4f46fc4d1255b3c07f08","isMergeCommit":false,"messageTitle":"Level-7 Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":407,"deletions":107}}},{"hash":"4f8ba8f784472ca87bc23ce1a97cb505324afa25","isMergeCommit":false,"messageTitle":"Level-8 Dates and Times","messageBody":"","tags":["Level-8","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4},"java":{"insertions":99,"deletions":126}}},{"hash":"dca9aae0f5fb9a2d0b3c9d0a7a39b5e80e9b9481","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":19,"deletions":2}}},{"hash":"c23eb0a25c57f5959b8d3c23cced1b60bb40e683","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"Merge\n","fileTypesAndContributionMap":{}},{"hash":"50a9846f240a1ce875be47c68ca5e2de196d5be6","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"e0722b6d5eb59625f37b03bd031adf276a1ec3f2","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JUnit","A-JAR"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":168,"deletions":7}}},{"hash":"a2301cd99fae9d4aa2550136d61c601b6cddf2ec","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","tags":["CodingStandard","A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":282,"deletions":2}}},{"hash":"c2764c92deb87f2c8db35d6b1f4fd0275732c387","isMergeCommit":false,"messageTitle":"Level-9 Find","messageBody":"","tags":["Level-9","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"b180acece8ef1b78ad764d3ce19ad8b4d91d0e24","isMergeCommit":false,"messageTitle":"Level-10 GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"java":{"insertions":226,"deletions":129}}}]}]},"authorFileTypeContributionMap":{"ryanongwx":{"java":1049,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":15,"txt":10}},"authorContributionVariance":{"ryanongwx":45530.01},"authorDisplayNameMap":{"ryanongwx":"CS2103T-T12-4 RYAN..XIAN"}} diff --git a/shishirbychapur_ip_master/authorship.json b/shishirbychapur_ip_master/authorship.json index eed9965f..4dfb3fe1 100644 --- a/shishirbychapur_ip_master/authorship.json +++ b/shishirbychapur_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-28"},{"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":"shishirbychapur"},"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-28"},{"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":{"shishirbychapur":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":"shishirbychapur"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"javafx {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" version \u003d \"11.0.2\"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027, \u0027javafx.media\u0027 ]","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":"mainClassName \u003d \u0027duke.Duke\u0027","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"shishirbychapur":14,"-":41}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"T | O | drive car","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"D | O | study | Aug 15 2023 02:30 PM","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"E | X | submit week 3 | Aug 21 2002 12:00 PM - Aug 22 2002 01:00 PM","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"shishirbychapur":3}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Main;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Duke Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" /** Task List of all tasks. */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" /** Storage of all tasks. */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" /** UI for chatting and interacting with the bot. */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" private Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the Duke Object.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" * @param filePath Path of the text file with stored tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" this.tasks \u003d new TaskList(this.storage.readData());","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the Duke Object with the default file path","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" * being data/tasks.txt.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" public Duke() {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" this.storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" this.tasks \u003d new TaskList(this.storage.readData());","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" * Initialises Jarvis","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" * @param args Input args.","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" return command.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" } catch (DukeException exc) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" return exc.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"shishirbychapur":66,"-":3}},{"path":"src/main/java/duke/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" * Represents the AddCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for addition operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" /** Description of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" /** Due date of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" private LocalDateTime till;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" /** Start date of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" /** Type of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" private String type;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the AddCommand Object.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" public AddCommand(String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" this.type \u003d \"todo\";","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the AddCommand Object.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" public AddCommand(String description, LocalDateTime till) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" this.till \u003d till;","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" this.type \u003d \"deadline\";","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the AddCommand Object.","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" * @param from Start date of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" * @param till End date of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" public AddCommand(String description, LocalDateTime from, LocalDateTime till) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" this.till \u003d till;","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" this.type \u003d \"event\";","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" * Executes the required command.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException Thrown if task type is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":" Task task;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":" switch (this.type) {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" case \"todo\":","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" task \u003d new Todo(this.description, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":" task \u003d new Deadline(this.description, this.till, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"shishirbychapur"},"content":" case \"event\":","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"shishirbychapur"},"content":" task \u003d new Event(this.description, this.from, this.till, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"shishirbychapur"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"Invalid task type!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"shishirbychapur"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"shishirbychapur"},"content":" storage.writeData(tasks.getAllTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"shishirbychapur"},"content":" return ui.showAdd(tasks.size(), task);","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"shishirbychapur"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"shishirbychapur"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":102}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Abstract Command Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" * Executes the required command.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException Throws DukeException on invalid input.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":28}},{"path":"src/main/java/duke/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" * Represents the DeleteCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for handling delete operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" /** Index of respective task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the DeleteCommand Object.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" * @param index Index of the respective task.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" * Executes the required command.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException Throws DukeException on invalid input.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d tasks.getTask(this.index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" tasks.delete(this.index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" storage.writeData(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" return ui.showDelete(this.index, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":51}},{"path":"src/main/java/duke/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" * Represents the ExitCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for handling exit operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" * Executes the respective command.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" return ui.leave();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":34}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" * Represents the FindCommand Class","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for handling the find operation.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" /** String entered by user. */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" private String find;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the FindCommand object.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * @param find Keyword to find.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" public FindCommand(String find) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" this.find \u003d find;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" * Executes the respective command.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" return ui.showFind(this.find) + \"\\n\" + tasks.filterByName(this.find);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"shishirbychapur":46}},{"path":"src/main/java/duke/commands/IncorrectCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * Represents the IncorrectCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for handling incorrect operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"public class IncorrectCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" /** Description of incorrect operation. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" private String message;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the IncorrectCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" * @param message Description of the incorrect operation.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" public IncorrectCommand(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" this.message \u003d message;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" * Executes the required command.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException Throws DukeException on invalid input.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(this.message);","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":48}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" * Represents the ListCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for handling display list operation.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" * Executes the required command.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" return ui.showList(tasks.size()) + \"\\n\" + tasks.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":34}},{"path":"src/main/java/duke/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * Represents the MarkCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for handling mark/unmark operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" /** Index of task to be marked. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" /** Type of task to be marked. */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" private boolean isMark;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the IncorrectCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" * @param index Index of task to be marked.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" * @param type Type of task to be marked.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" public MarkCommand(int index, String type) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" this.isMark \u003d type.equals(\"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" * Executes the required command.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException Throws DukeException on invalid input.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" tasks.changeStatus(index - 1, isMark);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" storage.writeData(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" return ui.showStatus(index, tasks.getTask(index - 1), isMark);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":54}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":" * Represents the DukeException Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" /** Exception message. */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" private String message;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" * The constructor.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" * @param message The description of the error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" this.message \u003d message;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation of the exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" * @return String representation of the exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" return this.message;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"shishirbychapur":31}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.AddCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.DeleteCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.IncorrectCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.MarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Parser Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for parsing user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" * Returns a command based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" * @param fullCommand String representation of user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" * @return Command based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" public static Command parse(String fullCommand) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" String[] split \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" switch(split[0]) {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" case \"bye\":","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" c \u003d validateCommand(split, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" case \"list\":","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" c \u003d validateCommand(split, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" case \"mark\":","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" c \u003d validateIndex(split, true);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" case \"todo\":","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" case \"event\":","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" c \u003d validateTask(split);","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" case \"delete\":","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" c \u003d validateIndex(split, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" c \u003d validateFind(split);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" c \u003d new IncorrectCommand(\"I\u0027m sorry, I couldn\u0027t understand that. Please try again!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" return c;","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" private static Command validateIndex(String[] split, boolean flag) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" // Check if mark is receiving any input or receiving extra input","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" if (split.length !\u003d 2 || split[1].isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a valid mark command!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":" // Check if mark is not receiving a number.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" index \u003d Integer.parseInt(split[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" } catch (NumberFormatException exp) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"I cannot mark a character! Please enter a number.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" // Check if index is greater than 0.","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" if (index \u003c\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a number greater than 0!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":" return flag ? new MarkCommand(index, split[0]) : new DeleteCommand(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"shishirbychapur"},"content":" private static Command validateTask(String[] split) {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"shishirbychapur"},"content":" if (split.length \u003d\u003d 1 || split[1].isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a valid task.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"shishirbychapur"},"content":" if (split[0].equals(\"deadline\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"shishirbychapur"},"content":" if (!split[1].contains(\" /by \")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a /by command to depict the deadline.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"shishirbychapur"},"content":" String[] task \u003d split[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"shishirbychapur"},"content":" if (task.length \u003c\u003d 1 || task[1].isBlank() || task[0].isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a valid task and/or deadline.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"shishirbychapur"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"shishirbychapur"},"content":" return new AddCommand(task[0], LocalDateTime.parse(task[1], formatter));","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"shishirbychapur"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter the date \u0026 time in a valid format! (DD/MM/YY HHMM)\");","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"shishirbychapur"},"content":" } else if (split[0].equals(\"event\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"shishirbychapur"},"content":" if (!split[1].contains(\" /from \")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a /from command to depict the deadline.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"shishirbychapur"},"content":" String[] task \u003d split[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"shishirbychapur"},"content":" // Check if task entered is empty","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"shishirbychapur"},"content":" if (task.length \u003c\u003d 1 || task[1].isBlank() || task[0].isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a valid task.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"shishirbychapur"},"content":" // Check if /to is present","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"shishirbychapur"},"content":" if (!task[1].contains(\" /to \")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"There is no /to command present. Please try again.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"shishirbychapur"},"content":" String[] to \u003d task[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"shishirbychapur"},"content":" if (to.length \u003c\u003d 1 || to[1].isBlank() || to[0].isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter valid to \u0026 from dates\");","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"shishirbychapur"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime from \u003d LocalDateTime.parse(to[0], formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime till \u003d LocalDateTime.parse(to[1], formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"shishirbychapur"},"content":" if (from.isAfter(till) || from.isEqual(till)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please ensure that the date range is valid!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"shishirbychapur"},"content":" return new AddCommand(task[0], from, till);","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"shishirbychapur"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter the date \u0026 time in a valid format! (DD/MM/YY HHMM)\");","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"shishirbychapur"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"shishirbychapur"},"content":" return new AddCommand(split[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"shishirbychapur"},"content":" private static Command validateCommand(String[] split, boolean flag) {","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"shishirbychapur"},"content":" if (split.length !\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a valid command!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"shishirbychapur"},"content":" return flag ? new ExitCommand() : new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"shishirbychapur"},"content":" private static Command validateFind(String[] split) {","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"shishirbychapur"},"content":" if (split.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a valid command!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"shishirbychapur"},"content":" return new FindCommand(split[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":165}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Storage Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for File I/O Operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" /** Folder containing the required text file. */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" private File folder;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" /** File containing the list of all tasks. */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" private File file;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" * Constructs a file and folder with the given path.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" * @param filePath Path of required text file.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" String[] folder \u003d filePath.split(\"/\");","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" this.folder \u003d new File(folder[0]);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" // Directory doesn\u0027t exist","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" if (!this.folder.isDirectory()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" this.createDirectory();","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" // File doesn\u0027t exist","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" if (!this.file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" this.createFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" /** Creates a new folder. */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" public void createDirectory() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" this.folder.mkdir();","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" /** Creates a new file. */","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" public void createFile() {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" this.file.createNewFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" } catch (IOException err) {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" System.out.println(err);","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":" * Returns the list of all tasks by reading from the text file.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" * @return List of all tasks present in the text file.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" public ArrayList\u003cTask\u003e readData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" ArrayList\u003cTask\u003e data \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" int lineNumber \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":" Scanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" lineNumber++;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d this.stringToTask(scanner.nextLine());","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":" data.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"shishirbychapur"},"content":" } catch (FileNotFoundException exc) {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"shishirbychapur"},"content":" System.out.println(\"The file doesn\u0027t exist yet, but will be created\"","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"shishirbychapur"},"content":" + \" under the path (\" + this.file.getPath() + \")\");","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"shishirbychapur"},"content":" } catch (DukeException exc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"shishirbychapur"},"content":" System.out.println(\"Incorrect input has been detected from the file \"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"shishirbychapur"},"content":" + \"stored at the path (\" + this.file.getPath() + \") at line number \" + lineNumber + \".\");","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"shishirbychapur"},"content":" System.out.println(\"Error Message: \" + exc);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"shishirbychapur"},"content":" System.out.println(\"The invalid task will be overwritten and removed.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"shishirbychapur"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"shishirbychapur"},"content":" // To remove the invalid input.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"shishirbychapur"},"content":" this.writeData(data);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"shishirbychapur"},"content":" return data;","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"shishirbychapur"},"content":" * Updates the text file with the given list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"shishirbychapur"},"content":" public void writeData(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"shishirbychapur"},"content":" FileWriter writer \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"shishirbychapur"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"shishirbychapur"},"content":" writer.write(task.toFile() + System.lineSeparator());","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"shishirbychapur"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"shishirbychapur"},"content":" } catch (IOException exc) {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"shishirbychapur"},"content":" System.out.println(exc);","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"shishirbychapur"},"content":" * Converts the given string into a task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"shishirbychapur"},"content":" * @param line String representation of the task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"shishirbychapur"},"content":" * @return Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException thrown on invalid input.","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"shishirbychapur"},"content":" public Task stringToTask(String line) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"shishirbychapur"},"content":" String[] split \u003d line.split(\" \\\\| \", 4);","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"shishirbychapur"},"content":" // Corrupted File","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"shishirbychapur"},"content":" if (split.length \u003c 3) {","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"Invalid task format detected!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"shishirbychapur"},"content":" String type \u003d split[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"shishirbychapur"},"content":" String status \u003d split[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"shishirbychapur"},"content":" String action \u003d split[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"shishirbychapur"},"content":" // Check status is valid","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"shishirbychapur"},"content":" if (!status.equals(\"X\") \u0026\u0026 !status.equals(\"O\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"Invalid task status detected!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"shishirbychapur"},"content":" // Check action is valid","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"shishirbychapur"},"content":" if (action.isBlank()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"Invalid description of task detected!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"shishirbychapur"},"content":" Task task;","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"shishirbychapur"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\");","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"shishirbychapur"},"content":" switch(type) {","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"shishirbychapur"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"shishirbychapur"},"content":" task \u003d new Todo(action, status.equals(\"X\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"shishirbychapur"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"shishirbychapur"},"content":" task \u003d new Deadline(action, LocalDateTime.parse(split[3], formatter), status.equals(\"X\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"shishirbychapur"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"shishirbychapur"},"content":" String[] interval \u003d split[3].split(\" - \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"shishirbychapur"},"content":" if (interval.length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"Invalid range of task detected!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"shishirbychapur"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"shishirbychapur"},"content":" task \u003d new Event(action, LocalDateTime.parse(interval[0], formatter),","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime.parse(interval[1], formatter), status.equals(\"X\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"shishirbychapur"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":163,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"Invalid type of task detected!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"shishirbychapur"},"content":" } catch (DateTimeParseException exc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"Invalid date detected!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"shishirbychapur"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":171,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"shishirbychapur":172}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Deadline Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" **/","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" /** Deadline of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the deadline class.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * @param deadline Deadline of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * @param status Status of completion.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" public Deadline(String description, LocalDateTime deadline, boolean status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" super(description, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" * @return String representation of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" return \"[Deadline] \" + super.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" + \" (by: \" + this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation of the deadline task in file format.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" * @return String representation of the deadline task in file format.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" public String toFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" return \"D\" + super.toFile() + \" | \" + this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"shishirbychapur":45}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Event Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" /** Start date and time of the event. */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" /** End date and time of the event. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the event class.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" * @param status Status of completion.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" * @param from Start date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" * @param to End date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to, boolean status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" super(description, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" * @return String representation of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" return \"[Event] \" + super.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" + \" (from: \" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"))","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" + \" to: \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation of the event in file format.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" * @return String representation of the event in file format.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" public String toFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" return \"E\" + super.toFile() + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"))","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" + \" - \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"shishirbychapur":53}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Abstract Task Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":" * Has three subclasses Event, Todo and Deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" /** Description of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" private String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" /** Completion status of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" private boolean completed;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the task class.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * @param action Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" public Task(String action) {","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" this.description \u003d action;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" this.completed \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the task class.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" * @param action Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" * @param status Status of completion of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" public Task(String action, boolean status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" this.description \u003d action;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" this.completed \u003d status;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" * @return Required string representation.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" return \"[\" + (this.completed ? \"X\" : \" \") + \"] \" + this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation in the file format.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" * @return Required string representation in file format.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" public String toFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" return \" | \" + (this.completed ? \"X\" : \"O\") + \" | \" + this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" * Sets the completion status of the task to given boolean value.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" * @param isMark Given boolean value.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" public void completeTask(boolean isMark) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" this.completed \u003d isMark;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" * Returns the status of a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" * @return Status of completion.","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" public boolean isCompleted() {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" return this.completed;","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" public boolean contains(String name) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" return this.description.contains(name);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"shishirbychapur":72}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" * Represents the TaskList Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" /** List of all tasks */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the TaskList Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of initial tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" * Adds a new task to the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" * @param newTask New task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" public void add(Task newTask) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" this.tasks.add(newTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" * Marks the task with the given index.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" * @param index Index of the task to be marked.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" * @param isMark Mark if true, Unmark if false.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException Exception thrown upon invalid index.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" public void changeStatus(int index, boolean isMark) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" if (index \u003e\u003d this.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"I\u0027m unable to perform the mark/unmark operation due to an invalid index!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" if (this.tasks.get(index).isCompleted() \u003d\u003d isMark) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"I\u0027m unable to perform the mark/unmark operation because the task\"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" + \" is already marked/unmarked!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" this.tasks.get(index).completeTask(isMark);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" * Deletes the task with the given index.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" * @param index Index of the task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException Exception thrown on invalid index.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" public void delete(int index) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" if (index \u003e this.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"I\u0027m unable to perform the delete operation due to an invalid index!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" * Returns the size of the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" * @return Size of the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" public int size() {","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" * Returns the task at the given index.","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" * @param index Index of required task.","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" * @return Required task.","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":" * Returns the list of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":" * @return List of all tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"shishirbychapur"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"shishirbychapur"},"content":" return this.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"shishirbychapur"},"content":" * Filters and prints the list of all the tasks matching with the given keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"shishirbychapur"},"content":" * @param name Given keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"shishirbychapur"},"content":" public String filterByName(String name) {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"shishirbychapur"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"shishirbychapur"},"content":" StringBuilder filteredString \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"shishirbychapur"},"content":" for (Task t : this.tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"shishirbychapur"},"content":" if (t.contains(name)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"shishirbychapur"},"content":" filteredString.append(count).append(\") \").append(t.toString()).append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"shishirbychapur"},"content":" return filteredString.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"shishirbychapur"},"content":" * Prints the list of all the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"shishirbychapur"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"shishirbychapur"},"content":" StringBuilder taskString \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"shishirbychapur"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"shishirbychapur"},"content":" taskString.append(i + 1).append(\") \").append(tasks.get(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"shishirbychapur"},"content":" return taskString.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":114}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Todo task class.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" * Constructs a new Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" * @param status The status of completion.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" public Todo(String description, boolean status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" super(description, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation of the todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * @return String representation of the todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" return \"[Todo] \" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation in the file format.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" * @return String representation.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" public String toFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" return \"T\" + super.toFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"shishirbychapur":36}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.layout.Pane;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * The DialogBox Class.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for formatting the messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" private Pane messageOutline;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the DialogBox.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" * @param text User\u0027s message.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" * @param img User\u0027s profile picture.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" * @param isUser User\u0027s type.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" private DialogBox(String text, Image img, boolean isUser) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" dialog.setWrapText(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" dialog.setPrefWidth(280);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" messageOutline.prefHeightProperty().bind(dialog.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" if (isUser) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" messageOutline.getStyleClass().clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" messageOutline.getStyleClass().add(\"blue-background\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" return new DialogBox(text, img, true);","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":" var db \u003d new DialogBox(text, img, false);","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"shishirbychapur":81}},{"path":"src/main/java/duke/ui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" stage.setTitle(\"Jarvis, Your Personal Task Manager!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"shishirbychapur":32}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"//import javafx.application.Platform;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.control.TextArea;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.input.KeyCode;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.input.KeyEvent;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * MainWindow Class.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for the Main GUI Interface of Jarvis","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" private ImageView sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" private TextArea textField;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" private ScrollPane dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" private VBox dialogBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/tony.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" private Image jarvis \u003d new Image(this.getClass().getResourceAsStream(\"/images/duke.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" /** Initialises the container for holding messages. */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" this.dialogContainer.setVvalue(1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" this.dialogBox.heightProperty().addListener((observable) -\u003e this.dialogContainer.setVvalue(1.0));","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" this.dialogContainer.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" this.dialogContainer.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" this.dialogBox.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" this.dialogBox.getChildren().add(DialogBox.getDukeDialog(\"Hi!\", this.jarvis));","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" * Handles the event where the user presses the \"Send\" button.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" public void onClick() {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" Stage mainWindow \u003d (Stage) this.textField.getScene().getWindow();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" String input \u003d this.textField.getText().replace(\"\\n\", \"\");;","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" String response \u003d this.duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" textField.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" dialogBox.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" DialogBox.getUserDialog(input, this.user),","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" DialogBox.getDukeDialog(response, this.jarvis)","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" // if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" // Platform.exit();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" // }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" * Handles the event where the user presses the \"Enter\" key.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" * @param event Event triggering the function call.","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" public void onEnter(KeyEvent event) {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" if (event.getCode() \u003d\u003d KeyCode.ENTER) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" this.onClick();","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" * Sets duke object to give object.","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":" * @param d Duke Object responsible for interaction with user.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":" this.duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"shishirbychapur":84}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Ui Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for returning commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" /** Returns a greeting message. */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" public String greet() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" return \"Greetings, I am Jarvis! How may I assist you today?\";","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" /** Returns a farewell message. */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" public String leave() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" return \"I shall now take my leave. Farewell!\";","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" * Returns an acknowledgment message on successful addition to the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" * @param size Length of the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" * @param task Newly added task.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" public String showAdd(int size, Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" return \"Added the following task to the list.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" + size + \") \" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" + \"You currently have \" + size + \" tasks in your list.\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" * Returns an acknowledgment message on a successful mark/unmark.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" * @param index Index of the newly marked/unmarked task.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" * @param task Newly marked/unmarked task.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" * @param isMark Mark if true, Unmark if false.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" public String showStatus(int index, Task task, boolean isMark) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" String message;","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" if (isMark) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" message \u003d \"The following task is marked as complete:\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" message \u003d \"The following task has been unmarked:\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" return message + index + \") \" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" + \"Is there anything else I can assist you with?\";","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" * Returns an acknowledgment message on a successful deletion of a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" * @param index Index of the newly deleted task.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" * @param task Newly deleted task.","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" public String showDelete(int index, Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" return \"The following task has been removed:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" + index + \") \" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" + \"Is there anything else I can assist you with?\";","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" * Returns an acknowledgment message on request to display all the tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" * @param size Size of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" public String showList(int size) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" return size \u003d\u003d 0","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" ? \"Your task list is empty! Add a task to view it here.\"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":" : \"Tasks displayed. Your guidance is requested.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" * Returns out the list of tasks which match with the keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" * @param word Entered keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":" public String showFind(String word) {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" return \"Finding tasks that contain the entered keyword (\" + word + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":78}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.layout.Pane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefHeight\u003d\"79.0\" prefWidth\u003d\"400.0\" stylesheets\u003d\"@../css/Application.css\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/11.0.2\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" \u003cPane fx:id\u003d\"messageOutline\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefWidth\u003d\"306.0\" styleClass\u003d\"text-area\" stylesheets\u003d\"@../css/Application.css\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" \u003cLabel fx:id\u003d\"dialog\" layoutX\u003d\"13.0\" maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"0.0\" stylesheets\u003d\"@../css/Application.css\" text\u003d\"Label\" textFill\u003d\"WHITE\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" \u003c/opaqueInsets\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" \u003cFont name\u003d\"Bell MT Bold\" size\u003d\"16.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" \u003cInsets bottom\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" \u003c/Pane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"49.0\" fitWidth\u003d\"51.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" styleClass\u003d\"display-picture\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"shishirbychapur":39}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.control.TextArea?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.layout.Pane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: #202329;\" xmlns\u003d\"http://javafx.com/javafx/11.0.2\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" \u003cPane fx:id\u003d\"chatHeader\" prefHeight\u003d\"50.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: #2e333d;\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" \u003cLabel layoutX\u003d\"163.0\" layoutY\u003d\"9.0\" prefHeight\u003d\"32.0\" prefWidth\u003d\"75.0\" text\u003d\"JARVIS\" textFill\u003d\"WHITE\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" \u003cFont name\u003d\"Impact\" size\u003d\"25.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" \u003c/Pane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" \u003cTextArea id\u003d\"textField\" fx:id\u003d\"textField\" layoutX\u003d\"14.0\" layoutY\u003d\"536.0\" onKeyPressed\u003d\"#onEnter\" prefHeight\u003d\"50.0\" prefWidth\u003d\"372.0\" promptText\u003d\"Enter Something!\" styleClass\u003d\"text-area\" stylesheets\u003d\"@../css/Application.css\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" \u003cFont name\u003d\"Bell MT Bold\" size\u003d\"17.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" \u003c/font\u003e\u003c/TextArea\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" \u003cImageView fx:id\u003d\"sendButton\" fitHeight\u003d\"39.0\" fitWidth\u003d\"38.0\" layoutX\u003d\"338.0\" layoutY\u003d\"542.0\" onMousePressed\u003d\"#onClick\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" \u003cimage\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" \u003cImage url\u003d\"@../images/send.png\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" \u003c/image\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" \u003cScrollPane fx:id\u003d\"dialogContainer\" layoutX\u003d\"6.0\" layoutY\u003d\"60.0\" prefHeight\u003d\"466.0\" prefWidth\u003d\"387.0\" stylesheets\u003d\"@../css/Application.css\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" \u003cVBox fx:id\u003d\"dialogBox\" prefHeight\u003d\"462.0\" prefWidth\u003d\"383.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" \u003c/content\u003e\u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"shishirbychapur":38}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.AddCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.IncorrectCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" public void list_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"list xx\");","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" public void list_correctCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof ListCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" public void exit_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"bye \");","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" void exit_correctCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof ExitCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" void todo_invalidTask_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"todo \");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" void todo_validTask_correctCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"todo xxx\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof AddCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" void deadline_validTaskAndInvalidDate_correctCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"deadline xxx /by \");","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" void deadline_invalidDeadline_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"deadline \");","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" void deadline_missingTaskAndValidDate_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"deadline /by 21/06/02 1200\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" void deadline_validTaskAndInvalidDate_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"deadline xx /by lorem\");","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" void deadline_validDeadline_correctCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"deadline xx /by 21/08/02 1900\");","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof AddCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"shishirbychapur"},"content":" void event_invalidEvent_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"event\");","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"shishirbychapur"},"content":" void event_validTaskAndInvalidDate_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"event xx\");","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"shishirbychapur"},"content":" void event_validTaskAndInvalidTo_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"event xx /from 21/05/02 1100\");","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"shishirbychapur"},"content":" void event_validEvent_correctCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"event xx /from 21/05/02 1100 /to 21/05/02 1200\");","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof AddCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"shishirbychapur"},"content":" void event_invalidTaskAndValidDates_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"event /from 21/05/02 1100 /to 21/05/02 1200\");","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"shishirbychapur"},"content":" void event_validTaskAndInvalidFromAndInvalidTo_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"event meet friends /from xx /to yy\");","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"shishirbychapur"},"content":" void event_validTaskAndInvalidRange_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"event meet friends /from 21/05/02 1100 /to 21/05/02 1000\");","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"shishirbychapur":123}},{"path":"src/test/java/duke/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" public void file_fileDoesntExist_createNewFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"data/test.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" assertFalse(file.exists());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(file.exists());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" public void file_folderDoesntExist_createNewFolder() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"testdata/test.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" File folder \u003d new File(\"testdata\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" assertFalse(folder.isDirectory());","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(folder.exists());","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" public void file_readFile_correctTodo() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"testdata/tasks.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" Task t \u003d storage.stringToTask(\"T | O | do unit test\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(t instanceof Todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" public void file_readFile_correctDeadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"testdata/tasks.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" Task t \u003d storage.stringToTask(\"D | O | study unit test | Aug 15 2023 02:30 PM\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(t instanceof Deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" public void file_readFile_correctEvent() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"testdata/tasks.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":" Task t \u003d storage.stringToTask(\"E | O | give CS2103T test | Aug 27 2023 07:00 PM - Aug 27 2023 08:00 PM\");","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(t instanceof Event);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" public void file_readFile_incorrectEvent() {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"testdata/tasks.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":" assertThrows(DukeException.class, () -\u003e storage.stringToTask(\"E | XCP | | Aug 27 2023 07:00 PM - Aug 27 2023 08:00 PM\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"shishirbychapur"},"content":" public void file_readFile_incorrectTodo() {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"testdata/tasks.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"shishirbychapur"},"content":" assertThrows(DukeException.class, () -\u003e storage.stringToTask(\"T | XYZ |\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"shishirbychapur"},"content":" public void file_readFile_incorrectDeadline() {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"testdata/tasks.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"shishirbychapur"},"content":" assertThrows(DukeException.class, () -\u003e storage.stringToTask(\"D | 0 | XYZZ\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"shishirbychapur":96}},{"path":"src/test/java/duke/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" public void toString_correctOutput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime by \u003d LocalDateTime.parse(\"21/08/02 1900\", formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d new Deadline(\"Finish HW\", by, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" task.completeTask(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" assertEquals(\"[Deadline] [X] Finish HW\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" \" (by: Aug 21 2002 07:00 PM)\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" public void toFile_correctOutput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime by \u003d LocalDateTime.parse(\"21/08/02 1900\", formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d new Deadline(\"Finish HW\", by, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" assertEquals(\"D | O | Finish HW | \" +","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" \"Aug 21 2002 07:00 PM\", task.toFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"shishirbychapur":29}},{"path":"src/test/java/duke/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"public class EventTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" public void toString_correctOutput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime from \u003d LocalDateTime.parse(\"21/08/02 1900\", formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime to \u003d LocalDateTime.parse(\"21/08/02 2000\", formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d new Event(\"Group Meeting\", from, to, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" task.completeTask(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" assertEquals(\"[Event] [X] Group Meeting\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" \" (from: Aug 21 2002 07:00 PM to: Aug 21 2002 08:00 PM)\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" public void toFile_correctOutput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime from \u003d LocalDateTime.parse(\"21/08/02 1900\", formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime to \u003d LocalDateTime.parse(\"21/08/02 2000\", formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d new Event(\"Group Meeting\", from, to, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" assertEquals(\"E | O | Group Meeting | \" +","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" \"Aug 21 2002 07:00 PM - Aug 21 2002 08:00 PM\", task.toFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"shishirbychapur":31}},{"path":"src/test/java/duke/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" public void toString_correctOutput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d new Todo(\"Play Basketball\", false);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" task.completeTask(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" assertEquals(\"[Todo] [X] Play Basketball\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" public void toFile_correctOutput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d new Todo(\"Drive Car\", false);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" assertEquals(\"T | O | Drive Car\", task.toFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"shishirbychapur":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"deadline study CS2100 /by 28/08/23 1800","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"todo drive car","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"event play badminton /from 29/08/23 1500 /to 29/08/23 1800","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"unmark 1","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"delete 2","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"shishirbychapur":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":"shishirbychapur"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"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":{"shishirbychapur":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-28"},{"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":"shishirbychapur"},"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-28"},{"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":{"shishirbychapur":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":"shishirbychapur"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"javafx {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" version \u003d \"11.0.2\"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027, \u0027javafx.media\u0027 ]","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":"mainClassName \u003d \u0027duke.Duke\u0027","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"shishirbychapur":14,"-":41}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"T | O | drive car","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"D | O | study | Aug 15 2023 02:30 PM","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"E | X | submit week 3 | Aug 21 2002 12:00 PM - Aug 22 2002 01:00 PM","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"shishirbychapur":3}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Main;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Duke Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" /** Task List of all tasks. */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" /** Storage of all tasks. */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" /** UI for chatting and interacting with the bot. */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" private Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the Duke Object.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" * @param filePath Path of the text file with stored tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" this.tasks \u003d new TaskList(this.storage.readData());","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the Duke Object with the default file path","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" * being data/tasks.txt.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" public Duke() {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" this.storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" this.tasks \u003d new TaskList(this.storage.readData());","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" * Initialises Jarvis","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" * @param args Input args.","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" return command.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" } catch (DukeException exc) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" return exc.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"shishirbychapur":66,"-":3}},{"path":"src/main/java/duke/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" * Represents the AddCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for addition operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" /** Description of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" /** Due date of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" private LocalDateTime till;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" /** Start date of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" /** Type of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" private String type;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the AddCommand Object.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" public AddCommand(String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" this.type \u003d \"todo\";","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the AddCommand Object.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" public AddCommand(String description, LocalDateTime till) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" this.till \u003d till;","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" this.type \u003d \"deadline\";","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the AddCommand Object.","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" * @param from Start date of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" * @param till End date of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" public AddCommand(String description, LocalDateTime from, LocalDateTime till) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" this.till \u003d till;","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" this.type \u003d \"event\";","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" * Executes the required command.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException Thrown if task type is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":" Task task;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":" switch (this.type) {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" case \"todo\":","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" task \u003d new Todo(this.description, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":" task \u003d new Deadline(this.description, this.till, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"shishirbychapur"},"content":" case \"event\":","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"shishirbychapur"},"content":" task \u003d new Event(this.description, this.from, this.till, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"shishirbychapur"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"Invalid task type!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"shishirbychapur"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"shishirbychapur"},"content":" storage.writeData(tasks.getAllTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"shishirbychapur"},"content":" return ui.showAdd(tasks.size(), task);","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"shishirbychapur"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"shishirbychapur"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":102}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Abstract Command Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" * Executes the required command.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException Throws DukeException on invalid input.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":28}},{"path":"src/main/java/duke/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" * Represents the DeleteCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for handling delete operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" /** Index of respective task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the DeleteCommand Object.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" * @param index Index of the respective task.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" * Executes the required command.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException Throws DukeException on invalid input.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d tasks.getTask(this.index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" tasks.delete(this.index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" storage.writeData(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" return ui.showDelete(this.index, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":51}},{"path":"src/main/java/duke/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" * Represents the ExitCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for handling exit operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" * Executes the respective command.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" return ui.leave();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":34}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" * Represents the FindCommand Class","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for handling the find operation.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" /** String entered by user. */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" private String find;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the FindCommand object.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * @param find Keyword to find.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" public FindCommand(String find) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" this.find \u003d find;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" * Executes the respective command.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" return ui.showFind(this.find) + \"\\n\" + tasks.filterByName(this.find);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"shishirbychapur":46}},{"path":"src/main/java/duke/commands/IncorrectCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * Represents the IncorrectCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for handling incorrect operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"public class IncorrectCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" /** Description of incorrect operation. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" private String message;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the IncorrectCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" * @param message Description of the incorrect operation.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" public IncorrectCommand(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" this.message \u003d message;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" * Executes the required command.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException Throws DukeException on invalid input.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(this.message);","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":48}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" * Represents the ListCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for handling display list operation.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" * Executes the required command.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" return ui.showList(tasks.size()) + \"\\n\" + tasks.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":34}},{"path":"src/main/java/duke/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * Represents the MarkCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for handling mark/unmark operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" /** Index of task to be marked. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" /** Type of task to be marked. */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" private boolean isMark;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the IncorrectCommand Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" * @param index Index of task to be marked.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" * @param type Type of task to be marked.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" public MarkCommand(int index, String type) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" this.isMark \u003d type.equals(\"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" * Executes the required command.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" * @param ui Ui for interacting with the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" * @param storage Storage of the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException Throws DukeException on invalid input.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" tasks.changeStatus(index - 1, isMark);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" storage.writeData(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" return ui.showStatus(index, tasks.getTask(index - 1), isMark);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":54}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":" * Represents the DukeException Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" /** Exception message. */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" private String message;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" * The constructor.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" * @param message The description of the error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" this.message \u003d message;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation of the exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" * @return String representation of the exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" return this.message;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"shishirbychapur":31}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.AddCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.DeleteCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.IncorrectCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.MarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Parser Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for parsing user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" * Returns a command based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" * @param fullCommand String representation of user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" * @return Command based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" public static Command parse(String fullCommand) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" String[] split \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" switch(split[0]) {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" case \"bye\":","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" c \u003d validateCommand(split, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" case \"list\":","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" c \u003d validateCommand(split, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" case \"mark\":","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" c \u003d validateIndex(split, true);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" case \"todo\":","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" case \"event\":","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" c \u003d validateTask(split);","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" case \"delete\":","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" c \u003d validateIndex(split, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" c \u003d validateFind(split);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" c \u003d new IncorrectCommand(\"I\u0027m sorry, I couldn\u0027t understand that. Please try again!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" return c;","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" private static Command validateIndex(String[] split, boolean flag) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" // Check if mark is receiving any input or receiving extra input","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" if (split.length !\u003d 2 || split[1].isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a valid mark command!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":" // Check if mark is not receiving a number.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" index \u003d Integer.parseInt(split[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" } catch (NumberFormatException exp) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"I cannot mark a character! Please enter a number.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" // Check if index is greater than 0.","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" if (index \u003c\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a number greater than 0!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":" return flag ? new MarkCommand(index, split[0]) : new DeleteCommand(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"shishirbychapur"},"content":" private static Command validateTask(String[] split) {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"shishirbychapur"},"content":" if (split.length \u003d\u003d 1 || split[1].isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a valid task.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"shishirbychapur"},"content":" if (split[0].equals(\"deadline\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"shishirbychapur"},"content":" if (!split[1].contains(\" /by \")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a /by command to depict the deadline.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"shishirbychapur"},"content":" String[] task \u003d split[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"shishirbychapur"},"content":" if (task.length \u003c\u003d 1 || task[1].isBlank() || task[0].isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a valid task and/or deadline.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"shishirbychapur"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"shishirbychapur"},"content":" return new AddCommand(task[0], LocalDateTime.parse(task[1], formatter));","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"shishirbychapur"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter the date \u0026 time in a valid format! (DD/MM/YY HHMM)\");","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"shishirbychapur"},"content":" } else if (split[0].equals(\"event\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"shishirbychapur"},"content":" if (!split[1].contains(\" /from \")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a /from command to depict the deadline.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"shishirbychapur"},"content":" String[] task \u003d split[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"shishirbychapur"},"content":" // Check if task entered is empty","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"shishirbychapur"},"content":" if (task.length \u003c\u003d 1 || task[1].isBlank() || task[0].isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a valid task.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"shishirbychapur"},"content":" // Check if /to is present","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"shishirbychapur"},"content":" if (!task[1].contains(\" /to \")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"There is no /to command present. Please try again.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"shishirbychapur"},"content":" String[] to \u003d task[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"shishirbychapur"},"content":" if (to.length \u003c\u003d 1 || to[1].isBlank() || to[0].isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter valid to \u0026 from dates\");","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"shishirbychapur"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime from \u003d LocalDateTime.parse(to[0], formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime till \u003d LocalDateTime.parse(to[1], formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"shishirbychapur"},"content":" if (from.isAfter(till) || from.isEqual(till)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please ensure that the date range is valid!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"shishirbychapur"},"content":" return new AddCommand(task[0], from, till);","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"shishirbychapur"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter the date \u0026 time in a valid format! (DD/MM/YY HHMM)\");","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"shishirbychapur"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"shishirbychapur"},"content":" return new AddCommand(split[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"shishirbychapur"},"content":" private static Command validateCommand(String[] split, boolean flag) {","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"shishirbychapur"},"content":" if (split.length !\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a valid command!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"shishirbychapur"},"content":" return flag ? new ExitCommand() : new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"shishirbychapur"},"content":" private static Command validateFind(String[] split) {","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"shishirbychapur"},"content":" if (split.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"shishirbychapur"},"content":" return new IncorrectCommand(\"Please enter a valid command!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"shishirbychapur"},"content":" return new FindCommand(split[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":165}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Storage Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for File I/O Operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" /** Folder containing the required text file. */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" private File folder;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" /** File containing the list of all tasks. */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" private File file;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" * Constructs a file and folder with the given path.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" * @param filePath Path of required text file.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" String[] folder \u003d filePath.split(\"/\");","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" this.folder \u003d new File(folder[0]);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" // Directory doesn\u0027t exist","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" if (!this.folder.isDirectory()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" this.createDirectory();","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" // File doesn\u0027t exist","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" if (!this.file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" this.createFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" /** Creates a new folder. */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" public void createDirectory() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" this.folder.mkdir();","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" /** Creates a new file. */","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" public void createFile() {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" this.file.createNewFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" } catch (IOException err) {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" System.out.println(err);","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":" * Returns the list of all tasks by reading from the text file.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" * @return List of all tasks present in the text file.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" public ArrayList\u003cTask\u003e readData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" ArrayList\u003cTask\u003e data \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" int lineNumber \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":" Scanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" lineNumber++;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d this.stringToTask(scanner.nextLine());","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":" data.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"shishirbychapur"},"content":" } catch (FileNotFoundException exc) {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"shishirbychapur"},"content":" System.out.println(\"The file doesn\u0027t exist yet, but will be created\"","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"shishirbychapur"},"content":" + \" under the path (\" + this.file.getPath() + \")\");","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"shishirbychapur"},"content":" } catch (DukeException exc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"shishirbychapur"},"content":" System.out.println(\"Incorrect input has been detected from the file \"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"shishirbychapur"},"content":" + \"stored at the path (\" + this.file.getPath() + \") at line number \" + lineNumber + \".\");","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"shishirbychapur"},"content":" System.out.println(\"Error Message: \" + exc);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"shishirbychapur"},"content":" System.out.println(\"The invalid task will be overwritten and removed.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"shishirbychapur"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"shishirbychapur"},"content":" // To remove the invalid input.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"shishirbychapur"},"content":" this.writeData(data);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"shishirbychapur"},"content":" return data;","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"shishirbychapur"},"content":" * Updates the text file with the given list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of all tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"shishirbychapur"},"content":" public void writeData(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"shishirbychapur"},"content":" FileWriter writer \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"shishirbychapur"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"shishirbychapur"},"content":" writer.write(task.toFile() + System.lineSeparator());","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"shishirbychapur"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"shishirbychapur"},"content":" } catch (IOException exc) {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"shishirbychapur"},"content":" System.out.println(exc);","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"shishirbychapur"},"content":" * Converts the given string into a task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"shishirbychapur"},"content":" * @param line String representation of the task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"shishirbychapur"},"content":" * @return Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException thrown on invalid input.","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"shishirbychapur"},"content":" public Task stringToTask(String line) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"shishirbychapur"},"content":" String[] split \u003d line.split(\" \\\\| \", 4);","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"shishirbychapur"},"content":" // Corrupted File","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"shishirbychapur"},"content":" if (split.length \u003c 3) {","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"Invalid task format detected!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"shishirbychapur"},"content":" String type \u003d split[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"shishirbychapur"},"content":" String status \u003d split[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"shishirbychapur"},"content":" String action \u003d split[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"shishirbychapur"},"content":" // Check status is valid","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"shishirbychapur"},"content":" if (!status.equals(\"X\") \u0026\u0026 !status.equals(\"O\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"Invalid task status detected!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"shishirbychapur"},"content":" // Check action is valid","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"shishirbychapur"},"content":" if (action.isBlank()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"Invalid description of task detected!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"shishirbychapur"},"content":" Task task;","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"shishirbychapur"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\");","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"shishirbychapur"},"content":" switch(type) {","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"shishirbychapur"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"shishirbychapur"},"content":" task \u003d new Todo(action, status.equals(\"X\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"shishirbychapur"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"shishirbychapur"},"content":" task \u003d new Deadline(action, LocalDateTime.parse(split[3], formatter), status.equals(\"X\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"shishirbychapur"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"shishirbychapur"},"content":" String[] interval \u003d split[3].split(\" - \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"shishirbychapur"},"content":" if (interval.length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"Invalid range of task detected!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"shishirbychapur"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"shishirbychapur"},"content":" task \u003d new Event(action, LocalDateTime.parse(interval[0], formatter),","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime.parse(interval[1], formatter), status.equals(\"X\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"shishirbychapur"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"shishirbychapur"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":163,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"Invalid type of task detected!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"shishirbychapur"},"content":" } catch (DateTimeParseException exc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"Invalid date detected!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"shishirbychapur"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":171,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"shishirbychapur":172}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Deadline Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" **/","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" /** Deadline of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the deadline class.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * @param deadline Deadline of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * @param status Status of completion.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" public Deadline(String description, LocalDateTime deadline, boolean status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" super(description, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" * @return String representation of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" return \"[Deadline] \" + super.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" + \" (by: \" + this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation of the deadline task in file format.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" * @return String representation of the deadline task in file format.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" public String toFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" return \"D\" + super.toFile() + \" | \" + this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"shishirbychapur":45}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Event Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" /** Start date and time of the event. */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" /** End date and time of the event. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the event class.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" * @param status Status of completion.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" * @param from Start date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" * @param to End date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to, boolean status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" super(description, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" * @return String representation of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" return \"[Event] \" + super.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" + \" (from: \" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"))","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" + \" to: \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation of the event in file format.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" * @return String representation of the event in file format.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" public String toFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" return \"E\" + super.toFile() + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"))","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" + \" - \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"shishirbychapur":53}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Abstract Task Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":" * Has three subclasses Event, Todo and Deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" /** Description of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" private String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" /** Completion status of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" private boolean completed;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the task class.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * @param action Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" public Task(String action) {","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" this.description \u003d action;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" this.completed \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the task class.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" * @param action Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" * @param status Status of completion of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" public Task(String action, boolean status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" this.description \u003d action;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" this.completed \u003d status;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" * @return Required string representation.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" return \"[\" + (this.completed ? \"X\" : \" \") + \"] \" + this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation in the file format.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" * @return Required string representation in file format.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" public String toFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" return \" | \" + (this.completed ? \"X\" : \"O\") + \" | \" + this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" * Sets the completion status of the task to given boolean value.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" * @param isMark Given boolean value.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" public void completeTask(boolean isMark) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" this.completed \u003d isMark;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" * Returns the status of a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" * @return Status of completion.","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" public boolean isCompleted() {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" return this.completed;","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" public boolean contains(String name) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" return this.description.contains(name);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"shishirbychapur":72}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" * Represents the TaskList Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" /** List of all tasks */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the TaskList Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * @param tasks List of initial tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" * Adds a new task to the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" * @param newTask New task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" public void add(Task newTask) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" this.tasks.add(newTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" * Marks the task with the given index.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" * @param index Index of the task to be marked.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" * @param isMark Mark if true, Unmark if false.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException Exception thrown upon invalid index.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" public void changeStatus(int index, boolean isMark) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" if (index \u003e\u003d this.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"I\u0027m unable to perform the mark/unmark operation due to an invalid index!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" if (this.tasks.get(index).isCompleted() \u003d\u003d isMark) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"I\u0027m unable to perform the mark/unmark operation because the task\"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" + \" is already marked/unmarked!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" this.tasks.get(index).completeTask(isMark);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" * Deletes the task with the given index.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" * @param index Index of the task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" * @throws DukeException Exception thrown on invalid index.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" public void delete(int index) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" if (index \u003e this.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" throw new DukeException(\"I\u0027m unable to perform the delete operation due to an invalid index!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" * Returns the size of the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" * @return Size of the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" public int size() {","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" * Returns the task at the given index.","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" * @param index Index of required task.","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" * @return Required task.","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":" * Returns the list of all the tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":" * @return List of all tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"shishirbychapur"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"shishirbychapur"},"content":" return this.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"shishirbychapur"},"content":" * Filters and prints the list of all the tasks matching with the given keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"shishirbychapur"},"content":" * @param name Given keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"shishirbychapur"},"content":" public String filterByName(String name) {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"shishirbychapur"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"shishirbychapur"},"content":" StringBuilder filteredString \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"shishirbychapur"},"content":" for (Task t : this.tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"shishirbychapur"},"content":" if (t.contains(name)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"shishirbychapur"},"content":" filteredString.append(count).append(\") \").append(t.toString()).append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"shishirbychapur"},"content":" return filteredString.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"shishirbychapur"},"content":" * Prints the list of all the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"shishirbychapur"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"shishirbychapur"},"content":" StringBuilder taskString \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"shishirbychapur"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"shishirbychapur"},"content":" taskString.append(i + 1).append(\") \").append(tasks.get(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"shishirbychapur"},"content":" return taskString.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":114}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Todo task class.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" * Constructs a new Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" * @param status The status of completion.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" public Todo(String description, boolean status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" super(description, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation of the todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * @return String representation of the todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" return \"[Todo] \" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" * Returns the string representation in the file format.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" * @return String representation.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" public String toFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" return \"T\" + super.toFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"shishirbychapur":36}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.layout.Pane;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * The DialogBox Class.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for formatting the messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" private Pane messageOutline;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" * Constructs the DialogBox.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" * @param text User\u0027s message.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" * @param img User\u0027s profile picture.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" * @param isUser User\u0027s type.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" private DialogBox(String text, Image img, boolean isUser) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" dialog.setWrapText(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" dialog.setPrefWidth(275);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" messageOutline.setPrefWidth(280);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" messageOutline.prefHeightProperty().bind(dialog.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" messageOutline.getStyleClass().clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" if (isUser) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" messageOutline.getStyleClass().add(\"blue-background\");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" messageOutline.getStyleClass().add(\"gray-background\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" displayPicture.getStyleClass().add(\"display-picture\");","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" return new DialogBox(text, img, true);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" var db \u003d new DialogBox(text, img, false);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"shishirbychapur":84}},{"path":"src/main/java/duke/ui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" stage.setTitle(\"Jarvis, Your Personal Task Manager!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"shishirbychapur":32}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"//import javafx.application.Platform;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.control.TextArea;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.input.KeyCode;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.input.KeyEvent;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" * MainWindow Class.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for the Main GUI Interface of Jarvis","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" private ImageView sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" private TextArea textField;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" private ScrollPane dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" private VBox dialogBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/tony.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" private Image jarvis \u003d new Image(this.getClass().getResourceAsStream(\"/images/duke.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" /** Initialises the container for holding messages. */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" this.dialogContainer.setVvalue(1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" this.dialogBox.heightProperty().addListener((observable) -\u003e this.dialogContainer.setVvalue(1.0));","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" this.dialogContainer.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" this.dialogContainer.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" this.dialogBox.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" this.dialogBox.getChildren().add(DialogBox.getDukeDialog(\"Hi!\", this.jarvis));","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" * Handles the event where the user presses the \"Send\" button.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" public void onClick() {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" Stage mainWindow \u003d (Stage) this.textField.getScene().getWindow();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" String input \u003d this.textField.getText().replace(\"\\n\", \"\");;","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" String response \u003d this.duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" textField.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" dialogBox.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" DialogBox.getUserDialog(input, this.user),","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" DialogBox.getDukeDialog(response, this.jarvis)","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" // if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" // Platform.exit();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" // }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" * Handles the event where the user presses the \"Enter\" key.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" * @param event Event triggering the function call.","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" public void onEnter(KeyEvent event) {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" if (event.getCode() \u003d\u003d KeyCode.ENTER) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" this.onClick();","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" * Sets duke object to give object.","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":" * @param d Duke Object responsible for interaction with user.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":" this.duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"shishirbychapur":84}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":" * Represents the Ui Class.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":" * Responsible for returning commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" * @author Shishir","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" /** Returns a greeting message. */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" public String greet() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" return \"Greetings, I am Jarvis! How may I assist you today?\";","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" /** Returns a farewell message. */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" public String leave() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" return \"I shall now take my leave. Farewell!\";","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" * Returns an acknowledgment message on successful addition to the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" * @param size Length of the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" * @param task Newly added task.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" public String showAdd(int size, Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" return \"Added the following task to the list.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" + size + \") \" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" + \"You currently have \" + size + \" tasks in your list.\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" * Returns an acknowledgment message on a successful mark/unmark.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" * @param index Index of the newly marked/unmarked task.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" * @param task Newly marked/unmarked task.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" * @param isMark Mark if true, Unmark if false.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" public String showStatus(int index, Task task, boolean isMark) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" String message;","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" if (isMark) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" message \u003d \"The following task is marked as complete:\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" message \u003d \"The following task has been unmarked:\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" return message + index + \") \" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" + \"Is there anything else I can assist you with?\";","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" * Returns an acknowledgment message on a successful deletion of a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" * @param index Index of the newly deleted task.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" * @param task Newly deleted task.","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" public String showDelete(int index, Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" return \"The following task has been removed:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" + index + \") \" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" + \"Is there anything else I can assist you with?\";","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":" * Returns an acknowledgment message on request to display all the tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" * @param size Size of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" public String showList(int size) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" return size \u003d\u003d 0","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" ? \"Your task list is empty! Add a task to view it here.\"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":" : \"Tasks displayed. Your guidance is requested.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" * Returns out the list of tasks which match with the keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" * @param word Entered keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":" public String showFind(String word) {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" return \"Finding tasks that contain the entered keyword (\" + word + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"shishirbychapur":78}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.layout.Pane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefHeight\u003d\"79.0\" prefWidth\u003d\"360.0\" stylesheets\u003d\"@../css/Application.css\" 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-05"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" \u003cPane fx:id\u003d\"messageOutline\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"39.0\" prefWidth\u003d\"306.0\" styleClass\u003d\"gray-background\" stylesheets\u003d\"@../css/Application.css\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" \u003cLabel fx:id\u003d\"dialog\" layoutX\u003d\"14.0\" layoutY\u003d\"14.0\" maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"0.0\" styleClass\u003d\"message-font\" stylesheets\u003d\"@../css/Application.css\" text\u003d\"Label\" textFill\u003d\"WHITE\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" \u003c/opaqueInsets\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" \u003cFont name\u003d\"Segoe UI Bold\" size\u003d\"16.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" \u003cInsets bottom\u003d\"20.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" \u003c/Pane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"49.0\" fitWidth\u003d\"51.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" styleClass\u003d\"display-picture\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"shishirbychapur":39}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.control.TextArea?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.layout.Pane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: #202329;\" 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-05"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" \u003cPane fx:id\u003d\"chatHeader\" prefHeight\u003d\"50.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: #2e333d;\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" \u003cLabel layoutX\u003d\"162.0\" layoutY\u003d\"7.0\" prefHeight\u003d\"36.0\" prefWidth\u003d\"77.0\" styleClass\u003d\"header\" stylesheets\u003d\"@../css/Application.css\" text\u003d\"Jarvis\" textFill\u003d\"WHITE\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" \u003cFont name\u003d\"Segoe UI Bold\" size\u003d\"26.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" \u003c/Pane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" \u003cTextArea id\u003d\"textField\" fx:id\u003d\"textField\" layoutX\u003d\"14.0\" layoutY\u003d\"535.0\" onKeyPressed\u003d\"#onEnter\" prefHeight\u003d\"38.0\" prefWidth\u003d\"372.0\" promptText\u003d\"Enter Something!\" styleClass\u003d\"text-area\" stylesheets\u003d\"@../css/Application.css\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" \u003cFont name\u003d\"Segoe UI\" size\u003d\"17.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" \u003c/font\u003e\u003c/TextArea\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" \u003cImageView fx:id\u003d\"sendButton\" fitHeight\u003d\"39.0\" fitWidth\u003d\"38.0\" layoutX\u003d\"338.0\" layoutY\u003d\"542.0\" onMousePressed\u003d\"#onClick\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" \u003cimage\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" \u003cImage url\u003d\"@../images/send.png\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" \u003c/image\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" \u003cScrollPane fx:id\u003d\"dialogContainer\" layoutX\u003d\"14.0\" layoutY\u003d\"53.0\" prefHeight\u003d\"476.0\" prefWidth\u003d\"379.0\" stylesheets\u003d\"@../css/Application.css\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" \u003cVBox fx:id\u003d\"dialogBox\" prefHeight\u003d\"314.0\" prefWidth\u003d\"324.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" \u003c/content\u003e\u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"shishirbychapur":38}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.AddCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.IncorrectCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" public void list_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"list xx\");","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" public void list_correctCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof ListCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" public void exit_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"bye \");","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" void exit_correctCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof ExitCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" void todo_invalidTask_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"todo \");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" void todo_validTask_correctCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"todo xxx\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof AddCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" void deadline_validTaskAndInvalidDate_correctCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"deadline xxx /by \");","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" void deadline_invalidDeadline_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"deadline \");","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" void deadline_missingTaskAndValidDate_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"deadline /by 21/06/02 1200\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" void deadline_validTaskAndInvalidDate_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"deadline xx /by lorem\");","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" void deadline_validDeadline_correctCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"deadline xx /by 21/08/02 1900\");","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof AddCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"shishirbychapur"},"content":" void event_invalidEvent_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"event\");","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"shishirbychapur"},"content":" void event_validTaskAndInvalidDate_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"event xx\");","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"shishirbychapur"},"content":" void event_validTaskAndInvalidTo_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"event xx /from 21/05/02 1100\");","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"shishirbychapur"},"content":" void event_validEvent_correctCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"event xx /from 21/05/02 1100 /to 21/05/02 1200\");","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof AddCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"shishirbychapur"},"content":" void event_invalidTaskAndValidDates_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"event /from 21/05/02 1100 /to 21/05/02 1200\");","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"shishirbychapur"},"content":" void event_validTaskAndInvalidFromAndInvalidTo_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"event meet friends /from xx /to yy\");","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"shishirbychapur"},"content":" void event_validTaskAndInvalidRange_incorrectCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"shishirbychapur"},"content":" Command c \u003d Parser.parse(\"event meet friends /from 21/05/02 1100 /to 21/05/02 1000\");","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(c instanceof IncorrectCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"shishirbychapur":123}},{"path":"src/test/java/duke/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" public void file_fileDoesntExist_createNewFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"data/test.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" assertFalse(file.exists());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(file.exists());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":" public void file_folderDoesntExist_createNewFolder() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"testdata/test.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"shishirbychapur"},"content":" File folder \u003d new File(\"testdata\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"shishirbychapur"},"content":" assertFalse(folder.isDirectory());","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(folder.exists());","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"shishirbychapur"},"content":" public void file_readFile_correctTodo() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"testdata/tasks.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"shishirbychapur"},"content":" Task t \u003d storage.stringToTask(\"T | O | do unit test\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(t instanceof Todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"shishirbychapur"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"shishirbychapur"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"shishirbychapur"},"content":" public void file_readFile_correctDeadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"testdata/tasks.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"shishirbychapur"},"content":" Task t \u003d storage.stringToTask(\"D | O | study unit test | Aug 15 2023 02:30 PM\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(t instanceof Deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"shishirbychapur"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"shishirbychapur"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"shishirbychapur"},"content":" public void file_readFile_correctEvent() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"testdata/tasks.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"shishirbychapur"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"shishirbychapur"},"content":" Task t \u003d storage.stringToTask(\"E | O | give CS2103T test | Aug 27 2023 07:00 PM - Aug 27 2023 08:00 PM\");","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"shishirbychapur"},"content":" assertTrue(t instanceof Event);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"shishirbychapur"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"shishirbychapur"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"shishirbychapur"},"content":" public void file_readFile_incorrectEvent() {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"testdata/tasks.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"shishirbychapur"},"content":" assertThrows(DukeException.class, () -\u003e storage.stringToTask(\"E | XCP | | Aug 27 2023 07:00 PM - Aug 27 2023 08:00 PM\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"shishirbychapur"},"content":" public void file_readFile_incorrectTodo() {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"testdata/tasks.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"shishirbychapur"},"content":" assertThrows(DukeException.class, () -\u003e storage.stringToTask(\"T | XYZ |\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"shishirbychapur"},"content":" public void file_readFile_incorrectDeadline() {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"shishirbychapur"},"content":" String path \u003d \"testdata/tasks.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"shishirbychapur"},"content":" Storage storage \u003d new Storage(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"shishirbychapur"},"content":" assertThrows(DukeException.class, () -\u003e storage.stringToTask(\"D | 0 | XYZZ\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"shishirbychapur":96}},{"path":"src/test/java/duke/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" public void toString_correctOutput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime by \u003d LocalDateTime.parse(\"21/08/02 1900\", formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d new Deadline(\"Finish HW\", by, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" task.completeTask(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" assertEquals(\"[Deadline] [X] Finish HW\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" \" (by: Aug 21 2002 07:00 PM)\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" public void toFile_correctOutput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime by \u003d LocalDateTime.parse(\"21/08/02 1900\", formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d new Deadline(\"Finish HW\", by, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" assertEquals(\"D | O | Finish HW | \" +","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" \"Aug 21 2002 07:00 PM\", task.toFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"shishirbychapur":29}},{"path":"src/test/java/duke/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":"public class EventTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" public void toString_correctOutput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime from \u003d LocalDateTime.parse(\"21/08/02 1900\", formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime to \u003d LocalDateTime.parse(\"21/08/02 2000\", formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d new Event(\"Group Meeting\", from, to, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" task.completeTask(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" assertEquals(\"[Event] [X] Group Meeting\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" \" (from: Aug 21 2002 07:00 PM to: Aug 21 2002 08:00 PM)\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"shishirbychapur"},"content":" public void toFile_correctOutput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"shishirbychapur"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime from \u003d LocalDateTime.parse(\"21/08/02 1900\", formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"shishirbychapur"},"content":" LocalDateTime to \u003d LocalDateTime.parse(\"21/08/02 2000\", formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d new Event(\"Group Meeting\", from, to, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"shishirbychapur"},"content":" assertEquals(\"E | O | Group Meeting | \" +","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"shishirbychapur"},"content":" \"Aug 21 2002 07:00 PM - Aug 21 2002 08:00 PM\", task.toFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"shishirbychapur":31}},{"path":"src/test/java/duke/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"shishirbychapur"},"content":" public void toString_correctOutput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d new Todo(\"Play Basketball\", false);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"shishirbychapur"},"content":" task.completeTask(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"shishirbychapur"},"content":" assertEquals(\"[Todo] [X] Play Basketball\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"shishirbychapur"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"shishirbychapur"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"shishirbychapur"},"content":" public void toFile_correctOutput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"shishirbychapur"},"content":" Task task \u003d new Todo(\"Drive Car\", false);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"shishirbychapur"},"content":" assertEquals(\"T | O | Drive Car\", task.toFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"shishirbychapur"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"shishirbychapur"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"shishirbychapur":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"shishirbychapur"},"content":"deadline study CS2100 /by 28/08/23 1800","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"shishirbychapur"},"content":"todo drive car","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"shishirbychapur"},"content":"event play badminton /from 29/08/23 1500 /to 29/08/23 1800","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"shishirbychapur"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"shishirbychapur"},"content":"unmark 1","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"shishirbychapur"},"content":"delete 2","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"shishirbychapur"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"shishirbychapur":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":"shishirbychapur"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"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":{"shishirbychapur":1,"-":20}}] diff --git a/shishirbychapur_ip_master/commits.json b/shishirbychapur_ip_master/commits.json index 7befee39..ca35d1c0 100644 --- a/shishirbychapur_ip_master/commits.json +++ b/shishirbychapur_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"shishirbychapur":[{"date":"2023-08-20","commitResults":[{"hash":"ea6536ef35c17abe2b5af2b2cc14ea0682e5e421","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"edfdabf725e35e5810591b05f348ce1aa8d35134","isMergeCommit":false,"messageTitle":"Add Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":11}}},{"hash":"2510c57fae75d394e967b8e4af5182b985dc01f3","isMergeCommit":false,"messageTitle":"Add/List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":4}}}]},{"date":"2023-08-21","commitResults":[{"hash":"7872e1dc2339c86d88abe6c222c2062dde1eb093","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":4}}}]},{"date":"2023-08-22","commitResults":[{"hash":"da0057efd58a0d9832f6cf67dfe370d6a85ef59d","isMergeCommit":false,"messageTitle":"ToDo, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":122,"deletions":16}}},{"hash":"5aa47031969160b0942025990de843021d8d6c15","isMergeCommit":false,"messageTitle":"Setup Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":9,"deletions":10}}}]},{"date":"2023-08-24","commitResults":[{"hash":"bb80dc2722a52e326b9d35112c58599580fa54a8","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":167,"deletions":153}}},{"hash":"c90660e6631be95a44f759ec2c5b35509e400ce7","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":3}}},{"hash":"d8252f80dcb00e95abc64fec0ea065fc7fdcd393","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"b5d3b2ec95c34bbb2141b386258b13abf400e5ed","isMergeCommit":false,"messageTitle":"Add File Compatibility","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":186,"deletions":1}}},{"hash":"73aa0eb2fb6025b0ac5f7ddb5f059e9568ed31d5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c8afeabe1f56015918ffcb03b9cc8593ccc4f53c","isMergeCommit":false,"messageTitle":"Add Date/Time Functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":51,"deletions":22}}},{"hash":"4bbb47bf88c3f9ec319bb6741e12733f7d5f9731","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e03da55d8ff5e481ec1d9757a63b039112b920fd","isMergeCommit":false,"messageTitle":"Fix Routing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}}]},{"date":"2023-08-28","commitResults":[{"hash":"959643a1a0e3bab023c5b8bb065b32cd67660f3c","isMergeCommit":false,"messageTitle":"Improve OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":6},"java":{"insertions":438,"deletions":271}}},{"hash":"0d36b5727c6f799d13a07899232d14bd50dc9771","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-More-OOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"9cb903939844b82369cf02ba024daa0b1a875613","isMergeCommit":false,"messageTitle":"Divide Classes into Packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":106,"deletions":32}}},{"hash":"60ba9db1d9fe80609a7b0ce9c88b4680ec21b36a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"cee5939d65f802eba359a82d91c396f5fa7ee6c4","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/shishirbychapur/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4e6a7ac53cd99d8c3a7da286680f83013e7275a4","isMergeCommit":false,"messageTitle":"Add Gradle Support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"9364ac415ed6172b185ba851337030fb1c6bc9be","isMergeCommit":false,"messageTitle":"Add Unit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":305,"deletions":56}}},{"hash":"d11026e5a3f5185891c2bac57b087cbf33e20061","isMergeCommit":false,"messageTitle":"Package as JAR File","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"795a68bc4fd1236ed6fd17f2d13da14570693d0e","isMergeCommit":false,"messageTitle":"Improve Javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":423,"deletions":123}}},{"hash":"5834519cea3a73f192e05fc995c931f181c07b9a","isMergeCommit":false,"messageTitle":"Handle Find Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":2}}},{"hash":"5abc38c81f1ede56a43b6d56497caaf73a4504e5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"66a7f8d0d430e348bd38f2ec48b2566f14be7899","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3298e2785bc1a8171b7af199b45d8d352f776ef0","isMergeCommit":false,"messageTitle":"Improve JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":20}}},{"hash":"22b26ed986cac095285fa0ba53010bc35848af64","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"7c699446e2351da80434f31b581b79505c391ccf","isMergeCommit":false,"messageTitle":"Fix Incorrect Field Bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"047d475394344ad98d7976717151994c9f95e2bd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"60a7c32b0a10b204fabd6df370ad1785f74b46c2","isMergeCommit":false,"messageTitle":"Improve Code Standard","messageBody":"","tags":["A-Level-9","A-JavaDoc"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":114,"deletions":105}}}]},{"date":"2023-08-31","commitResults":[{"hash":"8300eb42fcdb87e92d9a040f353c131e34f2dc94","isMergeCommit":false,"messageTitle":"Fix Coding Standards + Improve Code","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":194,"deletions":173}}},{"hash":"a7dca93b2f15cbdc9ab3f8f40c4bee0971f47c58","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"98e33fbf5372281cdc55a406d27c274b1e1a352c","isMergeCommit":false,"messageTitle":"Fix Naming Issue","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"b0bd8b6305261094424a7e79ccacfa14ee294b9c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"922d0485e42de5b56f72e567a0ab48bd042dcb32","isMergeCommit":false,"messageTitle":"Setup Checkstyle + Fix Indentation Errors","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":54,"deletions":47}}},{"hash":"fefdbd3830b15279e6e30f68e1e4e375dc0ea28a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"1c88ef6768f69a58a11f5c60ba67821d3a35713b","isMergeCommit":false,"messageTitle":"Setup JavaFx","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":0},"java":{"insertions":30,"deletions":3}}}]},{"date":"2023-09-03","commitResults":[{"hash":"ba60ec69029e29b75bdd554c68c91ee6048c0c46","isMergeCommit":false,"messageTitle":"Integrate JavaFx + Refactor Code","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"fxml":{"insertions":77,"deletions":0},"java":{"insertions":254,"deletions":107}}},{"hash":"0cf08b4d8855a3784eeaf6874f5c9064418a58c4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6529c362d8ba7b65c44f75090b7ff451c46fe989","isMergeCommit":false,"messageTitle":"Fix Code Standard","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":124,"deletions":130}}}]}]},"authorFileTypeContributionMap":{"shishirbychapur":{"java":1725,"md":2,"fxml":77,"sh":0,"bat":1,"gradle":14,"txt":10}},"authorContributionVariance":{"shishirbychapur":101041.96},"authorDisplayNameMap":{"shishirbychapur":"CS2103T-F10-2 SHIS..NKAR"}} +{"authorDailyContributionsMap":{"shishirbychapur":[{"date":"2023-08-20","commitResults":[{"hash":"ea6536ef35c17abe2b5af2b2cc14ea0682e5e421","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"edfdabf725e35e5810591b05f348ce1aa8d35134","isMergeCommit":false,"messageTitle":"Add Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":11}}},{"hash":"2510c57fae75d394e967b8e4af5182b985dc01f3","isMergeCommit":false,"messageTitle":"Add/List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":4}}}]},{"date":"2023-08-21","commitResults":[{"hash":"7872e1dc2339c86d88abe6c222c2062dde1eb093","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":4}}}]},{"date":"2023-08-22","commitResults":[{"hash":"da0057efd58a0d9832f6cf67dfe370d6a85ef59d","isMergeCommit":false,"messageTitle":"ToDo, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":122,"deletions":16}}},{"hash":"5aa47031969160b0942025990de843021d8d6c15","isMergeCommit":false,"messageTitle":"Setup Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":9,"deletions":10}}}]},{"date":"2023-08-24","commitResults":[{"hash":"bb80dc2722a52e326b9d35112c58599580fa54a8","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":167,"deletions":153}}},{"hash":"c90660e6631be95a44f759ec2c5b35509e400ce7","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":3}}},{"hash":"d8252f80dcb00e95abc64fec0ea065fc7fdcd393","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"b5d3b2ec95c34bbb2141b386258b13abf400e5ed","isMergeCommit":false,"messageTitle":"Add File Compatibility","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":186,"deletions":1}}},{"hash":"73aa0eb2fb6025b0ac5f7ddb5f059e9568ed31d5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c8afeabe1f56015918ffcb03b9cc8593ccc4f53c","isMergeCommit":false,"messageTitle":"Add Date/Time Functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":51,"deletions":22}}},{"hash":"4bbb47bf88c3f9ec319bb6741e12733f7d5f9731","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e03da55d8ff5e481ec1d9757a63b039112b920fd","isMergeCommit":false,"messageTitle":"Fix Routing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}}]},{"date":"2023-08-28","commitResults":[{"hash":"959643a1a0e3bab023c5b8bb065b32cd67660f3c","isMergeCommit":false,"messageTitle":"Improve OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":6},"java":{"insertions":438,"deletions":271}}},{"hash":"0d36b5727c6f799d13a07899232d14bd50dc9771","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-More-OOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"9cb903939844b82369cf02ba024daa0b1a875613","isMergeCommit":false,"messageTitle":"Divide Classes into Packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":106,"deletions":32}}},{"hash":"60ba9db1d9fe80609a7b0ce9c88b4680ec21b36a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"cee5939d65f802eba359a82d91c396f5fa7ee6c4","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/shishirbychapur/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4e6a7ac53cd99d8c3a7da286680f83013e7275a4","isMergeCommit":false,"messageTitle":"Add Gradle Support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"9364ac415ed6172b185ba851337030fb1c6bc9be","isMergeCommit":false,"messageTitle":"Add Unit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":305,"deletions":56}}},{"hash":"d11026e5a3f5185891c2bac57b087cbf33e20061","isMergeCommit":false,"messageTitle":"Package as JAR File","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"795a68bc4fd1236ed6fd17f2d13da14570693d0e","isMergeCommit":false,"messageTitle":"Improve Javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":423,"deletions":123}}},{"hash":"5834519cea3a73f192e05fc995c931f181c07b9a","isMergeCommit":false,"messageTitle":"Handle Find Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":2}}},{"hash":"5abc38c81f1ede56a43b6d56497caaf73a4504e5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"66a7f8d0d430e348bd38f2ec48b2566f14be7899","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3298e2785bc1a8171b7af199b45d8d352f776ef0","isMergeCommit":false,"messageTitle":"Improve JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":20}}},{"hash":"22b26ed986cac095285fa0ba53010bc35848af64","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"7c699446e2351da80434f31b581b79505c391ccf","isMergeCommit":false,"messageTitle":"Fix Incorrect Field Bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"047d475394344ad98d7976717151994c9f95e2bd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"60a7c32b0a10b204fabd6df370ad1785f74b46c2","isMergeCommit":false,"messageTitle":"Improve Code Standard","messageBody":"","tags":["A-Level-9","A-JavaDoc"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":114,"deletions":105}}}]},{"date":"2023-08-31","commitResults":[{"hash":"8300eb42fcdb87e92d9a040f353c131e34f2dc94","isMergeCommit":false,"messageTitle":"Fix Coding Standards + Improve Code","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":194,"deletions":173}}},{"hash":"a7dca93b2f15cbdc9ab3f8f40c4bee0971f47c58","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"98e33fbf5372281cdc55a406d27c274b1e1a352c","isMergeCommit":false,"messageTitle":"Fix Naming Issue","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"b0bd8b6305261094424a7e79ccacfa14ee294b9c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"922d0485e42de5b56f72e567a0ab48bd042dcb32","isMergeCommit":false,"messageTitle":"Setup Checkstyle + Fix Indentation Errors","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":54,"deletions":47}}},{"hash":"fefdbd3830b15279e6e30f68e1e4e375dc0ea28a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"1c88ef6768f69a58a11f5c60ba67821d3a35713b","isMergeCommit":false,"messageTitle":"Setup JavaFx","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":0},"java":{"insertions":30,"deletions":3}}}]},{"date":"2023-09-03","commitResults":[{"hash":"ba60ec69029e29b75bdd554c68c91ee6048c0c46","isMergeCommit":false,"messageTitle":"Integrate JavaFx + Refactor Code","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"fxml":{"insertions":77,"deletions":0},"java":{"insertions":254,"deletions":107}}},{"hash":"0cf08b4d8855a3784eeaf6874f5c9064418a58c4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6529c362d8ba7b65c44f75090b7ff451c46fe989","isMergeCommit":false,"messageTitle":"Fix Code Standard","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":124,"deletions":130}}}]},{"date":"2023-09-05","commitResults":[{"hash":"3e826212d303f220265371d6946179f0c0c39898","isMergeCommit":false,"messageTitle":"Improve GUI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":12,"deletions":12},"java":{"insertions":6,"deletions":3}}}]}]},"authorFileTypeContributionMap":{"shishirbychapur":{"java":1728,"md":2,"fxml":77,"sh":0,"bat":1,"gradle":14,"txt":10}},"authorContributionVariance":{"shishirbychapur":96143.74},"authorDisplayNameMap":{"shishirbychapur":"CS2103T-F10-2 SHIS..NKAR"}} diff --git a/simbayippy_ip_master/authorship.json b/simbayippy_ip_master/authorship.json index a8de690c..5e8ca75a 100644 --- a/simbayippy_ip_master/authorship.json +++ b/simbayippy_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":"simbayippy"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00275.1.0\u0027","lastModifiedDate":"2023-08-29"},{"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":"simbayippy"},"content":"checkstyle {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.5.0\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" testImplementation \u0027org.testng:testng:7.1.0\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.5.0\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" mainClassName \u003d \"seedu.duke.Duke\"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","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":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"simbayippy":10,"-":37}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"T | 1 | hi","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"T | 0 | hi","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"D | 0 | hiii | 2020-02-01 12:00","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"E | 1 | hiiii | 2020-01-01 00:00 | 2021-01-01 00:00","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"T | 0 | hahahahah","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"T | 0 | helloooopsdas","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"E | 1 | hi | 2019-02-01 12:00 | 2020-01-01 12:00","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"D | 0 | ehqwoeqw | 2020-02-01 01:00","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"T | 0 | hii","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"E | 0 | go to conver | 2019-02-01 16:00 | 2019-02-01 20:00","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":"E | 0 | go to concert | 2019-02-01 16:00 | 2019-02-01 20:00","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"T | 0 | read","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":"T | 0 | go to read that shit","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":"T | 0 | read tmr","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":"E | 0 | read that | 2019-02-01 12:00 | 2019-03-03 13:00","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"simbayippy":15}},{"path":"src/main/java/seedu/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.utils.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.utils.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.utils.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":" * main Duke class","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" private Parser parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" * Duke constructor","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" * @param filePath filepath to duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" this.parser \u003d new Parser(this.storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" this.taskList \u003d storage.readFile(this.ui);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":" * to run the bot","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" private void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":" ui.printGreet();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":" boolean ongoing \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":" while (ongoing) {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" String userInput \u003d ui.getUserInput();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":" ongoing \u003d parser.parse(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" ui.printExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"simbayippy"},"content":" * main function","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"simbayippy"},"content":" * @param args args","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"simbayippy"},"content":" * @throws IOException exception thrown","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"simbayippy"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"simbayippy"},"content":" Duke main \u003d new Duke(\"data/duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"simbayippy"},"content":" main.run();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"simbayippy":53,"-":3}},{"path":"src/main/java/seedu/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" * UI class","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" * gets user input into system","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" * @return user input","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" public String getUserInput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" * prints the greeting message","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" public void printGreet() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" + \"| | | | | | | | / _ \\\\\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":" + \"| |_| | |_| | |_ __/\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" + \"|____/ \\\\__,_|___|\\\\___|\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"I\u0027m Duke!\\nWhat can I do for you?\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" * prints exit message","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":" public void printExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" * prints Tasks of specfic date","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":" * @param taskList task list to print","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"simbayippy"},"content":" public void printTasksOnDate(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"simbayippy"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"You have no tasks.\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"simbayippy"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"simbayippy"},"content":" System.out.println(taskList.size() + \" tasks: \");","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"simbayippy"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"simbayippy"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"simbayippy"},"content":" System.out.println((i + 1) + \". \" + task);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"simbayippy"},"content":" * prints Tasks with keyword","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"simbayippy"},"content":" * @param taskList task list to print","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"simbayippy"},"content":" public void printTasksWithKeyword(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"simbayippy"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"No task with matching keyword.\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"simbayippy"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"simbayippy"},"content":" System.out.println(taskList.size() + \" tasks: \");","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"simbayippy"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"simbayippy"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"simbayippy"},"content":" System.out.println((i + 1) + \". \" + task);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"simbayippy"},"content":" * Prints details when adding task to TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"simbayippy"},"content":" * @param task Task to add","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"simbayippy"},"content":" public void printAddingTask(Task task, List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"simbayippy"},"content":" String message \u003d String.format(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"simbayippy"},"content":" + task","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"simbayippy"},"content":" + \"\\nNow you have %s tasks in the list\\n\", taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"simbayippy"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"simbayippy"},"content":" * Prints all Tasks in a given TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"simbayippy"},"content":" public void printAllTasks(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"simbayippy"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"You have no tasks.\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"simbayippy"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Here are your tasks:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"simbayippy"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"simbayippy"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"simbayippy"},"content":" System.out.println((i + 1) + \". \" + task);","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"simbayippy"},"content":" * prints details when deleting a task","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"simbayippy"},"content":" * @param task Task to delete","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"simbayippy"},"content":" public void printDeleteTask(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\" + \"\\n \" + task + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"simbayippy"},"content":" * prints while marking a task","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"simbayippy"},"content":" * @param task task to mark","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"simbayippy"},"content":" * @param beforeMarking if task was marked before any operation","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"simbayippy"},"content":" public void printMarkTask(Task task, boolean beforeMarking) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"simbayippy"},"content":" if (beforeMarking) {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Error! Task already marked!\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"simbayippy"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n \" + task + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"simbayippy"},"content":" * prints while unmarking of a task","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"simbayippy"},"content":" * @param task Task to unmark","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"simbayippy"},"content":" * @param beforeMarking if task was already unmark before any operation","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"simbayippy"},"content":" public void printUnMarkTask(Task task, boolean beforeMarking) {","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"simbayippy"},"content":" if (beforeMarking) {","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"I\u0027ve unmarked this task:\\n \" + task + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"simbayippy"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Error! Task already unmarked\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"simbayippy":141}},{"path":"src/main/java/seedu/duke/exceptions/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":" * EmptyDescriptionException Exception","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":" public EmptyDescriptionException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" super(\"EmptyDescriptionException: \" + message + \"\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"simbayippy":10}},{"path":"src/main/java/seedu/duke/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":" * InvalidCommandException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" super(\"InvalidCommandException: OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"simbayippy":10}},{"path":"src/main/java/seedu/duke/exceptions/MissingKeywordException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":" * MissingKeywordException","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"public class MissingKeywordException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":" public MissingKeywordException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" super(\"MissingKeywordException: \" + message + \"\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"simbayippy":10}},{"path":"src/main/java/seedu/duke/exceptions/NotIntegerException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":" * NotIntegerException","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"public class NotIntegerException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":" public NotIntegerException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" super(\"NotIntegerException: Not an Integer\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"simbayippy":10}},{"path":"src/main/java/seedu/duke/exceptions/TaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":" * TaskException","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"public class TaskException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":" public TaskException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" super(\"TaskException: \" + message + \"\\n\");","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"simbayippy":10}},{"path":"src/main/java/seedu/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" * Deadline class","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":" private LocalDateTime byDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" * Deadline constructor","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" * @param description user input","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" * @param byDate dateline of task","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" * @param isMarked is task marked","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" public Deadline(String description, LocalDateTime byDate, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" super(description, isMarked);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" this.byDate \u003d byDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" * Formats description for writing to duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" * @return proper string format","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":" public String writeFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" int isDone \u003d super.isMarked() ? 1 : 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" String formattedDate \u003d byDate.format(super.timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":" return \"D\" + \" | \" + isDone + \" | \" + super.getDescription() + \" | \" + formattedDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" public LocalDate getByDate() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" return this.byDate.toLocalDate();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":" + byDate.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"simbayippy":45}},{"path":"src/main/java/seedu/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":" * Event class","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" * Event constructor.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" * @param description user input","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" * @param from date","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" * @param to date","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" * @param isMarked if task is already marked","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" super(description, isMarked); // initializes its task","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" * Formats description for storage in duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" * @return string representation","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":" public String writeFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" int isDone \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":" if (super.isMarked()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" isDone \u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":" String formattedDateFrom \u003d from.format(super.timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":" String formattedDateTo \u003d to.format(super.timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":" return \"E\" + \" | \" + isDone + \" | \" + super.getDescription()","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" + \" | \" + formattedDateFrom + \" | \" + formattedDateTo;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" public LocalDateTime getFromDate() {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":" return this.from;","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"simbayippy"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"simbayippy"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"simbayippy"},"content":" return \"[E]\" + super.toString() + \" (from:\" + from.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\"))","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"simbayippy"},"content":" + \" to:\" + to.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"simbayippy":53}},{"path":"src/main/java/seedu/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":" * Task class","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" public final DateTimeFormatter timeFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":" private String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":" private boolean isMarked;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" * Task constructor","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" * @param description user input","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" * @param isMarked is task is marked","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" public Task(String description, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" this.isMarked \u003d isMarked;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" return (isMarked ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" public abstract String writeFormat();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" public void mark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" isMarked \u003d !isMarked;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":" public boolean isMarked() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" return isMarked;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":" return description;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":" return getStatusIcon() + \" \" + description;","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"simbayippy":47}},{"path":"src/main/java/seedu/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":" * Todo class","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" * Todo constructor","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":" * @param description user input","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":" * @param isMarked is task marked","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" public Todo(String description, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" super(description, isMarked); // initializes its task","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" * formats task for storage in duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" * @return proper string format","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" public String writeFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" int isDone \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" if (super.isMarked()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" isDone \u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" return \"T\" + \" | \" + isDone + \" | \" + super.getDescription();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"simbayippy":35}},{"path":"src/main/java/seedu/duke/utils/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.utils;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.exceptions.MissingKeywordException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.exceptions.NotIntegerException;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.exceptions.TaskException;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" * Paraser class","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" private final DateTimeFormatter timeFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" * constructor","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" * @param storage storage to use","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":" public Parser(Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":" * ENUMS","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" public enum Operation {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":" BYE, LIST, MARK, UNMARK, DELETE, TODO, DEADLINE, EVENT, CHECKDATE, FIND","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":" * Main functionality","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"simbayippy"},"content":" * @return boolean to signal if it is the BYE opeartion or not","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"simbayippy"},"content":" public boolean parse(String userInput, TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"simbayippy"},"content":" Operation operation;","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"simbayippy"},"content":" operation \u003d Operation.valueOf(userInput.toUpperCase().split(\" \")[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"simbayippy"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"simbayippy"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"simbayippy"},"content":" switch (operation) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"simbayippy"},"content":" case BYE:","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"simbayippy"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"simbayippy"},"content":" case LIST:","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"simbayippy"},"content":" taskList.listAllTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"simbayippy"},"content":" case DELETE:","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"simbayippy"},"content":" delete(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"simbayippy"},"content":" case MARK:","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"simbayippy"},"content":" mark(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"simbayippy"},"content":" case UNMARK:","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"simbayippy"},"content":" unmark(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"simbayippy"},"content":" case TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"simbayippy"},"content":" todo(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"simbayippy"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"simbayippy"},"content":" deadline(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"simbayippy"},"content":" case EVENT:","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"simbayippy"},"content":" event(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"simbayippy"},"content":" case CHECKDATE:","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"simbayippy"},"content":" checkDate(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"simbayippy"},"content":" case FIND:","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"simbayippy"},"content":" find(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"simbayippy"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"simbayippy"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"simbayippy"},"content":" storage.writeFile(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"simbayippy"},"content":" } catch (TaskException | InvalidCommandException | EmptyDescriptionException","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"simbayippy"},"content":" | NotIntegerException | MissingKeywordException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"simbayippy"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"simbayippy"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"simbayippy"},"content":" * calls the deleteTask function in TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"simbayippy"},"content":" * @param taskList taskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"simbayippy"},"content":" * @throws TaskException exception thrown","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"simbayippy"},"content":" * @throws NotIntegerException exception thrown","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"simbayippy"},"content":" public void delete(String userInput, TaskList taskList) throws TaskException, NotIntegerException {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"simbayippy"},"content":" String[] parts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"simbayippy"},"content":" if (!isInteger(parts[1])) {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"simbayippy"},"content":" throw new NotIntegerException();","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"simbayippy"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"simbayippy"},"content":" // error of out of bounds handled in TaskList itself","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"simbayippy"},"content":" // since the size is better/ easier to get in TaskList class","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"simbayippy"},"content":" taskList.deleteTask(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"simbayippy"},"content":" * calls the mark function in taskList","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"simbayippy"},"content":" * @param taskList tasklist","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"simbayippy"},"content":" * @throws NotIntegerException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"simbayippy"},"content":" * @throws TaskException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"simbayippy"},"content":" public void mark(String userInput, TaskList taskList) throws EmptyDescriptionException,","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"simbayippy"},"content":" NotIntegerException, TaskException {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"simbayippy"},"content":" String details \u003d extractNoKeywordsDetails(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"simbayippy"},"content":" if (!isInteger(details)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"simbayippy"},"content":" throw new NotIntegerException();","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"simbayippy"},"content":" int taskIndex \u003d Integer.parseInt(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"simbayippy"},"content":" taskList.mark(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"simbayippy"},"content":" * calls the unmark function","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"simbayippy"},"content":" * @param taskList TL","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"simbayippy"},"content":" * @throws TaskException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"simbayippy"},"content":" * @throws NotIntegerException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"simbayippy"},"content":" public void unmark(String userInput, TaskList taskList) throws EmptyDescriptionException,","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"simbayippy"},"content":" TaskException, NotIntegerException {","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"simbayippy"},"content":" String details \u003d extractNoKeywordsDetails(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"simbayippy"},"content":" if (!isInteger(details)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"simbayippy"},"content":" throw new NotIntegerException();","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"simbayippy"},"content":" int taskIndex \u003d Integer.parseInt(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"simbayippy"},"content":" taskList.unMark(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"simbayippy"},"content":" * adds a Todo to taskList","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"simbayippy"},"content":" public void todo(String userInput, TaskList taskList) throws EmptyDescriptionException {","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"simbayippy"},"content":" String details \u003d extractNoKeywordsDetails(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"simbayippy"},"content":" Task todoTask \u003d new Todo(details, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"simbayippy"},"content":" taskList.addTask(todoTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"simbayippy"},"content":" * adds a deadline to Task List","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"simbayippy"},"content":" * @throws MissingKeywordException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"simbayippy"},"content":" public void deadline(String userInput, TaskList taskList) throws EmptyDescriptionException,","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"simbayippy"},"content":" MissingKeywordException {","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"simbayippy"},"content":" String details \u003d extractTaskDetails(userInput, \"deadline\", \"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"simbayippy"},"content":" String dateString \u003d extractAfterKeyword(userInput, \"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"simbayippy"},"content":" LocalDateTime date \u003d LocalDateTime.parse(dateString.trim(), timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"simbayippy"},"content":" Task deadlineTask \u003d new Deadline(details, date, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"simbayippy"},"content":" taskList.addTask(deadlineTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"simbayippy"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Error: Invalid date format. Please use the format yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":186,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"simbayippy"},"content":" * adds an Event to the TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":189,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":191,"author":{"gitId":"simbayippy"},"content":" * @param taskList task list","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":193,"author":{"gitId":"simbayippy"},"content":" * @throws MissingKeywordException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":195,"author":{"gitId":"simbayippy"},"content":" public void event(String userInput, TaskList taskList) throws EmptyDescriptionException,","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"simbayippy"},"content":" MissingKeywordException {","lastModifiedDate":"2023-08-29"},{"lineNumber":197,"author":{"gitId":"simbayippy"},"content":" String details \u003d extractTaskDetails(userInput, \"event\", \"/from\");","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"simbayippy"},"content":" String from \u003d extractAfterKeyword(userInput, \"/from\", \"/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":199,"author":{"gitId":"simbayippy"},"content":" String to \u003d extractAfterKeyword(userInput, \"/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":200,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":201,"author":{"gitId":"simbayippy"},"content":" LocalDateTime dateFrom \u003d LocalDateTime.parse(from.trim(), timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":202,"author":{"gitId":"simbayippy"},"content":" LocalDateTime dateTo \u003d LocalDateTime.parse(to.trim(), timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":203,"author":{"gitId":"simbayippy"},"content":" Task eventTask \u003d new Event(details, dateFrom, dateTo, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":204,"author":{"gitId":"simbayippy"},"content":" taskList.addTask(eventTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":205,"author":{"gitId":"simbayippy"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":206,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Error: Invalid date format. Please use the format yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":207,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":208,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":209,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":210,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":211,"author":{"gitId":"simbayippy"},"content":" * Returns Tasks on a specific date. calls getTasksOnDate() from TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":212,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":213,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":214,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":215,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":216,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":217,"author":{"gitId":"simbayippy"},"content":" public void checkDate(String userInput, TaskList taskList) throws EmptyDescriptionException {","lastModifiedDate":"2023-08-29"},{"lineNumber":218,"author":{"gitId":"simbayippy"},"content":" String details \u003d extractNoKeywordsDetails(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":219,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":220,"author":{"gitId":"simbayippy"},"content":" LocalDate detailsDate \u003d LocalDate.parse(details.trim(), DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":221,"author":{"gitId":"simbayippy"},"content":" taskList.getTasksOnDate(detailsDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":222,"author":{"gitId":"simbayippy"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":223,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Error: Invalid date format. Please use the format yyyy-MM-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":224,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":225,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":226,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":227,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":228,"author":{"gitId":"simbayippy"},"content":" * Returns Tasks based on a specific user input keyword","lastModifiedDate":"2023-08-29"},{"lineNumber":229,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":230,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":231,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":232,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":233,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":234,"author":{"gitId":"simbayippy"},"content":" public void find(String userInput, TaskList taskList) throws EmptyDescriptionException {","lastModifiedDate":"2023-08-29"},{"lineNumber":235,"author":{"gitId":"simbayippy"},"content":" String keyword \u003d extractNoKeywordsDetails(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":236,"author":{"gitId":"simbayippy"},"content":" taskList.findTasks(keyword, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":237,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":238,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":239,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":240,"author":{"gitId":"simbayippy"},"content":" * Helper function to extract details for functions of:","lastModifiedDate":"2023-08-29"},{"lineNumber":241,"author":{"gitId":"simbayippy"},"content":" * mark, unmark, Todo","lastModifiedDate":"2023-08-29"},{"lineNumber":242,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":243,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":244,"author":{"gitId":"simbayippy"},"content":" * @return details in string representation","lastModifiedDate":"2023-08-29"},{"lineNumber":245,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException if no details","lastModifiedDate":"2023-08-29"},{"lineNumber":246,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":247,"author":{"gitId":"simbayippy"},"content":" private String extractNoKeywordsDetails(String userInput) throws EmptyDescriptionException {","lastModifiedDate":"2023-08-29"},{"lineNumber":248,"author":{"gitId":"simbayippy"},"content":" String[] parts \u003d userInput.toLowerCase().split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":249,"author":{"gitId":"simbayippy"},"content":" if (parts.length \u003d\u003d 1 || parts[1].isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":250,"author":{"gitId":"simbayippy"},"content":" throw new EmptyDescriptionException(\"Description cannot be empty\");","lastModifiedDate":"2023-08-29"},{"lineNumber":251,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":252,"author":{"gitId":"simbayippy"},"content":" return parts[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":253,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":254,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":255,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":256,"author":{"gitId":"simbayippy"},"content":" * Extracts the task details in between `command` and `keyword`.","lastModifiedDate":"2023-08-29"},{"lineNumber":257,"author":{"gitId":"simbayippy"},"content":" * E.g. deadline read the book /by tuesday","lastModifiedDate":"2023-08-29"},{"lineNumber":258,"author":{"gitId":"simbayippy"},"content":" * -\u003e extracts `read the book`","lastModifiedDate":"2023-08-29"},{"lineNumber":259,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":260,"author":{"gitId":"simbayippy"},"content":" * @param userInput string input by user.","lastModifiedDate":"2023-08-29"},{"lineNumber":261,"author":{"gitId":"simbayippy"},"content":" * @param commandAndKeyword todo/deadline/event","lastModifiedDate":"2023-08-29"},{"lineNumber":262,"author":{"gitId":"simbayippy"},"content":" * @return string in between command and keyword","lastModifiedDate":"2023-08-29"},{"lineNumber":263,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":264,"author":{"gitId":"simbayippy"},"content":" private String extractTaskDetails(String userInput, String... commandAndKeyword)","lastModifiedDate":"2023-08-29"},{"lineNumber":265,"author":{"gitId":"simbayippy"},"content":" throws EmptyDescriptionException, MissingKeywordException {","lastModifiedDate":"2023-08-29"},{"lineNumber":266,"author":{"gitId":"simbayippy"},"content":" String[] tokens \u003d userInput.toLowerCase().split(commandAndKeyword[0], 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":267,"author":{"gitId":"simbayippy"},"content":" if (tokens.length \u003d\u003d 0 || tokens[1].isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":268,"author":{"gitId":"simbayippy"},"content":" throw new EmptyDescriptionException(\"Task description cannot be empty\");","lastModifiedDate":"2023-08-29"},{"lineNumber":269,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":270,"author":{"gitId":"simbayippy"},"content":" String detailsWithKeyword \u003d tokens[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":271,"author":{"gitId":"simbayippy"},"content":" int endIndex \u003d detailsWithKeyword.indexOf(commandAndKeyword[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":272,"author":{"gitId":"simbayippy"},"content":" if (endIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":273,"author":{"gitId":"simbayippy"},"content":" throw new MissingKeywordException(\"Missing keyword: \" + commandAndKeyword[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":274,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":275,"author":{"gitId":"simbayippy"},"content":" String toReturn \u003d detailsWithKeyword.substring(0, endIndex).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":276,"author":{"gitId":"simbayippy"},"content":" if (toReturn.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":277,"author":{"gitId":"simbayippy"},"content":" throw new EmptyDescriptionException(\"Task description cannot be empty\");","lastModifiedDate":"2023-08-29"},{"lineNumber":278,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":279,"author":{"gitId":"simbayippy"},"content":" return toReturn;","lastModifiedDate":"2023-08-29"},{"lineNumber":280,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":281,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":282,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":283,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":284,"author":{"gitId":"simbayippy"},"content":" * Extracts the details after the keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":285,"author":{"gitId":"simbayippy"},"content":" * E.g. event go to school /from mon 2pm /to tues 3pm","lastModifiedDate":"2023-08-29"},{"lineNumber":286,"author":{"gitId":"simbayippy"},"content":" * -\u003e extracts `mon 2pm`","lastModifiedDate":"2023-08-29"},{"lineNumber":287,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":288,"author":{"gitId":"simbayippy"},"content":" * @param userInput string input by user.","lastModifiedDate":"2023-08-29"},{"lineNumber":289,"author":{"gitId":"simbayippy"},"content":" * @param keywords the keywords in use","lastModifiedDate":"2023-08-29"},{"lineNumber":290,"author":{"gitId":"simbayippy"},"content":" * @return string after keyword/ between 2 keywords.","lastModifiedDate":"2023-08-29"},{"lineNumber":291,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":292,"author":{"gitId":"simbayippy"},"content":" private String extractAfterKeyword(String userInput, String... keywords) throws EmptyDescriptionException {","lastModifiedDate":"2023-08-29"},{"lineNumber":293,"author":{"gitId":"simbayippy"},"content":" String[] tokens \u003d userInput.toLowerCase().split(keywords[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":294,"author":{"gitId":"simbayippy"},"content":" if (tokens.length \u003d\u003d 1 || tokens[1].isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":295,"author":{"gitId":"simbayippy"},"content":" throw new EmptyDescriptionException(\"Details after \" + keywords[0] + \" cannot be empty\");","lastModifiedDate":"2023-08-29"},{"lineNumber":296,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":297,"author":{"gitId":"simbayippy"},"content":" if (keywords.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":298,"author":{"gitId":"simbayippy"},"content":" return tokens[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":299,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":300,"author":{"gitId":"simbayippy"},"content":" // last case if there are 2 keywords, such as /from and /to","lastModifiedDate":"2023-08-29"},{"lineNumber":301,"author":{"gitId":"simbayippy"},"content":" // -\u003e return the in between of these 2 keywords","lastModifiedDate":"2023-08-29"},{"lineNumber":302,"author":{"gitId":"simbayippy"},"content":" String[] tokensAfterSecondKeyword \u003d tokens[1].split(keywords[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":303,"author":{"gitId":"simbayippy"},"content":" if (tokensAfterSecondKeyword[0].isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":304,"author":{"gitId":"simbayippy"},"content":" throw new EmptyDescriptionException(\"Details after \" + keywords[0] + \" cannot be empty\");","lastModifiedDate":"2023-08-29"},{"lineNumber":305,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":306,"author":{"gitId":"simbayippy"},"content":" return tokensAfterSecondKeyword[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":307,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":308,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":309,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":310,"author":{"gitId":"simbayippy"},"content":" * the method isInteger to judge whether input is integer","lastModifiedDate":"2023-08-29"},{"lineNumber":311,"author":{"gitId":"simbayippy"},"content":" * @param input","lastModifiedDate":"2023-08-29"},{"lineNumber":312,"author":{"gitId":"simbayippy"},"content":" * @return boolean","lastModifiedDate":"2023-08-29"},{"lineNumber":313,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":314,"author":{"gitId":"simbayippy"},"content":" private boolean isInteger(String input) {","lastModifiedDate":"2023-08-29"},{"lineNumber":315,"author":{"gitId":"simbayippy"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":316,"author":{"gitId":"simbayippy"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":317,"author":{"gitId":"simbayippy"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":318,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":319,"author":{"gitId":"simbayippy"},"content":" Integer.parseInt(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":320,"author":{"gitId":"simbayippy"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":321,"author":{"gitId":"simbayippy"},"content":" } catch (NumberFormatException nfe) {","lastModifiedDate":"2023-08-29"},{"lineNumber":322,"author":{"gitId":"simbayippy"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":323,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":324,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":325,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":326,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"simbayippy":326}},{"path":"src/main/java/seedu/duke/utils/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.utils;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" * Storage","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" private String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" private final DateTimeFormatter timeFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" * constructor for Storage class","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" * @param filePath file path of duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" * Write the TaskList to file","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to be written to duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":" public void writeFile(TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":" // don\u0027t have to handle case of file path not existing as","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" // during readFile (which occurs at start of script, checks if filepath exists)","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":" FileWriter writer \u003d new FileWriter(file);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" for (Task task : taskList.returnTaskList()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":" writer.write(task.writeFormat() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"simbayippy"},"content":" writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"simbayippy"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Error while saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"simbayippy"},"content":" * Read from duke.txt file","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"simbayippy"},"content":" * @param ui UI to display to users","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"simbayippy"},"content":" * @return Tasklist","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"simbayippy"},"content":" * @throws IOException throws any error","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"simbayippy"},"content":" public TaskList readFile(Ui ui) throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"simbayippy"},"content":" TaskList taskList \u003d new TaskList(ui); // Create an empty task list","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"simbayippy"},"content":" File myData \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"simbayippy"},"content":" Scanner scanner \u003d new Scanner(myData);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"simbayippy"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"simbayippy"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"simbayippy"},"content":" Task task \u003d parseTaskFromLine(line, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"simbayippy"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"simbayippy"},"content":" // this adds to taskList without printing anything","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"simbayippy"},"content":" taskList.addAvailTasks(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"simbayippy"},"content":" scanner.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"simbayippy"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"simbayippy"},"content":" if (new File(\"data\").mkdir()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"data folder does not exist, create now\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"simbayippy"},"content":" } else if (new File(\"data/duke.txt\").createNewFile()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"duke.txt file not exist, create now\");","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"simbayippy"},"content":" return taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"simbayippy"},"content":" * helper function","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"simbayippy"},"content":" * @param line line","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"simbayippy"},"content":" * @param taskList tasklist","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"simbayippy"},"content":" * @return Task","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"simbayippy"},"content":" private Task parseTaskFromLine(String line, TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"simbayippy"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"simbayippy"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"simbayippy"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"simbayippy"},"content":" boolean isMarked \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"simbayippy"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"simbayippy"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"simbayippy"},"content":" return new Todo(description, isMarked);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"simbayippy"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"simbayippy"},"content":" LocalDateTime byDate \u003d LocalDateTime.parse(parts[3], timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"simbayippy"},"content":" return new Deadline(description, byDate, isMarked);","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"simbayippy"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"simbayippy"},"content":" LocalDateTime from \u003d LocalDateTime.parse(parts[3], timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"simbayippy"},"content":" LocalDateTime to \u003d LocalDateTime.parse(parts[4], timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"simbayippy"},"content":" return new Event(description, from, to, isMarked);","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"simbayippy"},"content":" // Add cases for other task types (e.g., Event) as needed","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"simbayippy"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"simbayippy"},"content":" return null; // Unknown task type, skip","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"simbayippy":112}},{"path":"src/main/java/seedu/duke/utils/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.utils;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.exceptions.TaskException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" * TaskList class","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" private List\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" * TaskList constructor","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" * @param ui Ui instance it uses to display messages to user","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" public TaskList(Ui ui) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" this.taskList \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" * Adds task to the TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":" * @param task Task to add","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" ui.printAddingTask(task, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" * Adds task to TaskList. Used for initial read of duke.txt, no interface/ comments to user","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":" * @param task task to add from duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":" public void addAvailTasks(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"simbayippy"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"simbayippy"},"content":" * uses Ui to print to user all avail tasks","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"simbayippy"},"content":" public void listAllTasks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"simbayippy"},"content":" ui.printAllTasks(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"simbayippy"},"content":" * returns the current TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"simbayippy"},"content":" * @return TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"simbayippy"},"content":" public List\u003cTask\u003e returnTaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"simbayippy"},"content":" return taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"simbayippy"},"content":" * Deletes the Task at the specified index from TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"simbayippy"},"content":" * @param i index of Task to be removed","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"simbayippy"},"content":" * @throws TaskException if any error","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"simbayippy"},"content":" public void deleteTask(int i) throws TaskException {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"simbayippy"},"content":" if (i \u003e taskList.size()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"simbayippy"},"content":" throw new TaskException(\"Invalid task index. Valid indexes from 1 to \" + taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"simbayippy"},"content":" Task taskToDekete \u003d taskList.get(i - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"simbayippy"},"content":" taskList.remove(i - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"simbayippy"},"content":" ui.printDeleteTask(taskToDekete);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"simbayippy"},"content":" * marks task","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"simbayippy"},"content":" * @param i task to mark","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"simbayippy"},"content":" * @throws TaskException error thrown","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"simbayippy"},"content":" public void mark(int i) throws TaskException {","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"simbayippy"},"content":" if (i \u003e taskList.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"simbayippy"},"content":" throw new TaskException(\"Invalid task index. Valid indexes from 1 to \" + taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"simbayippy"},"content":" Task taskToMark \u003d taskList.get(i - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"simbayippy"},"content":" boolean beforeMarking \u003d taskToMark.isMarked();","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"simbayippy"},"content":" if (!taskToMark.isMarked()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"simbayippy"},"content":" taskToMark.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"simbayippy"},"content":" ui.printMarkTask(taskToMark, beforeMarking);","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"simbayippy"},"content":" * unMarks task","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"simbayippy"},"content":" * @param i task to unmark","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"simbayippy"},"content":" * @throws TaskException error thrown","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"simbayippy"},"content":" public void unMark(int i) throws TaskException {","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"simbayippy"},"content":" if (i \u003e taskList.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"simbayippy"},"content":" throw new TaskException(\"Invalid task index. Valid indexes from 1 to \" + taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"simbayippy"},"content":" Task taskToMark \u003d taskList.get(i - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"simbayippy"},"content":" boolean beforeMarking \u003d taskToMark.isMarked();","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"simbayippy"},"content":" if (taskToMark.isMarked()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"simbayippy"},"content":" taskToMark.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"simbayippy"},"content":" ui.printUnMarkTask(taskToMark, beforeMarking);","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"simbayippy"},"content":" * returns all Tasks on specified date","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"simbayippy"},"content":" * @param date date to check","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"simbayippy"},"content":" public void getTasksOnDate(LocalDate date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"simbayippy"},"content":" List\u003cTask\u003e tasksOnDate \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"simbayippy"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"simbayippy"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"simbayippy"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"simbayippy"},"content":" if (deadline.getByDate().isEqual(date)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"simbayippy"},"content":" tasksOnDate.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"simbayippy"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"simbayippy"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"simbayippy"},"content":" if (event.getFromDate().isEqual(date.atStartOfDay())) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"simbayippy"},"content":" tasksOnDate.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"simbayippy"},"content":" ui.printTasksOnDate(tasksOnDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"simbayippy"},"content":" * returns all tasks with keyword","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"simbayippy"},"content":" * @param keyword keyword to check","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"simbayippy"},"content":" * @param taskList tasklist to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"simbayippy"},"content":" public void findTasks(String keyword, TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"simbayippy"},"content":" List\u003cTask\u003e tasksWithKeyword \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"simbayippy"},"content":" for (Task task : taskList.returnTaskList()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"simbayippy"},"content":" String description \u003d task.getDescription();","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"simbayippy"},"content":" if (description.toLowerCase().contains(keyword.toLowerCase())) {","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"simbayippy"},"content":" tasksWithKeyword.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"simbayippy"},"content":" ui.printTasksOnDate(tasksWithKeyword);","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"simbayippy":155}},{"path":"src/test/java/seedu/duke/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" private static DateTimeFormatter validFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" public void deadlineMarkTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" Deadline d \u003d new Deadline(\"return book\", LocalDateTime.parse(\"2020-02-20 12:00\", validFormat), false);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" d.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" assertEquals(\"[D][X] return book (by: 20 Feb 2020 12:00)\", d.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" public void deadlineWriteFormatTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" Deadline d \u003d new Deadline(\"CS2103T due\", LocalDateTime.parse(\"2021-08-22 17:19\", validFormat), false);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" String test \u003d d.writeFormat();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" assertEquals(\"D | 0 | CS2103T due | 2021-08-22 17:19\", test);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"simbayippy":29}},{"path":"src/test/java/seedu/duke/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"public class EventTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":" private static DateTimeFormatter validFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" public void eventMarkTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" Event e \u003d new Event(\"go to concert\", LocalDateTime.parse(\"2019-02-01 16:00\", validFormat),","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" LocalDateTime.parse(\"2019-02-01 20:00\", validFormat), false);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" e.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" assertEquals(\"[E][X] go to concert (from:01 Feb 2019 16:00 to:01 Feb 2019 20:00)\", e.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" public void eventWriteFormatTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" Event e \u003d new Event(\"go to concert\", LocalDateTime.parse(\"2019-02-01 16:00\", validFormat),","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" LocalDateTime.parse(\"2019-02-01 20:00\", validFormat), false);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" String test \u003d e.writeFormat();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" assertEquals(\"E | 0 | go to concert | 2019-02-01 16:00 | 2019-02-01 20:00\", test);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"simbayippy":30}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"todo eat","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"todo cs2103 IP","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"deadline return book /by tues 3pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"event meeting /at Monday","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"simbayippy":9}}] +[{"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":"simbayippy"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00275.1.0\u0027","lastModifiedDate":"2023-08-29"},{"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":"simbayippy"},"content":"checkstyle {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.5.0\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" testImplementation \u0027org.testng:testng:7.1.0\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.5.0\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" mainClassName \u003d \"seedu.duke.Duke\"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","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":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"simbayippy":10,"-":37}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"T | 1 | hi","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"T | 0 | hi","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"D | 0 | hiii | 2020-02-01 12:00","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"E | 1 | hiiii | 2020-01-01 00:00 | 2021-01-01 00:00","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"T | 0 | hahahahah","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"T | 0 | helloooopsdas","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"E | 1 | hi | 2019-02-01 12:00 | 2020-01-01 12:00","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"D | 0 | ehqwoeqw | 2020-02-01 01:00","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"T | 0 | hii","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"E | 0 | go to conver | 2019-02-01 16:00 | 2019-02-01 20:00","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":"E | 0 | go to concert | 2019-02-01 16:00 | 2019-02-01 20:00","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"T | 0 | read","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":"T | 0 | go to read that shit","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":"T | 0 | read tmr","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":"E | 0 | read that | 2019-02-01 12:00 | 2019-03-03 13:00","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":"T | 0 | hi","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":"T | 0 | hi","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":"T | 0 | hi","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":"T | 0 | hi","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"simbayippy":19}},{"path":"src/main/java/seedu/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.utils.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.utils.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.utils.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":" * main Duke class","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" private Parser parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" * Duke constructor","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" * @param filePath filepath to duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" this.parser \u003d new Parser(this.storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" this.taskList \u003d storage.readFile(this.ui);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":" * to run the bot","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" private void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":" ui.printGreet();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":" boolean ongoing \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":" while (ongoing) {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" String userInput \u003d ui.getUserInput();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":" ongoing \u003d parser.parse(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" ui.printExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"simbayippy"},"content":" * main function","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"simbayippy"},"content":" * @param args args","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"simbayippy"},"content":" * @throws IOException exception thrown","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"simbayippy"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"simbayippy"},"content":" Duke main \u003d new Duke(\"data/duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"simbayippy"},"content":" main.run();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"simbayippy":53,"-":3}},{"path":"src/main/java/seedu/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" * UI class","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" * gets user input into system","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" * @return user input","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" public String getUserInput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" * prints the greeting message","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" public void printGreet() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" + \"| | | | | | | | / _ \\\\\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":" + \"| |_| | |_| | |_ __/\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" + \"|____/ \\\\__,_|___|\\\\___|\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"I\u0027m Duke!\\nWhat can I do for you?\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" * prints exit message","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":" public void printExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" * prints Tasks of specfic date","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":" * @param taskList task list to print","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"simbayippy"},"content":" public void printTasksOnDate(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"simbayippy"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"You have no tasks.\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"simbayippy"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"simbayippy"},"content":" System.out.println(taskList.size() + \" tasks: \");","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"simbayippy"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"simbayippy"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"simbayippy"},"content":" System.out.println((i + 1) + \". \" + task);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"simbayippy"},"content":" * prints Tasks with keyword","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"simbayippy"},"content":" * @param taskList task list to print","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"simbayippy"},"content":" public void printTasksWithKeyword(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"simbayippy"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"No task with matching keyword.\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"simbayippy"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"simbayippy"},"content":" System.out.println(taskList.size() + \" tasks: \");","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"simbayippy"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"simbayippy"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"simbayippy"},"content":" System.out.println((i + 1) + \". \" + task);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"simbayippy"},"content":" * Prints details when adding task to TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"simbayippy"},"content":" * @param task Task to add","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"simbayippy"},"content":" public void printAddingTask(Task task, List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"simbayippy"},"content":" String message \u003d String.format(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"simbayippy"},"content":" + task","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"simbayippy"},"content":" + \"\\nNow you have %s tasks in the list\\n\", taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"simbayippy"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"simbayippy"},"content":" * Prints all Tasks in a given TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"simbayippy"},"content":" public void printAllTasks(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"simbayippy"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"You have no tasks.\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"simbayippy"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Here are your tasks:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"simbayippy"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"simbayippy"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"simbayippy"},"content":" System.out.println((i + 1) + \". \" + task);","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"simbayippy"},"content":" * prints details when deleting a task","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"simbayippy"},"content":" * @param task Task to delete","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"simbayippy"},"content":" public void printDeleteTask(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\" + \"\\n \" + task + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"simbayippy"},"content":" * prints while marking a task","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"simbayippy"},"content":" * @param task task to mark","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"simbayippy"},"content":" * @param beforeMarking if task was marked before any operation","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"simbayippy"},"content":" public void printMarkTask(Task task, boolean beforeMarking) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"simbayippy"},"content":" if (beforeMarking) {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Error! Task already marked!\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"simbayippy"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n \" + task + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"simbayippy"},"content":" * prints while unmarking of a task","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"simbayippy"},"content":" * @param task Task to unmark","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"simbayippy"},"content":" * @param beforeMarking if task was already unmark before any operation","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"simbayippy"},"content":" public void printUnMarkTask(Task task, boolean beforeMarking) {","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"simbayippy"},"content":" if (beforeMarking) {","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"I\u0027ve unmarked this task:\\n \" + task + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"simbayippy"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Error! Task already unmarked\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"simbayippy":141}},{"path":"src/main/java/seedu/duke/exceptions/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":" * EmptyDescriptionException Exception","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":" public EmptyDescriptionException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" super(\"EmptyDescriptionException: \" + message + \"\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"simbayippy":10}},{"path":"src/main/java/seedu/duke/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":" * InvalidCommandException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" super(\"InvalidCommandException: OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"simbayippy":10}},{"path":"src/main/java/seedu/duke/exceptions/MissingKeywordException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":" * MissingKeywordException","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"public class MissingKeywordException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":" public MissingKeywordException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" super(\"MissingKeywordException: \" + message + \"\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"simbayippy":10}},{"path":"src/main/java/seedu/duke/exceptions/NotIntegerException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":" * NotIntegerException","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"public class NotIntegerException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":" public NotIntegerException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" super(\"NotIntegerException: Not an Integer\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"simbayippy":10}},{"path":"src/main/java/seedu/duke/exceptions/TaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":" * TaskException","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"public class TaskException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":" public TaskException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" super(\"TaskException: \" + message + \"\\n\");","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"simbayippy":10}},{"path":"src/main/java/seedu/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" * Deadline class","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":" private LocalDateTime byDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" * Deadline constructor","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" * @param description user input","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" * @param byDate dateline of task","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" * @param isMarked is task marked","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" public Deadline(String description, LocalDateTime byDate, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" super(description, isMarked);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" this.byDate \u003d byDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" * Formats description for writing to duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" * @return proper string format","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":" public String writeFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" int isDone \u003d super.isMarked() ? 1 : 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" String formattedDate \u003d byDate.format(super.timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":" return \"D\" + \" | \" + isDone + \" | \" + super.getDescription() + \" | \" + formattedDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" public LocalDate getByDate() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" return this.byDate.toLocalDate();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":" + byDate.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"simbayippy":45}},{"path":"src/main/java/seedu/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":" * Event class","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" * Event constructor.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" * @param description user input","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" * @param from date","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" * @param to date","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" * @param isMarked if task is already marked","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" super(description, isMarked); // initializes its task","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" * Formats description for storage in duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" * @return string representation","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":" public String writeFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" int isDone \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":" if (super.isMarked()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" isDone \u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":" String formattedDateFrom \u003d from.format(super.timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":" String formattedDateTo \u003d to.format(super.timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":" return \"E\" + \" | \" + isDone + \" | \" + super.getDescription()","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" + \" | \" + formattedDateFrom + \" | \" + formattedDateTo;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" public LocalDateTime getFromDate() {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":" return this.from;","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"simbayippy"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"simbayippy"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"simbayippy"},"content":" return \"[E]\" + super.toString() + \" (from:\" + from.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\"))","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"simbayippy"},"content":" + \" to:\" + to.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"simbayippy":53}},{"path":"src/main/java/seedu/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":" * Task class","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" public final DateTimeFormatter timeFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":" private String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":" private boolean isMarked;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" * Task constructor","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" * @param description user input","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" * @param isMarked is task is marked","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" public Task(String description, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" this.isMarked \u003d isMarked;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" return (isMarked ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" public abstract String writeFormat();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" public void mark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" isMarked \u003d !isMarked;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":" public boolean isMarked() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" return isMarked;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":" return description;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":" return getStatusIcon() + \" \" + description;","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"simbayippy":47}},{"path":"src/main/java/seedu/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":" * Todo class","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":" * Todo constructor","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":" * @param description user input","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":" * @param isMarked is task marked","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" public Todo(String description, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" super(description, isMarked); // initializes its task","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" * formats task for storage in duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" * @return proper string format","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" public String writeFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" int isDone \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" if (super.isMarked()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" isDone \u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" return \"T\" + \" | \" + isDone + \" | \" + super.getDescription();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"simbayippy":35}},{"path":"src/main/java/seedu/duke/utils/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.utils;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.exceptions.MissingKeywordException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.exceptions.NotIntegerException;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.exceptions.TaskException;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" * Paraser class","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" private final DateTimeFormatter timeFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" * constructor","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" * @param storage storage to use","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":" public Parser(Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":" * ENUMS","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" public enum Operation {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":" BYE, LIST, MARK, UNMARK, DELETE, TODO, DEADLINE, EVENT, CHECKDATE, FIND","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":" * Main functionality","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"simbayippy"},"content":" * @return boolean to signal if it is the BYE opeartion or not","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"simbayippy"},"content":" public boolean parse(String userInput, TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"simbayippy"},"content":" Operation operation;","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"simbayippy"},"content":" operation \u003d Operation.valueOf(userInput.toUpperCase().split(\" \")[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"simbayippy"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"simbayippy"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"simbayippy"},"content":" switch (operation) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"simbayippy"},"content":" case BYE:","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"simbayippy"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"simbayippy"},"content":" case LIST:","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"simbayippy"},"content":" taskList.listAllTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"simbayippy"},"content":" case DELETE:","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"simbayippy"},"content":" delete(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"simbayippy"},"content":" case MARK:","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"simbayippy"},"content":" mark(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"simbayippy"},"content":" case UNMARK:","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"simbayippy"},"content":" unmark(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"simbayippy"},"content":" case TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"simbayippy"},"content":" todo(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"simbayippy"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"simbayippy"},"content":" deadline(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"simbayippy"},"content":" case EVENT:","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"simbayippy"},"content":" event(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"simbayippy"},"content":" case CHECKDATE:","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"simbayippy"},"content":" checkDate(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"simbayippy"},"content":" case FIND:","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"simbayippy"},"content":" find(userInput, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"simbayippy"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"simbayippy"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"simbayippy"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"simbayippy"},"content":" storage.writeFile(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"simbayippy"},"content":" } catch (TaskException | InvalidCommandException | EmptyDescriptionException","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"simbayippy"},"content":" | NotIntegerException | MissingKeywordException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"simbayippy"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"simbayippy"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"simbayippy"},"content":" * calls the deleteTask function in TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"simbayippy"},"content":" * @param taskList taskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"simbayippy"},"content":" * @throws TaskException exception thrown","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"simbayippy"},"content":" * @throws NotIntegerException exception thrown","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"simbayippy"},"content":" public void delete(String userInput, TaskList taskList) throws TaskException, NotIntegerException {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"simbayippy"},"content":" String[] parts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"simbayippy"},"content":" if (!isInteger(parts[1])) {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"simbayippy"},"content":" throw new NotIntegerException();","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"simbayippy"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"simbayippy"},"content":" // error of out of bounds handled in TaskList itself","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"simbayippy"},"content":" // since the size is better/ easier to get in TaskList class","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"simbayippy"},"content":" taskList.deleteTask(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"simbayippy"},"content":" * calls the mark function in taskList","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"simbayippy"},"content":" * @param taskList tasklist","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"simbayippy"},"content":" * @throws NotIntegerException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"simbayippy"},"content":" * @throws TaskException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"simbayippy"},"content":" public void mark(String userInput, TaskList taskList) throws EmptyDescriptionException,","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"simbayippy"},"content":" NotIntegerException, TaskException {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"simbayippy"},"content":" String details \u003d extractNoKeywordsDetails(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"simbayippy"},"content":" if (!isInteger(details)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"simbayippy"},"content":" throw new NotIntegerException();","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"simbayippy"},"content":" int taskIndex \u003d Integer.parseInt(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"simbayippy"},"content":" taskList.mark(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"simbayippy"},"content":" * calls the unmark function","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"simbayippy"},"content":" * @param taskList TL","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"simbayippy"},"content":" * @throws TaskException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"simbayippy"},"content":" * @throws NotIntegerException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"simbayippy"},"content":" public void unmark(String userInput, TaskList taskList) throws EmptyDescriptionException,","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"simbayippy"},"content":" TaskException, NotIntegerException {","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"simbayippy"},"content":" String details \u003d extractNoKeywordsDetails(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"simbayippy"},"content":" if (!isInteger(details)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"simbayippy"},"content":" throw new NotIntegerException();","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"simbayippy"},"content":" int taskIndex \u003d Integer.parseInt(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"simbayippy"},"content":" taskList.unMark(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"simbayippy"},"content":" * adds a Todo to taskList","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"simbayippy"},"content":" public void todo(String userInput, TaskList taskList) throws EmptyDescriptionException {","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"simbayippy"},"content":" String details \u003d extractNoKeywordsDetails(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"simbayippy"},"content":" Task todoTask \u003d new Todo(details, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"simbayippy"},"content":" taskList.addTask(todoTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"simbayippy"},"content":" * adds a deadline to Task List","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"simbayippy"},"content":" * @throws MissingKeywordException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"simbayippy"},"content":" public void deadline(String userInput, TaskList taskList) throws EmptyDescriptionException,","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"simbayippy"},"content":" MissingKeywordException {","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"simbayippy"},"content":" String details \u003d extractTaskDetails(userInput, \"deadline\", \"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"simbayippy"},"content":" String dateString \u003d extractAfterKeyword(userInput, \"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"simbayippy"},"content":" LocalDateTime date \u003d LocalDateTime.parse(dateString.trim(), timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"simbayippy"},"content":" Task deadlineTask \u003d new Deadline(details, date, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"simbayippy"},"content":" taskList.addTask(deadlineTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"simbayippy"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Error: Invalid date format. Please use the format yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":186,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"simbayippy"},"content":" * adds an Event to the TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":189,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":191,"author":{"gitId":"simbayippy"},"content":" * @param taskList task list","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":193,"author":{"gitId":"simbayippy"},"content":" * @throws MissingKeywordException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":195,"author":{"gitId":"simbayippy"},"content":" public void event(String userInput, TaskList taskList) throws EmptyDescriptionException,","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"simbayippy"},"content":" MissingKeywordException {","lastModifiedDate":"2023-08-29"},{"lineNumber":197,"author":{"gitId":"simbayippy"},"content":" String details \u003d extractTaskDetails(userInput, \"event\", \"/from\");","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"simbayippy"},"content":" String from \u003d extractAfterKeyword(userInput, \"/from\", \"/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":199,"author":{"gitId":"simbayippy"},"content":" String to \u003d extractAfterKeyword(userInput, \"/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":200,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":201,"author":{"gitId":"simbayippy"},"content":" LocalDateTime dateFrom \u003d LocalDateTime.parse(from.trim(), timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":202,"author":{"gitId":"simbayippy"},"content":" LocalDateTime dateTo \u003d LocalDateTime.parse(to.trim(), timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":203,"author":{"gitId":"simbayippy"},"content":" Task eventTask \u003d new Event(details, dateFrom, dateTo, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":204,"author":{"gitId":"simbayippy"},"content":" taskList.addTask(eventTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":205,"author":{"gitId":"simbayippy"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":206,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Error: Invalid date format. Please use the format yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":207,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":208,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":209,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":210,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":211,"author":{"gitId":"simbayippy"},"content":" * Returns Tasks on a specific date. calls getTasksOnDate() from TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":212,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":213,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":214,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":215,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":216,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":217,"author":{"gitId":"simbayippy"},"content":" public void checkDate(String userInput, TaskList taskList) throws EmptyDescriptionException {","lastModifiedDate":"2023-08-29"},{"lineNumber":218,"author":{"gitId":"simbayippy"},"content":" String details \u003d extractNoKeywordsDetails(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":219,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":220,"author":{"gitId":"simbayippy"},"content":" LocalDate detailsDate \u003d LocalDate.parse(details.trim(), DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":221,"author":{"gitId":"simbayippy"},"content":" taskList.getTasksOnDate(detailsDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":222,"author":{"gitId":"simbayippy"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":223,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Error: Invalid date format. Please use the format yyyy-MM-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":224,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":225,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":226,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":227,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":228,"author":{"gitId":"simbayippy"},"content":" * Returns Tasks based on a specific user input keyword","lastModifiedDate":"2023-08-29"},{"lineNumber":229,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":230,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":231,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":232,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException exception","lastModifiedDate":"2023-08-29"},{"lineNumber":233,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":234,"author":{"gitId":"simbayippy"},"content":" public void find(String userInput, TaskList taskList) throws EmptyDescriptionException {","lastModifiedDate":"2023-08-29"},{"lineNumber":235,"author":{"gitId":"simbayippy"},"content":" String keyword \u003d extractNoKeywordsDetails(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":236,"author":{"gitId":"simbayippy"},"content":" taskList.findTasks(keyword, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":237,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":238,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":239,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":240,"author":{"gitId":"simbayippy"},"content":" * Helper function to extract details for functions of:","lastModifiedDate":"2023-08-29"},{"lineNumber":241,"author":{"gitId":"simbayippy"},"content":" * mark, unmark, Todo","lastModifiedDate":"2023-08-29"},{"lineNumber":242,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":243,"author":{"gitId":"simbayippy"},"content":" * @param userInput user input","lastModifiedDate":"2023-08-29"},{"lineNumber":244,"author":{"gitId":"simbayippy"},"content":" * @return details in string representation","lastModifiedDate":"2023-08-29"},{"lineNumber":245,"author":{"gitId":"simbayippy"},"content":" * @throws EmptyDescriptionException if no details","lastModifiedDate":"2023-08-29"},{"lineNumber":246,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":247,"author":{"gitId":"simbayippy"},"content":" private String extractNoKeywordsDetails(String userInput) throws EmptyDescriptionException {","lastModifiedDate":"2023-08-29"},{"lineNumber":248,"author":{"gitId":"simbayippy"},"content":" String[] parts \u003d userInput.toLowerCase().split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":249,"author":{"gitId":"simbayippy"},"content":" if (parts.length \u003d\u003d 1 || parts[1].isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":250,"author":{"gitId":"simbayippy"},"content":" throw new EmptyDescriptionException(\"Description cannot be empty\");","lastModifiedDate":"2023-08-29"},{"lineNumber":251,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":252,"author":{"gitId":"simbayippy"},"content":" return parts[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":253,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":254,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":255,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":256,"author":{"gitId":"simbayippy"},"content":" * Extracts the task details in between `command` and `keyword`.","lastModifiedDate":"2023-08-29"},{"lineNumber":257,"author":{"gitId":"simbayippy"},"content":" * E.g. deadline read the book /by tuesday","lastModifiedDate":"2023-08-29"},{"lineNumber":258,"author":{"gitId":"simbayippy"},"content":" * -\u003e extracts `read the book`","lastModifiedDate":"2023-08-29"},{"lineNumber":259,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":260,"author":{"gitId":"simbayippy"},"content":" * @param userInput string input by user.","lastModifiedDate":"2023-08-29"},{"lineNumber":261,"author":{"gitId":"simbayippy"},"content":" * @param commandAndKeyword todo/deadline/event","lastModifiedDate":"2023-08-29"},{"lineNumber":262,"author":{"gitId":"simbayippy"},"content":" * @return string in between command and keyword","lastModifiedDate":"2023-08-29"},{"lineNumber":263,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":264,"author":{"gitId":"simbayippy"},"content":" private String extractTaskDetails(String userInput, String... commandAndKeyword)","lastModifiedDate":"2023-08-29"},{"lineNumber":265,"author":{"gitId":"simbayippy"},"content":" throws EmptyDescriptionException, MissingKeywordException {","lastModifiedDate":"2023-08-29"},{"lineNumber":266,"author":{"gitId":"simbayippy"},"content":" String[] tokens \u003d userInput.toLowerCase().split(commandAndKeyword[0], 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":267,"author":{"gitId":"simbayippy"},"content":" if (tokens.length \u003d\u003d 0 || tokens[1].isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":268,"author":{"gitId":"simbayippy"},"content":" throw new EmptyDescriptionException(\"Task description cannot be empty\");","lastModifiedDate":"2023-08-29"},{"lineNumber":269,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":270,"author":{"gitId":"simbayippy"},"content":" String detailsWithKeyword \u003d tokens[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":271,"author":{"gitId":"simbayippy"},"content":" int endIndex \u003d detailsWithKeyword.indexOf(commandAndKeyword[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":272,"author":{"gitId":"simbayippy"},"content":" if (endIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":273,"author":{"gitId":"simbayippy"},"content":" throw new MissingKeywordException(\"Missing keyword: \" + commandAndKeyword[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":274,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":275,"author":{"gitId":"simbayippy"},"content":" String toReturn \u003d detailsWithKeyword.substring(0, endIndex).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":276,"author":{"gitId":"simbayippy"},"content":" if (toReturn.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":277,"author":{"gitId":"simbayippy"},"content":" throw new EmptyDescriptionException(\"Task description cannot be empty\");","lastModifiedDate":"2023-08-29"},{"lineNumber":278,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":279,"author":{"gitId":"simbayippy"},"content":" return toReturn;","lastModifiedDate":"2023-08-29"},{"lineNumber":280,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":281,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":282,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":283,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":284,"author":{"gitId":"simbayippy"},"content":" * Extracts the details after the keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":285,"author":{"gitId":"simbayippy"},"content":" * E.g. event go to school /from mon 2pm /to tues 3pm","lastModifiedDate":"2023-08-29"},{"lineNumber":286,"author":{"gitId":"simbayippy"},"content":" * -\u003e extracts `mon 2pm`","lastModifiedDate":"2023-08-29"},{"lineNumber":287,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":288,"author":{"gitId":"simbayippy"},"content":" * @param userInput string input by user.","lastModifiedDate":"2023-08-29"},{"lineNumber":289,"author":{"gitId":"simbayippy"},"content":" * @param keywords the keywords in use","lastModifiedDate":"2023-08-29"},{"lineNumber":290,"author":{"gitId":"simbayippy"},"content":" * @return string after keyword/ between 2 keywords.","lastModifiedDate":"2023-08-29"},{"lineNumber":291,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":292,"author":{"gitId":"simbayippy"},"content":" private String extractAfterKeyword(String userInput, String... keywords) throws EmptyDescriptionException {","lastModifiedDate":"2023-08-29"},{"lineNumber":293,"author":{"gitId":"simbayippy"},"content":" String[] tokens \u003d userInput.toLowerCase().split(keywords[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":294,"author":{"gitId":"simbayippy"},"content":" if (tokens.length \u003d\u003d 1 || tokens[1].isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":295,"author":{"gitId":"simbayippy"},"content":" throw new EmptyDescriptionException(\"Details after \" + keywords[0] + \" cannot be empty\");","lastModifiedDate":"2023-08-29"},{"lineNumber":296,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":297,"author":{"gitId":"simbayippy"},"content":" if (keywords.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":298,"author":{"gitId":"simbayippy"},"content":" return tokens[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":299,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":300,"author":{"gitId":"simbayippy"},"content":" // last case if there are 2 keywords, such as /from and /to","lastModifiedDate":"2023-08-29"},{"lineNumber":301,"author":{"gitId":"simbayippy"},"content":" // -\u003e return the in between of these 2 keywords","lastModifiedDate":"2023-08-29"},{"lineNumber":302,"author":{"gitId":"simbayippy"},"content":" String[] tokensAfterSecondKeyword \u003d tokens[1].split(keywords[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":303,"author":{"gitId":"simbayippy"},"content":" if (tokensAfterSecondKeyword[0].isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":304,"author":{"gitId":"simbayippy"},"content":" throw new EmptyDescriptionException(\"Details after \" + keywords[0] + \" cannot be empty\");","lastModifiedDate":"2023-08-29"},{"lineNumber":305,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":306,"author":{"gitId":"simbayippy"},"content":" return tokensAfterSecondKeyword[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":307,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":308,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":309,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":310,"author":{"gitId":"simbayippy"},"content":" * the method isInteger to judge whether input is integer","lastModifiedDate":"2023-08-29"},{"lineNumber":311,"author":{"gitId":"simbayippy"},"content":" * @param input","lastModifiedDate":"2023-08-29"},{"lineNumber":312,"author":{"gitId":"simbayippy"},"content":" * @return boolean","lastModifiedDate":"2023-08-29"},{"lineNumber":313,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":314,"author":{"gitId":"simbayippy"},"content":" private boolean isInteger(String input) {","lastModifiedDate":"2023-08-29"},{"lineNumber":315,"author":{"gitId":"simbayippy"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":316,"author":{"gitId":"simbayippy"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":317,"author":{"gitId":"simbayippy"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":318,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":319,"author":{"gitId":"simbayippy"},"content":" Integer.parseInt(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":320,"author":{"gitId":"simbayippy"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":321,"author":{"gitId":"simbayippy"},"content":" } catch (NumberFormatException nfe) {","lastModifiedDate":"2023-08-29"},{"lineNumber":322,"author":{"gitId":"simbayippy"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":323,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":324,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":325,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":326,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"simbayippy":326}},{"path":"src/main/java/seedu/duke/utils/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.utils;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" * Storage","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" private String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" private final DateTimeFormatter timeFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" * constructor for Storage class","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" * @param filePath file path of duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" * Write the TaskList to file","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" * @param taskList TaskList to be written to duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":" public void writeFile(TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":" // don\u0027t have to handle case of file path not existing as","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" // during readFile (which occurs at start of script, checks if filepath exists)","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":" FileWriter writer \u003d new FileWriter(file);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" for (Task task : taskList.returnTaskList()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":" writer.write(task.writeFormat() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"simbayippy"},"content":" writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"simbayippy"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"Error while saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"simbayippy"},"content":" * Read from duke.txt file","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"simbayippy"},"content":" * @param ui UI to display to users","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"simbayippy"},"content":" * @return Tasklist","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"simbayippy"},"content":" * @throws IOException throws any error","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"simbayippy"},"content":" public TaskList readFile(Ui ui) throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"simbayippy"},"content":" TaskList taskList \u003d new TaskList(ui); // Create an empty task list","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"simbayippy"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"simbayippy"},"content":" File myData \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"simbayippy"},"content":" Scanner scanner \u003d new Scanner(myData);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"simbayippy"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"simbayippy"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"simbayippy"},"content":" Task task \u003d parseTaskFromLine(line);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"simbayippy"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"simbayippy"},"content":" // this adds to taskList without printing anything","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"simbayippy"},"content":" taskList.addAvailTasks(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"simbayippy"},"content":" scanner.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"simbayippy"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"simbayippy"},"content":" if (new File(\"data\").mkdir()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"data folder does not exist, create now\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"simbayippy"},"content":" } else if (new File(\"data/duke.txt\").createNewFile()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"simbayippy"},"content":" System.out.println(\"duke.txt file not exist, create now\");","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"simbayippy"},"content":" return taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"simbayippy"},"content":" * helper function","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"simbayippy"},"content":" * @param line line","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"simbayippy"},"content":" * @return Task","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"simbayippy"},"content":" private Task parseTaskFromLine(String line) {","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"simbayippy"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"simbayippy"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"simbayippy"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"simbayippy"},"content":" boolean isMarked \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"simbayippy"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"simbayippy"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"simbayippy"},"content":" return new Todo(description, isMarked);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"simbayippy"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"simbayippy"},"content":" LocalDateTime byDate \u003d LocalDateTime.parse(parts[3], timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"simbayippy"},"content":" return new Deadline(description, byDate, isMarked);","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"simbayippy"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"simbayippy"},"content":" LocalDateTime from \u003d LocalDateTime.parse(parts[3], timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"simbayippy"},"content":" LocalDateTime to \u003d LocalDateTime.parse(parts[4], timeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"simbayippy"},"content":" return new Event(description, from, to, isMarked);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"simbayippy"},"content":" // Add cases for other task types (e.g., Event) as needed","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"simbayippy"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"simbayippy"},"content":" return null; // Unknown task type, skip","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"simbayippy":111}},{"path":"src/main/java/seedu/duke/utils/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke.utils;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.exceptions.TaskException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" * TaskList class","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" private List\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" * TaskList constructor","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" * @param ui Ui instance it uses to display messages to user","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" public TaskList(Ui ui) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" this.taskList \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"simbayippy"},"content":" * Adds task to the TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"simbayippy"},"content":" * @param task Task to add","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"simbayippy"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"simbayippy"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"simbayippy"},"content":" ui.printAddingTask(task, taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"simbayippy"},"content":" * Adds task to TaskList. Used for initial read of duke.txt, no interface/ comments to user","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"simbayippy"},"content":" * @param task task to add from duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"simbayippy"},"content":" public void addAvailTasks(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"simbayippy"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"simbayippy"},"content":" * uses Ui to print to user all avail tasks","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"simbayippy"},"content":" public void listAllTasks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"simbayippy"},"content":" ui.printAllTasks(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"simbayippy"},"content":" * returns the current TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"simbayippy"},"content":" * @return TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"simbayippy"},"content":" public List\u003cTask\u003e returnTaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"simbayippy"},"content":" return taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"simbayippy"},"content":" * Deletes the Task at the specified index from TaskList","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"simbayippy"},"content":" * @param i index of Task to be removed","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"simbayippy"},"content":" * @throws TaskException if any error","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"simbayippy"},"content":" public void deleteTask(int i) throws TaskException {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"simbayippy"},"content":" if (i \u003e taskList.size()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"simbayippy"},"content":" throw new TaskException(\"Invalid task index. Valid indexes from 1 to \" + taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"simbayippy"},"content":" Task taskToDekete \u003d taskList.get(i - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"simbayippy"},"content":" taskList.remove(i - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"simbayippy"},"content":" ui.printDeleteTask(taskToDekete);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"simbayippy"},"content":" * marks task","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"simbayippy"},"content":" * @param i task to mark","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"simbayippy"},"content":" * @throws TaskException error thrown","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"simbayippy"},"content":" public void mark(int i) throws TaskException {","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"simbayippy"},"content":" if (i \u003e taskList.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"simbayippy"},"content":" throw new TaskException(\"Invalid task index. Valid indexes from 1 to \" + taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"simbayippy"},"content":" Task taskToMark \u003d taskList.get(i - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"simbayippy"},"content":" boolean beforeMarking \u003d taskToMark.isMarked();","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"simbayippy"},"content":" if (!taskToMark.isMarked()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"simbayippy"},"content":" taskToMark.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"simbayippy"},"content":" ui.printMarkTask(taskToMark, beforeMarking);","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"simbayippy"},"content":" * unMarks task","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"simbayippy"},"content":" * @param i task to unmark","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"simbayippy"},"content":" * @throws TaskException error thrown","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"simbayippy"},"content":" public void unMark(int i) throws TaskException {","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"simbayippy"},"content":" if (i \u003e taskList.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"simbayippy"},"content":" throw new TaskException(\"Invalid task index. Valid indexes from 1 to \" + taskList.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"simbayippy"},"content":" Task taskToMark \u003d taskList.get(i - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"simbayippy"},"content":" boolean beforeMarking \u003d taskToMark.isMarked();","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"simbayippy"},"content":" if (taskToMark.isMarked()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"simbayippy"},"content":" taskToMark.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"simbayippy"},"content":" ui.printUnMarkTask(taskToMark, beforeMarking);","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"simbayippy"},"content":" * returns all Tasks on specified date","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"simbayippy"},"content":" * @param date date to check","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"simbayippy"},"content":" public void getTasksOnDate(LocalDate date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"simbayippy"},"content":" List\u003cTask\u003e tasksOnDate \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"simbayippy"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"simbayippy"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"simbayippy"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"simbayippy"},"content":" if (deadline.getByDate().isEqual(date)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"simbayippy"},"content":" tasksOnDate.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"simbayippy"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"simbayippy"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"simbayippy"},"content":" if (event.getFromDate().isEqual(date.atStartOfDay())) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"simbayippy"},"content":" tasksOnDate.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"simbayippy"},"content":" ui.printTasksOnDate(tasksOnDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"simbayippy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"simbayippy"},"content":" * returns all tasks with keyword","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"simbayippy"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"simbayippy"},"content":" * @param keyword keyword to check","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"simbayippy"},"content":" * @param taskList tasklist to operate on","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"simbayippy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"simbayippy"},"content":" public void findTasks(String keyword, TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"simbayippy"},"content":" List\u003cTask\u003e tasksWithKeyword \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"simbayippy"},"content":" for (Task task : taskList.returnTaskList()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"simbayippy"},"content":" String description \u003d task.getDescription();","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"simbayippy"},"content":" if (description.toLowerCase().contains(keyword.toLowerCase())) {","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"simbayippy"},"content":" tasksWithKeyword.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"simbayippy"},"content":" ui.printTasksOnDate(tasksWithKeyword);","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"simbayippy":155}},{"path":"src/test/java/seedu/duke/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":" private static DateTimeFormatter validFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" public void deadlineMarkTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" Deadline d \u003d new Deadline(\"return book\", LocalDateTime.parse(\"2020-02-20 12:00\", validFormat), false);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" d.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" assertEquals(\"[D][X] return book (by: 20 Feb 2020 12:00)\", d.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" public void deadlineWriteFormatTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" Deadline d \u003d new Deadline(\"CS2103T due\", LocalDateTime.parse(\"2021-08-22 17:19\", validFormat), false);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" String test \u003d d.writeFormat();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" assertEquals(\"D | 0 | CS2103T due | 2021-08-22 17:19\", test);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"simbayippy":29}},{"path":"src/test/java/seedu/duke/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"package seedu.duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"simbayippy"},"content":"import seedu.duke.tasks.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"simbayippy"},"content":"public class EventTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"simbayippy"},"content":" private static DateTimeFormatter validFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"simbayippy"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"simbayippy"},"content":" public void eventMarkTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"simbayippy"},"content":" Event e \u003d new Event(\"go to concert\", LocalDateTime.parse(\"2019-02-01 16:00\", validFormat),","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"simbayippy"},"content":" LocalDateTime.parse(\"2019-02-01 20:00\", validFormat), false);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"simbayippy"},"content":" e.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"simbayippy"},"content":" assertEquals(\"[E][X] go to concert (from:01 Feb 2019 16:00 to:01 Feb 2019 20:00)\", e.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"simbayippy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"simbayippy"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"simbayippy"},"content":" public void eventWriteFormatTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"simbayippy"},"content":" Event e \u003d new Event(\"go to concert\", LocalDateTime.parse(\"2019-02-01 16:00\", validFormat),","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"simbayippy"},"content":" LocalDateTime.parse(\"2019-02-01 20:00\", validFormat), false);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"simbayippy"},"content":" String test \u003d e.writeFormat();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"simbayippy"},"content":" assertEquals(\"E | 0 | go to concert | 2019-02-01 16:00 | 2019-02-01 20:00\", test);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"simbayippy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"simbayippy"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"simbayippy":30}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"simbayippy"},"content":"todo eat","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"simbayippy"},"content":"todo cs2103 IP","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"simbayippy"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"simbayippy"},"content":"deadline return book /by tues 3pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"simbayippy"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"simbayippy"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"simbayippy"},"content":"event meeting /at Monday","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"simbayippy"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"simbayippy"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"simbayippy":9}}] diff --git a/simbayippy_ip_master/commits.json b/simbayippy_ip_master/commits.json index 71e75145..45046c8a 100644 --- a/simbayippy_ip_master/commits.json +++ b/simbayippy_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"simbayippy":[{"date":"2023-08-22","commitResults":[{"hash":"05bcfaefa438ce58eaabd7c3684a3d42cd563688","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":3}}},{"hash":"f3120072aa7a6cfbaeeb4c62a0bcdd4568b9eac4","isMergeCommit":false,"messageTitle":"hii","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"d6a2cb3ac30027714f4f28d064950464ea01dc97","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-2","Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"af5bd8e103baf5900c63039627be8e6f6fea8c1d","isMergeCommit":false,"messageTitle":"adding Level-2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}}]},{"date":"2023-08-23","commitResults":[{"hash":"cb32a2f8bed1a8135a52cc0944b5b472a1e2a219","isMergeCommit":false,"messageTitle":"add Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":11}}},{"hash":"f2e8068dd1ae7c1caa22bddfa69dc157329dcdc4","isMergeCommit":false,"messageTitle":"Level-4 stuff","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":53}}},{"hash":"3cbd291491431da44878ab4043e50259df139ab7","isMergeCommit":false,"messageTitle":"Level-5 added exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":55}}},{"hash":"b1a027af3a0d4055a5e8a6bfb0d2a11c38138bb5","isMergeCommit":false,"messageTitle":"Level-6 delete things","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":7}}},{"hash":"e377bab58c98df6fda2375420c558ff237e4a2f8","isMergeCommit":false,"messageTitle":"testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"4c7cda1cb33e8f2a9171c23f23c3b450062f8ffe","isMergeCommit":false,"messageTitle":"updated code","messageBody":"","tags":["Level-6-updated"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":3},"java":{"insertions":8,"deletions":15}}}]},{"date":"2023-08-28","commitResults":[{"hash":"6197a7c5fe97fe2cfcf8b328780038d905414192","isMergeCommit":false,"messageTitle":"update?","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":243,"deletions":178}}},{"hash":"8f8208e037847be8de81ab3b28798508a9136d63","isMergeCommit":false,"messageTitle":"level 7 stuff","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":95,"deletions":32}}},{"hash":"1650569647542449766ca0c9cf3b3406485f5bbb","isMergeCommit":false,"messageTitle":"added support for dates","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":122,"deletions":23}}}]},{"date":"2023-08-29","commitResults":[{"hash":"17649dd5c3a03edd98409fbcf8e63188cf76b554","isMergeCommit":false,"messageTitle":"moreOop save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":382,"deletions":35}}},{"hash":"df039c8cfc78c7b04f6032bcdcb02040805dcf9c","isMergeCommit":false,"messageTitle":"added more oop stuff","messageBody":"","tags":["A-MoreOOP","A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":2},"java":{"insertions":209,"deletions":434}}},{"hash":"093cbb6dafb7152fe6fd55752eb7349364da9e70","isMergeCommit":false,"messageTitle":"packaging code","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":8}}},{"hash":"888988218ca49e1477a1058234e9c6c0dd84255d","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"* add-gradle-support:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"c8b63bce76ddc8407c74b54c22d22d98a0213e2d","isMergeCommit":false,"messageTitle":"gradle things","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":6},"txt":{"insertions":0,"deletions":1}}},{"hash":"16d0a6cbd305ce5fa2e59cf21cd7729d6a627fa7","isMergeCommit":false,"messageTitle":"added testing details","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1},"txt":{"insertions":2,"deletions":0},"java":{"insertions":121,"deletions":58}}},{"hash":"2d6fa1c47297dd75ab7172d701c28cae1a9f26f5","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":375,"deletions":100}}},{"hash":"3f2873638570024cf92fa658fab955adfce80d0b","isMergeCommit":false,"messageTitle":"Level 9 done","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":50,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"simbayippy":{"java":1076,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":10,"txt":24}},"authorContributionVariance":{"simbayippy":285191.25},"authorDisplayNameMap":{"simbayippy":"CS2103T-W09-3 YIP ..HANG"}} +{"authorDailyContributionsMap":{"simbayippy":[{"date":"2023-08-22","commitResults":[{"hash":"05bcfaefa438ce58eaabd7c3684a3d42cd563688","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":3}}},{"hash":"f3120072aa7a6cfbaeeb4c62a0bcdd4568b9eac4","isMergeCommit":false,"messageTitle":"hii","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"d6a2cb3ac30027714f4f28d064950464ea01dc97","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-2","Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"af5bd8e103baf5900c63039627be8e6f6fea8c1d","isMergeCommit":false,"messageTitle":"adding Level-2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}}]},{"date":"2023-08-23","commitResults":[{"hash":"cb32a2f8bed1a8135a52cc0944b5b472a1e2a219","isMergeCommit":false,"messageTitle":"add Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":11}}},{"hash":"f2e8068dd1ae7c1caa22bddfa69dc157329dcdc4","isMergeCommit":false,"messageTitle":"Level-4 stuff","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":53}}},{"hash":"3cbd291491431da44878ab4043e50259df139ab7","isMergeCommit":false,"messageTitle":"Level-5 added exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":55}}},{"hash":"b1a027af3a0d4055a5e8a6bfb0d2a11c38138bb5","isMergeCommit":false,"messageTitle":"Level-6 delete things","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":7}}},{"hash":"e377bab58c98df6fda2375420c558ff237e4a2f8","isMergeCommit":false,"messageTitle":"testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"4c7cda1cb33e8f2a9171c23f23c3b450062f8ffe","isMergeCommit":false,"messageTitle":"updated code","messageBody":"","tags":["Level-6-updated"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":3},"java":{"insertions":8,"deletions":15}}}]},{"date":"2023-08-28","commitResults":[{"hash":"6197a7c5fe97fe2cfcf8b328780038d905414192","isMergeCommit":false,"messageTitle":"update?","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":243,"deletions":178}}},{"hash":"8f8208e037847be8de81ab3b28798508a9136d63","isMergeCommit":false,"messageTitle":"level 7 stuff","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":95,"deletions":32}}},{"hash":"1650569647542449766ca0c9cf3b3406485f5bbb","isMergeCommit":false,"messageTitle":"added support for dates","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":122,"deletions":23}}}]},{"date":"2023-08-29","commitResults":[{"hash":"17649dd5c3a03edd98409fbcf8e63188cf76b554","isMergeCommit":false,"messageTitle":"moreOop save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":382,"deletions":35}}},{"hash":"df039c8cfc78c7b04f6032bcdcb02040805dcf9c","isMergeCommit":false,"messageTitle":"added more oop stuff","messageBody":"","tags":["A-MoreOOP","A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":2},"java":{"insertions":209,"deletions":434}}},{"hash":"093cbb6dafb7152fe6fd55752eb7349364da9e70","isMergeCommit":false,"messageTitle":"packaging code","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":8}}},{"hash":"888988218ca49e1477a1058234e9c6c0dd84255d","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"* add-gradle-support:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"c8b63bce76ddc8407c74b54c22d22d98a0213e2d","isMergeCommit":false,"messageTitle":"gradle things","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":6},"txt":{"insertions":0,"deletions":1}}},{"hash":"16d0a6cbd305ce5fa2e59cf21cd7729d6a627fa7","isMergeCommit":false,"messageTitle":"added testing details","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1},"txt":{"insertions":2,"deletions":0},"java":{"insertions":121,"deletions":58}}},{"hash":"2d6fa1c47297dd75ab7172d701c28cae1a9f26f5","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":375,"deletions":100}}},{"hash":"3f2873638570024cf92fa658fab955adfce80d0b","isMergeCommit":false,"messageTitle":"Level 9 done","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":50,"deletions":2}}}]},{"date":"2023-09-05","commitResults":[{"hash":"9bd712e60aef6626b5831a8707d8c22c4f9aa0e1","isMergeCommit":false,"messageTitle":"checkstyle done in the past already","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":2,"deletions":3}}}]}]},"authorFileTypeContributionMap":{"simbayippy":{"java":1075,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":10,"txt":28}},"authorContributionVariance":{"simbayippy":196368.11},"authorDisplayNameMap":{"simbayippy":"CS2103T-W09-3 YIP ..HANG"}} diff --git a/sopa301_ip_master/authorship.json b/sopa301_ip_master/authorship.json index 2d111ed8..f760c502 100644 --- a/sopa301_ip_master/authorship.json +++ b/sopa301_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":"sopa301"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-26"},{"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":"sopa301"},"content":" mainClass.set(\"bot.Bot\")","lastModifiedDate":"2023-08-26"},{"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":"sopa301"},"content":" archiveBaseName \u003d \"bot\"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":"checkstyle {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":7,"-":40}},{"path":"src/main/java/bot/Bot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.BotException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.LoadingException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.Command;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.utils.Parser;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Main class for the bot.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"public class Bot {","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" * Bot.Storage object for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" * User interface for interacting with the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * Bot.Task list for storing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * Creates the bot with the given file path as data storage point.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" * @param filePath Path to data storage.","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" public Bot(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" tasks \u003d new TaskList(storage.load(this.ui));","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" } catch (LoadingException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" * Main function of program.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" * @param args Optional arguments. It currently does nothing.","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" new Bot(\"./data/tasks.txt\").run();","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" * Runs the bot with the file path it was constructed with.","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" public void run() {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" String rawCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" Command c \u003d Parser.parse(rawCommand);","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" } catch (BotException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"sopa301":71}},{"path":"src/main/java/bot/enums/DoneStatus.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.enums;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Indicates whether a task is done or not.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public enum DoneStatus {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Indicates task is done.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" DONE,","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Indicates task is not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" NOT_DONE","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":15}},{"path":"src/main/java/bot/exceptions/BotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Supertype of all exceptions that occur specific to the bot.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class BotException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * @param msg Message to be displayed when getMessage is called.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" public BotException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":16}},{"path":"src/main/java/bot/exceptions/EmptyListException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when the task list is empty and a function requires an","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" * item in the task list.","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"public class EmptyListException extends BotException {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" public EmptyListException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" super(\"Oops, there are no tasks in your list!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":14}},{"path":"src/main/java/bot/exceptions/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when invalid arguments are provided to a command.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidArgumentException extends BotException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" public InvalidArgumentException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" super(\"Sorry, but that command can\u0027t be done with the provided argument(s).\");","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Creates an InvalidArgumentException with the provided string as the error","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" * message.","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * @param str Error message.","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" public InvalidArgumentException(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" super(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":23}},{"path":"src/main/java/bot/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when an invalid command is sent to the bot.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidCommandException extends BotException {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor. Currently set to Trash Gremlin Caelus personality.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" super(\"Sorry, I dunno what you\u0027re saying. Must be the trash getting to my brain.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"sopa301":13}},{"path":"src/main/java/bot/exceptions/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when an index is given that is out of range for the requested operation.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidIndexException extends InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" public InvalidIndexException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" super(\"Sorry, that index doesn\u0027t exist. Please key in a valid index.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Constructor with variable message.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * @param msg Message to be displayed when getMessage is called.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" public InvalidIndexException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":22}},{"path":"src/main/java/bot/exceptions/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for incorrect inputs when creating a Task object.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidTaskException extends InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Constructor with variable message.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * @param msg Message to be displayed when getMessage is called.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" public InvalidTaskException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":15}},{"path":"src/main/java/bot/exceptions/LoadingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when the storage class fails to load or save data for any reason.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class LoadingException extends BotException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Creates a LoadingException with the given string as the error message.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * @param str Error message.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" public LoadingException(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" super(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":15}},{"path":"src/main/java/bot/utils/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.enums.DoneStatus;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.EmptyListException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidArgumentException;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Command abstraction for executing commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" * Regex pattern for delete commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" private static final Pattern PATTERN_DELETE \u003d Pattern.compile(\"delete -?\\\\d+\");","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" * Regex pattern for mark commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" private static final Pattern PATTERN_MARK \u003d Pattern.compile(\"mark -?\\\\d+\");","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * Regex pattern for unmark commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" private static final Pattern PATTERN_UNMARK \u003d Pattern.compile(\"unmark -?\\\\d+\");","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * Default constructor. Does nothing.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" public Command() {}","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" * Creates an ExitCommand to indicate the end of the program.","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" * @return ExitCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" public static Command exit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" * Creates a ListCommand to instruct the bot to display the items in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" * @return ListCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" public static Command list() {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" * Creates a MarkCommand to instruct the bot to mark the task at the given index","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" * in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" * @return MarkCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" * @throws InvalidArgumentException If the string doesn\u0027t contain an int.","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" public static Command mark(String str) throws InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" if (!PATTERN_MARK.matcher(str).matches()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" int index \u003d Integer.parseInt(str.substring(5));","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" return new MarkCommand(index, DoneStatus.DONE);","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * Creates a MarkCommand to instruct the bot to unmark the task at the given index","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" * @return MarkCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" * @throws InvalidArgumentException If the string doesn\u0027t contain an int.","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" public static Command unmark(String str) throws InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" if (!PATTERN_UNMARK.matcher(str).matches()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" int index \u003d Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" return new MarkCommand(index, DoneStatus.NOT_DONE);","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" * Creates an AddCommand to instruct the bot to add a task to the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" * @return AddCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" public static Command add(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" return new AddCommand(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" * Creates a MarkCommand to instruct the bot to delete the task at the given index","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" * in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" * @return DeleteCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":" * @throws InvalidArgumentException If the string doesn\u0027t contain an int.","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" public static Command delete(String str) throws InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" if (!PATTERN_DELETE.matcher(str).matches()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" int index \u003d Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":" * Creates a FindCommand to instruct the bot to look for tasks that meet specific criteria.","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" * @return FindCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" public static Command find(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":" return new FindCommand(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":" * @param tasks Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"sopa301"},"content":" * @param storage Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"sopa301"},"content":" * @throws EmptyListException If an illegal operation is performed on an empty list.","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If the command tries to access an invalid index.","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the command creates a task and fails to do so.","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"sopa301"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws EmptyListException,","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"sopa301"},"content":" InvalidIndexException, InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"sopa301"},"content":" * Bot.Command to indicate the end of the program.","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"sopa301"},"content":" private static class ExitCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":146,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":148,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":149,"author":{"gitId":"sopa301"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":151,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":159,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":160,"author":{"gitId":"sopa301"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-26"},{"lineNumber":161,"author":{"gitId":"sopa301"},"content":" ui.showGoodbye();","lastModifiedDate":"2023-08-26"},{"lineNumber":162,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":163,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":165,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":166,"author":{"gitId":"sopa301"},"content":" * Bot.Command to list all tasks in the task list.","lastModifiedDate":"2023-08-26"},{"lineNumber":167,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":168,"author":{"gitId":"sopa301"},"content":" private static class ListCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":169,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":170,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":171,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":172,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":173,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":174,"author":{"gitId":"sopa301"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":175,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":176,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":177,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":178,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":179,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":180,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":181,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":182,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":183,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":184,"author":{"gitId":"sopa301"},"content":" * @throws EmptyListException If an illegal operation is performed on an empty list.","lastModifiedDate":"2023-08-26"},{"lineNumber":185,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":186,"author":{"gitId":"sopa301"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws EmptyListException {","lastModifiedDate":"2023-08-26"},{"lineNumber":187,"author":{"gitId":"sopa301"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":188,"author":{"gitId":"sopa301"},"content":" throw new EmptyListException();","lastModifiedDate":"2023-08-26"},{"lineNumber":189,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":190,"author":{"gitId":"sopa301"},"content":" ui.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":191,"author":{"gitId":"sopa301"},"content":" ui.displayTaskList(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":192,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":193,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":194,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":195,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":196,"author":{"gitId":"sopa301"},"content":" * Bot.Command to mark the task as done or not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":197,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":198,"author":{"gitId":"sopa301"},"content":" private static class MarkCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":199,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":200,"author":{"gitId":"sopa301"},"content":" * Index to mark the task at.","lastModifiedDate":"2023-08-26"},{"lineNumber":201,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":202,"author":{"gitId":"sopa301"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":204,"author":{"gitId":"sopa301"},"content":" * Mark the task as done or not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":205,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":206,"author":{"gitId":"sopa301"},"content":" private DoneStatus done;","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":208,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":209,"author":{"gitId":"sopa301"},"content":" * Creates a MarkCommand with the command to mark or unmark the task","lastModifiedDate":"2023-08-26"},{"lineNumber":210,"author":{"gitId":"sopa301"},"content":" * at the given index.","lastModifiedDate":"2023-08-26"},{"lineNumber":211,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":212,"author":{"gitId":"sopa301"},"content":" * @param index Index to mark the task at.","lastModifiedDate":"2023-08-26"},{"lineNumber":213,"author":{"gitId":"sopa301"},"content":" * @param done Mark the task as done or not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":214,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":215,"author":{"gitId":"sopa301"},"content":" protected MarkCommand(int index, DoneStatus done) {","lastModifiedDate":"2023-08-26"},{"lineNumber":216,"author":{"gitId":"sopa301"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":217,"author":{"gitId":"sopa301"},"content":" this.done \u003d done;","lastModifiedDate":"2023-08-26"},{"lineNumber":218,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":219,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":220,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":221,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":222,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":223,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":224,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":225,"author":{"gitId":"sopa301"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":226,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":227,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":228,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":229,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":230,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":231,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":232,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":233,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":234,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":235,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If the command tries to access an invalid index.","lastModifiedDate":"2023-08-26"},{"lineNumber":236,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":237,"author":{"gitId":"sopa301"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":238,"author":{"gitId":"sopa301"},"content":" if (done.equals(DoneStatus.DONE)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":239,"author":{"gitId":"sopa301"},"content":" tasks.mark(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":240,"author":{"gitId":"sopa301"},"content":" ui.println(\"I\u0027ll mark this as done:\\n\" + tasks.get(index).toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":241,"author":{"gitId":"sopa301"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":242,"author":{"gitId":"sopa301"},"content":" tasks.unmark(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":243,"author":{"gitId":"sopa301"},"content":" ui.println(\"I\u0027ll mark this as not done:\\n\" + tasks.get(index).toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":244,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":245,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":246,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":247,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":248,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":249,"author":{"gitId":"sopa301"},"content":" * Bot.Command to add tasks to the task list.","lastModifiedDate":"2023-08-26"},{"lineNumber":250,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":251,"author":{"gitId":"sopa301"},"content":" private static class AddCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":252,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":253,"author":{"gitId":"sopa301"},"content":" * Full command string","lastModifiedDate":"2023-08-26"},{"lineNumber":254,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":255,"author":{"gitId":"sopa301"},"content":" private String input;","lastModifiedDate":"2023-09-02"},{"lineNumber":256,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":257,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":258,"author":{"gitId":"sopa301"},"content":" * Creates an AddCommand with the full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":259,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":260,"author":{"gitId":"sopa301"},"content":" * @param input Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":261,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":262,"author":{"gitId":"sopa301"},"content":" protected AddCommand(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":263,"author":{"gitId":"sopa301"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-26"},{"lineNumber":264,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":265,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":266,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":267,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":268,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":269,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":270,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":271,"author":{"gitId":"sopa301"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":272,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":273,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":274,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":275,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":276,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":277,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":278,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":279,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":280,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":281,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the command creates a task and fails to do so.","lastModifiedDate":"2023-08-26"},{"lineNumber":282,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":283,"author":{"gitId":"sopa301"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":284,"author":{"gitId":"sopa301"},"content":" Task newTask \u003d Task.makeTask(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":285,"author":{"gitId":"sopa301"},"content":" ui.println(\"Added:\\n\" + newTask.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":286,"author":{"gitId":"sopa301"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":287,"author":{"gitId":"sopa301"},"content":" ui.println(\"Now you have \" + tasks.size() + \" task(s) in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":288,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":289,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":290,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":291,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":292,"author":{"gitId":"sopa301"},"content":" * Command to delete tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":293,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":294,"author":{"gitId":"sopa301"},"content":" private static class DeleteCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":295,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":296,"author":{"gitId":"sopa301"},"content":" * Index to delete task at.","lastModifiedDate":"2023-08-26"},{"lineNumber":297,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":298,"author":{"gitId":"sopa301"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":299,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":300,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":301,"author":{"gitId":"sopa301"},"content":" * Creates a DeleteCommand with the given index.","lastModifiedDate":"2023-08-26"},{"lineNumber":302,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":303,"author":{"gitId":"sopa301"},"content":" * @param index Index to delete task at.","lastModifiedDate":"2023-08-26"},{"lineNumber":304,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":305,"author":{"gitId":"sopa301"},"content":" protected DeleteCommand(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":306,"author":{"gitId":"sopa301"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":307,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":308,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":309,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":310,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":311,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":312,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":313,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":314,"author":{"gitId":"sopa301"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":315,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":316,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":317,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":318,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":319,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":320,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":321,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":322,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":323,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":324,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If the command tries to access an invalid index.","lastModifiedDate":"2023-08-26"},{"lineNumber":325,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":326,"author":{"gitId":"sopa301"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":327,"author":{"gitId":"sopa301"},"content":" Task task \u003d tasks.remove(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":328,"author":{"gitId":"sopa301"},"content":" System.out.println(\"I\u0027ve removed this task:\\n\" + task.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":329,"author":{"gitId":"sopa301"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" task(s) in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":330,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":331,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":332,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":333,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":334,"author":{"gitId":"sopa301"},"content":" * Command for finding specific tasks in the task list.","lastModifiedDate":"2023-08-26"},{"lineNumber":335,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":336,"author":{"gitId":"sopa301"},"content":" private static class FindCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":337,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":338,"author":{"gitId":"sopa301"},"content":" * Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":339,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":340,"author":{"gitId":"sopa301"},"content":" private String input;","lastModifiedDate":"2023-09-02"},{"lineNumber":341,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":342,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":343,"author":{"gitId":"sopa301"},"content":" * Creates an FindCommand with the full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":344,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":345,"author":{"gitId":"sopa301"},"content":" * @param input Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":346,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":347,"author":{"gitId":"sopa301"},"content":" protected FindCommand(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":348,"author":{"gitId":"sopa301"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-26"},{"lineNumber":349,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":350,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":351,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":352,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":353,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":354,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":355,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":356,"author":{"gitId":"sopa301"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":357,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":358,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":359,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":360,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":361,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":362,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":363,"author":{"gitId":"sopa301"},"content":" * @param tasks Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":364,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":365,"author":{"gitId":"sopa301"},"content":" * @param storage Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":366,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":367,"author":{"gitId":"sopa301"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-26"},{"lineNumber":368,"author":{"gitId":"sopa301"},"content":" TaskList queries \u003d tasks.findAll(input.substring(5).trim());","lastModifiedDate":"2023-08-26"},{"lineNumber":369,"author":{"gitId":"sopa301"},"content":" if (queries.size() \u003e 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":370,"author":{"gitId":"sopa301"},"content":" ui.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":371,"author":{"gitId":"sopa301"},"content":" ui.displayTaskList(queries);","lastModifiedDate":"2023-08-26"},{"lineNumber":372,"author":{"gitId":"sopa301"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":373,"author":{"gitId":"sopa301"},"content":" ui.println(\"Sorry, no matching tasks found.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":374,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":375,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":376,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":377,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":377}},{"path":"src/main/java/bot/utils/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidArgumentException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" * Abstraction for making sense of user commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" * Default constructor. It does nothing as the parser is not meant to","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * be instantiated.","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" public Parser() {}","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * Parses the command string into a command to be executed.","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * Does not guarantee the command is syntactically correct.","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * @return Command object.","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * @throws InvalidArgumentException If the arguments are clearly invalid.","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" public static Command parse(String str) throws InvalidCommandException, InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" if (str.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" return Command.exit();","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" } else if (str.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" return Command.list();","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" } else if (str.startsWith(\"mark \") || str.equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" return Command.mark(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" } else if (str.startsWith(\"unmark \") || str.equals(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" return Command.unmark(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" } else if (Task.isTaskCommand(str)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" return Command.add(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" } else if (str.startsWith(\"delete \") || str.equals(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" return Command.delete(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" } else if (str.startsWith(\"find \") || str.equals(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" return Command.find(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":44}},{"path":"src/main/java/bot/utils/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.LoadingException;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * Abstraction for storing and loading data from a local file.","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * File path for loading and saving data.","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * Creates a Storage object that stores and loads data at that file path.","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * @param filePath Path to file.","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" * Loads data from that file path, and creates the file if it doesn\u0027t exist.","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" * @param ui UI for displaying messages.","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" * @return ArrayList of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" * @throws LoadingException If the data file cannot be read or created.","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" public ArrayList\u003cTask\u003e load(Ui ui) throws LoadingException {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" File parent \u003d new File(f.getParent());","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" if (f.isFile()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" Scanner scanner \u003d new Scanner(f);","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" tasks.add(Task.convertFromString(scanner.nextLine()));","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" ui.println(\"Invalid task, skipping...\");","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" ui.println(\"No data found, creating...\");","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" if (!parent.isDirectory()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" parent.mkdirs();","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" } catch (IOException | SecurityException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" throw new LoadingException(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" return tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" * Saves task list to file named at filePath. Assumes the file has been created.","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" * @param lst Bot.Task list to save to file.","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * @throws LoadingException If the list cannot be saved fully.","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" public void save(TaskList lst) throws LoadingException {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" FileWriter fw \u003d new FileWriter(f);","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" for (int i \u003d 1; i \u003c lst.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" fw.write(lst.get(i).convertToDataString());","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" fw.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" if (lst.size() \u003e 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" fw.write(lst.get(lst.size()).convertToDataString());","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" fw.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" throw new LoadingException(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":86}},{"path":"src/main/java/bot/utils/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" * Abstract task class for tasks that can be created for the task list in the chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Name of the task.","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" private String name;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * Indicates if the task is completed.","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * @param name Name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" * @param name Name of the task.","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" protected Task(String name, boolean isDone) {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" * Creates a task based on the string input. Throws an InvalidTaskException","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" * if no task can be created from the string.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create task from.","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" * @return Task object containing information from the string.","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If no task can be created.","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" public static Task makeTask(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" Task newTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" newTask \u003d ToDo.makeToDo(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" } else if (str.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" newTask \u003d Deadline.makeDeadline(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" newTask \u003d Event.makeEvent(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" return newTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and constructs a Task object based on the information.","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" * @param str Data string.","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" * @return Bot.Task object.","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the task object cannot be created from the string.","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" public static Task convertFromString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"t\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" return ToDo.convertFromString(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"d\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" return Deadline.convertFromString(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" return Event.convertFromString(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" * Checks if the raw string contains a task command.","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to check.","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" * @return True if a task command is found, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" public static boolean isTaskCommand(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" return str.startsWith(\"todo \") || str.startsWith(\"event \") || str.startsWith(\"deadline \");","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" * Gets completion status of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" * @return True if the task is complete, false otherwise.","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" @SuppressWarnings(\"BooleanMethodIsAlwaysInverted\")","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" protected boolean isDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" return this.isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" * Gets the name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" * @return Name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" protected String getName() {","lastModifiedDate":"2023-08-20"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" return this.name;","lastModifiedDate":"2023-08-20"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":" * Gets the string representation of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" * @return String representation of task.","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":" return \"[\" + (this.isDone() ? \"X\" : \" \") + \"] \" + this.getName();","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":" * Changes the task\u0027s completion status to complete.","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" public void mark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" * Changes the task\u0027s completion status to incomplete.","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":" public void unmark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":130,"author":{"gitId":"sopa301"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":131,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":132,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":134,"author":{"gitId":"sopa301"},"content":" * Creates data string of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":135,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":136,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-08-25"},{"lineNumber":137,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":138,"author":{"gitId":"sopa301"},"content":" public abstract String convertToDataString();","lastModifiedDate":"2023-08-25"},{"lineNumber":139,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":140,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"sopa301"},"content":" * ToDo subclass. Contains a name.","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"sopa301"},"content":" public static class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":144,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"sopa301"},"content":" * @param name Name of task.","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"sopa301"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-20"},{"lineNumber":150,"author":{"gitId":"sopa301"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":151,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":152,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":154,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-08-25"},{"lineNumber":155,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":156,"author":{"gitId":"sopa301"},"content":" * @param name Name of ToDo.","lastModifiedDate":"2023-08-25"},{"lineNumber":157,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of Todo.","lastModifiedDate":"2023-08-25"},{"lineNumber":158,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":159,"author":{"gitId":"sopa301"},"content":" protected ToDo(String name, boolean isDone) {","lastModifiedDate":"2023-08-25"},{"lineNumber":160,"author":{"gitId":"sopa301"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-25"},{"lineNumber":161,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":162,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":163,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":164,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and creates a ToDo object.","lastModifiedDate":"2023-08-25"},{"lineNumber":165,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":166,"author":{"gitId":"sopa301"},"content":" * @param str Data string to read.","lastModifiedDate":"2023-08-25"},{"lineNumber":167,"author":{"gitId":"sopa301"},"content":" * @return ToDo object.","lastModifiedDate":"2023-08-25"},{"lineNumber":168,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If an object cannot be created.","lastModifiedDate":"2023-08-25"},{"lineNumber":169,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":170,"author":{"gitId":"sopa301"},"content":" public static ToDo convertFromString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-25"},{"lineNumber":171,"author":{"gitId":"sopa301"},"content":" if (!str.matches(\"t/[01]/.+\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":172,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Could not read Todo.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":173,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":174,"author":{"gitId":"sopa301"},"content":" String[] arr \u003d str.split(\"/\");","lastModifiedDate":"2023-08-25"},{"lineNumber":175,"author":{"gitId":"sopa301"},"content":" return new ToDo(arr[2], arr[1].equals(\"1\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":176,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":177,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":178,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":179,"author":{"gitId":"sopa301"},"content":" * Checks for sameness of ToDo. ToDos are the same if they have the same name.","lastModifiedDate":"2023-08-26"},{"lineNumber":180,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":181,"author":{"gitId":"sopa301"},"content":" * @param o Object to compare to.","lastModifiedDate":"2023-08-26"},{"lineNumber":182,"author":{"gitId":"sopa301"},"content":" * @return True if objects are the same, else false.","lastModifiedDate":"2023-08-26"},{"lineNumber":183,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":184,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":185,"author":{"gitId":"sopa301"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":186,"author":{"gitId":"sopa301"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":187,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":188,"author":{"gitId":"sopa301"},"content":" } else if (o instanceof ToDo) {","lastModifiedDate":"2023-08-26"},{"lineNumber":189,"author":{"gitId":"sopa301"},"content":" return this.getName().equals(((ToDo) o).getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":190,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":191,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":192,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":193,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":194,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":195,"author":{"gitId":"sopa301"},"content":" * Creates a ToDo object.","lastModifiedDate":"2023-08-25"},{"lineNumber":196,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":197,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create the ToDo object from.","lastModifiedDate":"2023-08-25"},{"lineNumber":198,"author":{"gitId":"sopa301"},"content":" * @return ToDo object.","lastModifiedDate":"2023-08-25"},{"lineNumber":199,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If a ToDo object cannot be created from the string.","lastModifiedDate":"2023-08-25"},{"lineNumber":200,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":201,"author":{"gitId":"sopa301"},"content":" public static ToDo makeToDo(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-25"},{"lineNumber":202,"author":{"gitId":"sopa301"},"content":" String name \u003d str.substring(4).trim();","lastModifiedDate":"2023-08-25"},{"lineNumber":203,"author":{"gitId":"sopa301"},"content":" if (name.equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":204,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the todo description can\u0027t be empty.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":205,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":206,"author":{"gitId":"sopa301"},"content":" return new ToDo(name);","lastModifiedDate":"2023-08-25"},{"lineNumber":207,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":208,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":209,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":210,"author":{"gitId":"sopa301"},"content":" * String representation of the todo.","lastModifiedDate":"2023-08-26"},{"lineNumber":211,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":212,"author":{"gitId":"sopa301"},"content":" * @return String representation.","lastModifiedDate":"2023-08-26"},{"lineNumber":213,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":214,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":215,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":216,"author":{"gitId":"sopa301"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":217,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":218,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":219,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":220,"author":{"gitId":"sopa301"},"content":" * Get data string representation.","lastModifiedDate":"2023-08-26"},{"lineNumber":221,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":222,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-08-26"},{"lineNumber":223,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":224,"author":{"gitId":"sopa301"},"content":" public String convertToDataString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":225,"author":{"gitId":"sopa301"},"content":" return \"t/\" + (super.isDone() ? \"1\" : \"0\") + \"/\" + super.getName();","lastModifiedDate":"2023-08-26"},{"lineNumber":226,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":227,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":228,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":229,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":230,"author":{"gitId":"sopa301"},"content":" * Deadline subclass. Contains a name and a time the deadline is due.","lastModifiedDate":"2023-08-24"},{"lineNumber":231,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":232,"author":{"gitId":"sopa301"},"content":" public static class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":233,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":234,"author":{"gitId":"sopa301"},"content":" * The time the deadline is due.","lastModifiedDate":"2023-08-24"},{"lineNumber":235,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":236,"author":{"gitId":"sopa301"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-02"},{"lineNumber":237,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":238,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":239,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":240,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":241,"author":{"gitId":"sopa301"},"content":" * @param name Name of the deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":242,"author":{"gitId":"sopa301"},"content":" * @param by The time the deadline is due.","lastModifiedDate":"2023-08-24"},{"lineNumber":243,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":244,"author":{"gitId":"sopa301"},"content":" public Deadline(String name, LocalDate by) {","lastModifiedDate":"2023-08-25"},{"lineNumber":245,"author":{"gitId":"sopa301"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":246,"author":{"gitId":"sopa301"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-20"},{"lineNumber":247,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":248,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":249,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":250,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-08-25"},{"lineNumber":251,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":252,"author":{"gitId":"sopa301"},"content":" * @param name Name of deadline.","lastModifiedDate":"2023-08-26"},{"lineNumber":253,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of deadline.","lastModifiedDate":"2023-08-26"},{"lineNumber":254,"author":{"gitId":"sopa301"},"content":" * @param by The time the deadline is due.","lastModifiedDate":"2023-08-25"},{"lineNumber":255,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":256,"author":{"gitId":"sopa301"},"content":" protected Deadline(String name, boolean isDone, LocalDate by) {","lastModifiedDate":"2023-08-25"},{"lineNumber":257,"author":{"gitId":"sopa301"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-25"},{"lineNumber":258,"author":{"gitId":"sopa301"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":259,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":260,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":261,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":262,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and constructs a Deadline object based on the information.","lastModifiedDate":"2023-08-25"},{"lineNumber":263,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":264,"author":{"gitId":"sopa301"},"content":" * @param str Data string.","lastModifiedDate":"2023-08-25"},{"lineNumber":265,"author":{"gitId":"sopa301"},"content":" * @return Deadline object.","lastModifiedDate":"2023-08-25"},{"lineNumber":266,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If Deadline object cannot be created.","lastModifiedDate":"2023-08-25"},{"lineNumber":267,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":268,"author":{"gitId":"sopa301"},"content":" public static Deadline convertFromString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-25"},{"lineNumber":269,"author":{"gitId":"sopa301"},"content":" if (!str.matches(\"d/[01]/.+/.+\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":270,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Could not read Deadline.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":271,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":272,"author":{"gitId":"sopa301"},"content":" String[] arr \u003d str.split(\"/\");","lastModifiedDate":"2023-08-25"},{"lineNumber":273,"author":{"gitId":"sopa301"},"content":" return new Deadline(arr[2], arr[1].equals(\"1\"),","lastModifiedDate":"2023-08-25"},{"lineNumber":274,"author":{"gitId":"sopa301"},"content":" LocalDate.parse(arr[3], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")));","lastModifiedDate":"2023-08-25"},{"lineNumber":275,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":276,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":277,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":278,"author":{"gitId":"sopa301"},"content":" * Creates a Deadline object.","lastModifiedDate":"2023-08-25"},{"lineNumber":279,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":280,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create the Deadline object from.","lastModifiedDate":"2023-08-25"},{"lineNumber":281,"author":{"gitId":"sopa301"},"content":" * @return Deadline object.","lastModifiedDate":"2023-08-25"},{"lineNumber":282,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If a Deadline object cannot be created from the string.","lastModifiedDate":"2023-08-25"},{"lineNumber":283,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":284,"author":{"gitId":"sopa301"},"content":" public static Deadline makeDeadline(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-25"},{"lineNumber":285,"author":{"gitId":"sopa301"},"content":" String[] comps \u003d str.split(\"/\");","lastModifiedDate":"2023-08-25"},{"lineNumber":286,"author":{"gitId":"sopa301"},"content":" if (comps.length !\u003d 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":287,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the deadline is written in the correct format:\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":288,"author":{"gitId":"sopa301"},"content":" + \"deadline ... /by ...\");","lastModifiedDate":"2023-08-25"},{"lineNumber":289,"author":{"gitId":"sopa301"},"content":" } else if (comps[0].trim().equals(\"deadline\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":290,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the deadline description can\u0027t be empty.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":291,"author":{"gitId":"sopa301"},"content":" } else if (comps[1].trim().equals(\"by\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":292,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the deadline can\u0027t be empty.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":293,"author":{"gitId":"sopa301"},"content":" } else if (!comps[1].startsWith(\"by\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":294,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the deadline is written in the correct format:\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":295,"author":{"gitId":"sopa301"},"content":" + \"deadline ... /by ...\");","lastModifiedDate":"2023-08-25"},{"lineNumber":296,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":297,"author":{"gitId":"sopa301"},"content":" LocalDate by;","lastModifiedDate":"2023-08-25"},{"lineNumber":298,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":299,"author":{"gitId":"sopa301"},"content":" by \u003d LocalDate.parse(comps[1].substring(3).trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":300,"author":{"gitId":"sopa301"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":301,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"One or more dates are invalid.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":302,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":303,"author":{"gitId":"sopa301"},"content":" if (by.isBefore(LocalDate.now())) {","lastModifiedDate":"2023-08-25"},{"lineNumber":304,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Deadline can\u0027t be before now!\");","lastModifiedDate":"2023-08-25"},{"lineNumber":305,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":306,"author":{"gitId":"sopa301"},"content":" return new Deadline(comps[0].substring(9).trim(), by);","lastModifiedDate":"2023-08-26"},{"lineNumber":307,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":308,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":309,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":310,"author":{"gitId":"sopa301"},"content":" * String representation of the deadline.","lastModifiedDate":"2023-08-26"},{"lineNumber":311,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":312,"author":{"gitId":"sopa301"},"content":" * @return String representation.","lastModifiedDate":"2023-08-26"},{"lineNumber":313,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":314,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":315,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":316,"author":{"gitId":"sopa301"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-26"},{"lineNumber":317,"author":{"gitId":"sopa301"},"content":" + this.getBy().format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-26"},{"lineNumber":318,"author":{"gitId":"sopa301"},"content":" + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":319,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":320,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":321,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":322,"author":{"gitId":"sopa301"},"content":" * Get the deadline time.","lastModifiedDate":"2023-08-26"},{"lineNumber":323,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":324,"author":{"gitId":"sopa301"},"content":" * @return Deadline time.","lastModifiedDate":"2023-08-26"},{"lineNumber":325,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":326,"author":{"gitId":"sopa301"},"content":" protected LocalDate getBy() {","lastModifiedDate":"2023-08-26"},{"lineNumber":327,"author":{"gitId":"sopa301"},"content":" return this.by;","lastModifiedDate":"2023-08-26"},{"lineNumber":328,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":329,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":330,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":331,"author":{"gitId":"sopa301"},"content":" * Returns data string representation.","lastModifiedDate":"2023-08-25"},{"lineNumber":332,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":333,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-08-25"},{"lineNumber":334,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":335,"author":{"gitId":"sopa301"},"content":" public String convertToDataString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":336,"author":{"gitId":"sopa301"},"content":" return \"d/\" + (super.isDone() ? \"1\" : \"0\") + \"/\" + super.getName()","lastModifiedDate":"2023-08-25"},{"lineNumber":337,"author":{"gitId":"sopa301"},"content":" + \"/\" + this.getBy();","lastModifiedDate":"2023-08-25"},{"lineNumber":338,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":339,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":340,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":341,"author":{"gitId":"sopa301"},"content":" * Checks for sameness. Deadlines are the same if they have the same name and deadline.","lastModifiedDate":"2023-08-26"},{"lineNumber":342,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":343,"author":{"gitId":"sopa301"},"content":" * @param o Object to compare to.","lastModifiedDate":"2023-08-26"},{"lineNumber":344,"author":{"gitId":"sopa301"},"content":" * @return True if objects are the same, else false.","lastModifiedDate":"2023-08-26"},{"lineNumber":345,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":346,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":347,"author":{"gitId":"sopa301"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":348,"author":{"gitId":"sopa301"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":349,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":350,"author":{"gitId":"sopa301"},"content":" } else if (o instanceof Deadline) {","lastModifiedDate":"2023-08-26"},{"lineNumber":351,"author":{"gitId":"sopa301"},"content":" return this.getName().equals(((Deadline) o).getName())","lastModifiedDate":"2023-08-26"},{"lineNumber":352,"author":{"gitId":"sopa301"},"content":" \u0026\u0026 this.getBy().equals(((Deadline) o).getBy());","lastModifiedDate":"2023-08-26"},{"lineNumber":353,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":354,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":355,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":356,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":357,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":358,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":359,"author":{"gitId":"sopa301"},"content":" * Event subclass. Contains a name, event start time and end time.","lastModifiedDate":"2023-08-24"},{"lineNumber":360,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":361,"author":{"gitId":"sopa301"},"content":" public static class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":362,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":363,"author":{"gitId":"sopa301"},"content":" * Event start time.","lastModifiedDate":"2023-08-24"},{"lineNumber":364,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":365,"author":{"gitId":"sopa301"},"content":" private LocalDate from;","lastModifiedDate":"2023-09-02"},{"lineNumber":366,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":367,"author":{"gitId":"sopa301"},"content":" * Event end time.","lastModifiedDate":"2023-08-24"},{"lineNumber":368,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":369,"author":{"gitId":"sopa301"},"content":" private LocalDate to;","lastModifiedDate":"2023-09-02"},{"lineNumber":370,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":371,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":372,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":373,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":374,"author":{"gitId":"sopa301"},"content":" * @param name Event name.","lastModifiedDate":"2023-08-24"},{"lineNumber":375,"author":{"gitId":"sopa301"},"content":" * @param from Event start time.","lastModifiedDate":"2023-08-24"},{"lineNumber":376,"author":{"gitId":"sopa301"},"content":" * @param to Event end time.","lastModifiedDate":"2023-08-24"},{"lineNumber":377,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":378,"author":{"gitId":"sopa301"},"content":" public Event(String name, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":379,"author":{"gitId":"sopa301"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":380,"author":{"gitId":"sopa301"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-20"},{"lineNumber":381,"author":{"gitId":"sopa301"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-20"},{"lineNumber":382,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":383,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":384,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":385,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-08-25"},{"lineNumber":386,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":387,"author":{"gitId":"sopa301"},"content":" * @param name Name of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":388,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":389,"author":{"gitId":"sopa301"},"content":" * @param from Start time of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":390,"author":{"gitId":"sopa301"},"content":" * @param to End time of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":391,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":392,"author":{"gitId":"sopa301"},"content":" protected Event(String name, boolean isDone, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":393,"author":{"gitId":"sopa301"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-25"},{"lineNumber":394,"author":{"gitId":"sopa301"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":395,"author":{"gitId":"sopa301"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":396,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":397,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":398,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":399,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and constructs an Event object based on the information.","lastModifiedDate":"2023-08-25"},{"lineNumber":400,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":401,"author":{"gitId":"sopa301"},"content":" * @param str Data string.","lastModifiedDate":"2023-08-26"},{"lineNumber":402,"author":{"gitId":"sopa301"},"content":" * @return Event object.","lastModifiedDate":"2023-08-25"},{"lineNumber":403,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If an Event object cannot be created.","lastModifiedDate":"2023-08-25"},{"lineNumber":404,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":405,"author":{"gitId":"sopa301"},"content":" public static Event convertFromString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-25"},{"lineNumber":406,"author":{"gitId":"sopa301"},"content":" if (!str.matches(\"e/[01]/.+/.+/.+\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":407,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Could not read Event.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":408,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":409,"author":{"gitId":"sopa301"},"content":" String[] arr \u003d str.split(\"/\");","lastModifiedDate":"2023-08-25"},{"lineNumber":410,"author":{"gitId":"sopa301"},"content":" return new Event(arr[2], arr[1].equals(\"1\"), LocalDate.parse(arr[3]), LocalDate.parse(arr[4]));","lastModifiedDate":"2023-08-25"},{"lineNumber":411,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":412,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":413,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":414,"author":{"gitId":"sopa301"},"content":" * Creates an Event object.","lastModifiedDate":"2023-08-25"},{"lineNumber":415,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":416,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create the object from.","lastModifiedDate":"2023-08-25"},{"lineNumber":417,"author":{"gitId":"sopa301"},"content":" * @return Event object.","lastModifiedDate":"2023-08-25"},{"lineNumber":418,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the input string cannot create the Event object.","lastModifiedDate":"2023-08-25"},{"lineNumber":419,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":420,"author":{"gitId":"sopa301"},"content":" public static Event makeEvent(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-25"},{"lineNumber":421,"author":{"gitId":"sopa301"},"content":" String[] comps \u003d str.split(\"/\");","lastModifiedDate":"2023-08-25"},{"lineNumber":422,"author":{"gitId":"sopa301"},"content":" if (comps.length !\u003d 3) {","lastModifiedDate":"2023-08-25"},{"lineNumber":423,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the event is written in the correct format:\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":424,"author":{"gitId":"sopa301"},"content":" + \"event ... /from ... /to ...\");","lastModifiedDate":"2023-08-25"},{"lineNumber":425,"author":{"gitId":"sopa301"},"content":" } else if (comps[0].trim().equals(\"event\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":426,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the event description can\u0027t be empty.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":427,"author":{"gitId":"sopa301"},"content":" } else if (comps[1].trim().equals(\"from\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":428,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, event start time can\u0027t be empty.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":429,"author":{"gitId":"sopa301"},"content":" } else if (comps[2].trim().equals(\"to\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":430,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, event end time can\u0027t be empty.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":431,"author":{"gitId":"sopa301"},"content":" } else if (!comps[1].startsWith(\"from \") || !comps[2].startsWith(\"to \")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":432,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the event is written in the correct format:\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":433,"author":{"gitId":"sopa301"},"content":" + \"event ... /from ... /to ...\");","lastModifiedDate":"2023-08-25"},{"lineNumber":434,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":435,"author":{"gitId":"sopa301"},"content":" LocalDate from;","lastModifiedDate":"2023-08-26"},{"lineNumber":436,"author":{"gitId":"sopa301"},"content":" LocalDate to;","lastModifiedDate":"2023-08-26"},{"lineNumber":437,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":438,"author":{"gitId":"sopa301"},"content":" from \u003d LocalDate.parse(comps[1].substring(5).trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":439,"author":{"gitId":"sopa301"},"content":" to \u003d LocalDate.parse(comps[2].substring(3).trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":440,"author":{"gitId":"sopa301"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":441,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"One or more dates are invalid.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":442,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":443,"author":{"gitId":"sopa301"},"content":" if (from.isAfter(to)) {","lastModifiedDate":"2023-08-25"},{"lineNumber":444,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Event end time can\u0027t be before event start time!\");","lastModifiedDate":"2023-08-25"},{"lineNumber":445,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":446,"author":{"gitId":"sopa301"},"content":" return new Event(comps[0].substring(6).trim(), from, to);","lastModifiedDate":"2023-08-26"},{"lineNumber":447,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":448,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":449,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":450,"author":{"gitId":"sopa301"},"content":" * Get event start time.","lastModifiedDate":"2023-08-26"},{"lineNumber":451,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":452,"author":{"gitId":"sopa301"},"content":" * @return Event start time.","lastModifiedDate":"2023-08-26"},{"lineNumber":453,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":454,"author":{"gitId":"sopa301"},"content":" protected LocalDate getFrom() {","lastModifiedDate":"2023-08-26"},{"lineNumber":455,"author":{"gitId":"sopa301"},"content":" return this.from;","lastModifiedDate":"2023-08-26"},{"lineNumber":456,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":457,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":458,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":459,"author":{"gitId":"sopa301"},"content":" * Get event end time.","lastModifiedDate":"2023-08-26"},{"lineNumber":460,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":461,"author":{"gitId":"sopa301"},"content":" * @return Event end time.","lastModifiedDate":"2023-08-26"},{"lineNumber":462,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":463,"author":{"gitId":"sopa301"},"content":" protected LocalDate getTo() {","lastModifiedDate":"2023-08-26"},{"lineNumber":464,"author":{"gitId":"sopa301"},"content":" return this.to;","lastModifiedDate":"2023-08-26"},{"lineNumber":465,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":466,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":467,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":468,"author":{"gitId":"sopa301"},"content":" * String representation of the event.","lastModifiedDate":"2023-08-26"},{"lineNumber":469,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":470,"author":{"gitId":"sopa301"},"content":" * @return String representation.","lastModifiedDate":"2023-08-26"},{"lineNumber":471,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":472,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":473,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":474,"author":{"gitId":"sopa301"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-26"},{"lineNumber":475,"author":{"gitId":"sopa301"},"content":" + \" (from: \"","lastModifiedDate":"2023-08-26"},{"lineNumber":476,"author":{"gitId":"sopa301"},"content":" + this.getFrom().format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-26"},{"lineNumber":477,"author":{"gitId":"sopa301"},"content":" + \" to: \" + this.getTo().format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-26"},{"lineNumber":478,"author":{"gitId":"sopa301"},"content":" + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":479,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":480,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":481,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":482,"author":{"gitId":"sopa301"},"content":" * Returns data string representation.","lastModifiedDate":"2023-08-26"},{"lineNumber":483,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":484,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-08-26"},{"lineNumber":485,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":486,"author":{"gitId":"sopa301"},"content":" public String convertToDataString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":487,"author":{"gitId":"sopa301"},"content":" return \"e/\" + (super.isDone() ? \"1\" : \"0\") + \"/\" + super.getName()","lastModifiedDate":"2023-08-26"},{"lineNumber":488,"author":{"gitId":"sopa301"},"content":" + \"/\" + this.getFrom() + \"/\" + this.getTo();","lastModifiedDate":"2023-08-26"},{"lineNumber":489,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":490,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":491,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":492,"author":{"gitId":"sopa301"},"content":" * Checks for sameness. Events are the same if they have the same name, start time","lastModifiedDate":"2023-08-26"},{"lineNumber":493,"author":{"gitId":"sopa301"},"content":" * and end time.","lastModifiedDate":"2023-08-26"},{"lineNumber":494,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":495,"author":{"gitId":"sopa301"},"content":" * @param o Object to compare to.","lastModifiedDate":"2023-08-26"},{"lineNumber":496,"author":{"gitId":"sopa301"},"content":" * @return True if objects are the same, else false.","lastModifiedDate":"2023-08-26"},{"lineNumber":497,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":498,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":499,"author":{"gitId":"sopa301"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":500,"author":{"gitId":"sopa301"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":501,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":502,"author":{"gitId":"sopa301"},"content":" } else if (o instanceof Event) {","lastModifiedDate":"2023-08-26"},{"lineNumber":503,"author":{"gitId":"sopa301"},"content":" return this.getName().equals(((Event) o).getName())","lastModifiedDate":"2023-08-26"},{"lineNumber":504,"author":{"gitId":"sopa301"},"content":" \u0026\u0026 this.getFrom().equals(((Event) o).getFrom())","lastModifiedDate":"2023-08-26"},{"lineNumber":505,"author":{"gitId":"sopa301"},"content":" \u0026\u0026 this.getTo().equals(((Event) o).getTo());","lastModifiedDate":"2023-08-26"},{"lineNumber":506,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":507,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":508,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":509,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":510,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"sopa301":510}},{"path":"src/main/java/bot/utils/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.util.Collection;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import java.util.List;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" * Bot.Task list abstraction. Functions like an arraylist but may not contain one.","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Index starts at 1.","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" * Data structure to hold list.","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" private List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * Default constructor. To be used when an empty list is needed.","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" public TaskList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" * Constructor with a list of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * @param list List of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" public TaskList(Collection\u003cTask\u003e list) {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" this.list.addAll(list);","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" * Adds a task to the end of the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" * @param task Bot.Task to add.","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" * Gets the task at that index of the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" * @return Bot.Task object.","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" return this.list.get(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" * Removes the task at that index from the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" * @return Task object.","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If index is out of range.","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" public Task remove(int index) throws InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" return this.list.remove(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * Gets length of the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" * @return Length of list.","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" public int size() {","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" return this.list.size();","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" * Gets an iterator of the tasks in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" * @return Iterator of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" public Iterator\u003cTask\u003e iterator() {","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" return this.list.iterator();","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" * Marks the task at the specified index","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If index is out of range.","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" public void mark(int index) throws InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" this.list.get(index - 1).mark();","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" * Unmarks the task at the specified index.","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If index is out of range.","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" public void unmark(int index) throws InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" this.list.get(index - 1).unmark();","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" * Gets all tasks that contain the given string in their names.","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" * @param str Query string.","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":" * @return TaskList of tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":" public TaskList findAll(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" Iterator\u003cTask\u003e iter \u003d list.iterator();","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":" TaskList out \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" while (iter.hasNext()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" Task task \u003d iter.next();","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":" if (task.getName().contains(str)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" out.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" return out;","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":129}},{"path":"src/main/java/bot/utils/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" * User interface class responsible for dealing with interactions with the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"public class Ui {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" * Scanner to read user input.","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" private Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" * Default constructor. Creates a Ui object.","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" public Ui() {}","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * Prints the error to the screen.","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * @param str Error message.","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" public void showError(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" System.out.println(\"ERROR: \" + str);","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" * Prints the message to the screen.","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" * @param str Message.","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" public void println(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" System.out.println(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * Returns user input from System.in.","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" * @return Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" * Returns the welcome message.","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" println(\"Hello! I\u0027m the trash gremlin Caelus!\\nWhat can I do for you?\");","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" * Returns the goodbye message.","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" public void showGoodbye() {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" println(\"Bye. I\u0027ll be at the nearest trash can!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" sc.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" * Prints the tasks with their index to the screen.","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" * @param tasks Tasks to print.","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" public void displayTaskList(TaskList tasks) {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" StringBuilder out \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" Iterator\u003cTask\u003e iter \u003d tasks.iterator();","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" for (int ctr \u003d 1; iter.hasNext(); ctr++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" out.append(ctr).append(\". \").append(iter.next().toString()).append(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" out.deleteCharAt(out.length() - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" println(out.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":76}},{"path":"src/test/java/bot/utils/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" public void remove_validIndex_success() throws InvalidTaskException, InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" Task task \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" arr.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" assertEquals(task, tasks.remove(1));","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" public void remove_multipleIndex_success() throws InvalidTaskException, InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" Task task1 \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" Task task2 \u003d Task.makeTask(\"todo 2\");","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" arr.add(task1);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" arr.add(task2);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" assertEquals(task2, tasks.remove(2));","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" assertEquals(task1, tasks.remove(1));","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" public void remove_negativeIndex_throwsException() throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" Task task \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" arr.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" tasks.remove(-1);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, that index doesn\u0027t exist. Please key in a valid index.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" public void remove_bigNumber_throwsException() throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" Task task \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" arr.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" tasks.remove(100);","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, that index doesn\u0027t exist. Please key in a valid index.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":68}},{"path":"src/test/java/bot/utils/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" public void makeTask_validInput_success() throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" assertEquals(new Task.ToDo(\"name1\"), Task.makeTask(\"todo name1\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" assertEquals(new Task.Deadline(\"name2\", LocalDate.parse(\"2024-08-10\")),","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"deadline name2 /by 2024-08-10\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" assertEquals(new Task.Event(\"name3\",","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" LocalDate.parse(\"2024-07-01\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" LocalDate.parse(\"2024-08-01\")),","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"event name3 /from 2024-07-01 /to 2024-08-01\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" public void makeTask_missingDetailsToDo_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"todo\");","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, the todo description can\u0027t be empty.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" public void makeTask_missingDetailsDeadline_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"deadline two\");","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Please make sure the deadline \"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" + \"is written in the correct format:\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" + \"deadline ... /by ...\",","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" public void makeTask_missingDetailsEvent_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"event /from 2020-10-10 /to 2020-12-10\");","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, the event description can\u0027t be empty.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" public void makeTask_invalidDate_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"deadline kappa /by 2020-20-20\");","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" assertEquals(\"One or more dates are invalid.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":73}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"hello","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"delete 1","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"delete 1","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"todo taskone","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"mark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"unmark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"deadline tasktwo /by 2023-11-11","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"event taskthree /from 2023-08-25 /to 2023-08-26","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"event taskfail /from 2020-11-22 /to 2019-11-11","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"deadline taskfail /by 2020-20-20","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"mark 3","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":"delete 3","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"sopa301":20}},{"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":"sopa301"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\bot\\*.java","lastModifiedDate":"2023-08-26"},{"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":"sopa301"},"content":"java -classpath ..\\bin bot.Bot \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":{"sopa301":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":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-26"},{"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":"sopa301"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"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":"sopa301"},"content":" mainClass.set(\"bot.gui.Launcher\")","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":"sopa301"},"content":" archiveBaseName \u003d \"bot\"","lastModifiedDate":"2023-08-26"},{"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"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":"checkstyle {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":21,"-":40}},{"path":"src/main/java/bot/Bot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.BotException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.LoadingException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.Command;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.utils.Parser;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Main class for the bot.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"public class Bot {","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" * Storage object for storing data.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" * User interface for interacting with the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * Task list for storing tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * Shows if the bot is active or not.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" * Creates the bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" public Bot() {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" this.storage \u003d new Storage(\"/data/tasks.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" tasks \u003d new TaskList(storage.load(this.ui));","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" } catch (LoadingException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" * Gives the bot\u0027s response to a String input.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" * @param input Raw input string.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response as a string.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" String response;","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" response \u003d command.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" if (command.isExit()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" isExit \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" } catch (BotException exception) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" response \u003d ui.showError(exception.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" return response;","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * Gets the bot\u0027s greeting message.","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" * @return Greeting message.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" public String greet() {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" return ui.showWelcome();","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" * Indicates if the bot is active.","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" * @return True if the bot is active, else false.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" return this.isExit;","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"sopa301":84}},{"path":"src/main/java/bot/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.gui.MainWindow;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * Main class for the entire project.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * Bot used in the project.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" private final Bot bot \u003d new Bot();","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * Creates the GUI for the bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * Applications may create other stages, if needed,","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" * but they will not be primary stages.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setBot(bot);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":42}},{"path":"src/main/java/bot/enums/DoneStatus.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.enums;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Indicates whether a task is done or not.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public enum DoneStatus {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Indicates task is done.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" DONE,","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Indicates task is not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" NOT_DONE","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":15}},{"path":"src/main/java/bot/exceptions/BotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Supertype of all exceptions that occur specific to the bot.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class BotException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * @param msg Message to be displayed when getMessage is called.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" public BotException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":16}},{"path":"src/main/java/bot/exceptions/EmptyListException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when the task list is empty and a function requires an","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" * item in the task list.","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"public class EmptyListException extends BotException {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" public EmptyListException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" super(\"Oops, there are no tasks in your list!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":14}},{"path":"src/main/java/bot/exceptions/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when invalid arguments are provided to a command.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidArgumentException extends BotException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" public InvalidArgumentException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" super(\"Sorry, but that command can\u0027t be done with the provided argument(s).\");","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Creates an InvalidArgumentException with the provided string as the error","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" * message.","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * @param str Error message.","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" public InvalidArgumentException(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" super(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":23}},{"path":"src/main/java/bot/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when an invalid command is sent to the bot.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidCommandException extends BotException {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor. Currently set to Trash Gremlin Caelus personality.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" super(\"Sorry, I dunno what you\u0027re saying. Must be the trash getting to my brain.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"sopa301":13}},{"path":"src/main/java/bot/exceptions/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when an index is given that is out of range for the requested operation.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidIndexException extends InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" public InvalidIndexException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" super(\"Sorry, that index doesn\u0027t exist. Please key in a valid index.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Constructor with variable message.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * @param msg Message to be displayed when getMessage is called.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" public InvalidIndexException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":22}},{"path":"src/main/java/bot/exceptions/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for incorrect inputs when creating a Task object.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidTaskException extends InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Constructor with variable message.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * @param msg Message to be displayed when getMessage is called.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" public InvalidTaskException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":15}},{"path":"src/main/java/bot/exceptions/LoadingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when the storage class fails to load or save data for any reason.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class LoadingException extends BotException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Creates a LoadingException with the given string as the error message.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * @param str Error message.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" public LoadingException(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" super(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":15}},{"path":"src/main/java/bot/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"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":"sopa301"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * Dialog text.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * Image for the dialog box.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" * Creates a dialog box with the given text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" * @param text Text to show in the box.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" * @param img Image to show in the box.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" * Creates a dialog box to show on the user\u0027s side with the given text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" * @param text Text to show.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" * @param img Image to show.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * @return Dialog box.","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" * Creates a dialog box to show on the bot\u0027s side with the given text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" * @param text Text to show.","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" * @param img Image to show.","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" * @return Dialog box.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" public static DialogBox getBotDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":86}},{"path":"src/main/java/bot/gui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.Main;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" * Main method for the entire project.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" Application.launch(Main.class);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":18}},{"path":"src/main/java/bot/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.Bot;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * Scroll pane on the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * Dialog container for the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * User input field for the GUI","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" * Bot instance exchanging data with the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" private Bot bot;","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * User\u0027s image in the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" private final Image userImage \u003d new Image(Objects.requireNonNull(","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" this.getClass().getResourceAsStream(\"/images/DaUser.png\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" * Bot\u0027s image in the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" private final Image botImage \u003d new Image(Objects.requireNonNull(","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" this.getClass().getResourceAsStream(\"/images/DaBot.png\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" * Initialises the main window in the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" * Sets the active bot instance to the given bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" * @param bot Bot to use in the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" public void setBot(Bot bot) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" this.bot \u003d bot;","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" dialogContainer.getChildren().add(DialogBox.getBotDialog(bot.greet(), botImage));","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"sopa301"},"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":69,"author":{"gitId":"sopa301"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" if (bot.isExit()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" String response \u003d bot.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" DialogBox.getBotDialog(response, botImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":84}},{"path":"src/main/java/bot/utils/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.enums.DoneStatus;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.EmptyListException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidArgumentException;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Command abstraction for executing commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" * Regex pattern for delete commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" private static final Pattern PATTERN_DELETE \u003d Pattern.compile(\"delete -?\\\\d+\");","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" * Regex pattern for mark commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" private static final Pattern PATTERN_MARK \u003d Pattern.compile(\"mark -?\\\\d+\");","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * Regex pattern for unmark commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" private static final Pattern PATTERN_UNMARK \u003d Pattern.compile(\"unmark -?\\\\d+\");","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * Default constructor. Does nothing.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" public Command() {}","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" * Creates an ExitCommand to indicate the end of the program.","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" * @return ExitCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" public static Command exit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" * Creates a ListCommand to instruct the bot to display the items in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" * @return ListCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" public static Command list() {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" * Creates a MarkCommand to instruct the bot to mark the task at the given index","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" * in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" * @return MarkCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" * @throws InvalidArgumentException If the string doesn\u0027t contain an int.","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" public static Command mark(String str) throws InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" if (!PATTERN_MARK.matcher(str).matches()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" int index \u003d Integer.parseInt(str.substring(5));","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" return new MarkCommand(index, DoneStatus.DONE);","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * Creates a MarkCommand to instruct the bot to unmark the task at the given index","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" * @return MarkCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" * @throws InvalidArgumentException If the string doesn\u0027t contain an int.","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" public static Command unmark(String str) throws InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" if (!PATTERN_UNMARK.matcher(str).matches()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" int index \u003d Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" return new MarkCommand(index, DoneStatus.NOT_DONE);","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" * Creates an AddCommand to instruct the bot to add a task to the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" * @return AddCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" public static Command add(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" return new AddCommand(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" * Creates a MarkCommand to instruct the bot to delete the task at the given index","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" * in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" * @return DeleteCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":" * @throws InvalidArgumentException If the string doesn\u0027t contain an int.","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" public static Command delete(String str) throws InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" if (!PATTERN_DELETE.matcher(str).matches()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" int index \u003d Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":" * Creates a FindCommand to instruct the bot to look for tasks that meet specific criteria.","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" * @return FindCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" public static Command find(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":" return new FindCommand(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":" * @param tasks Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"sopa301"},"content":" * @param storage Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"sopa301"},"content":" * @throws EmptyListException If an illegal operation is performed on an empty list.","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If the command tries to access an invalid index.","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the command creates a task and fails to do so.","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"sopa301"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws EmptyListException,","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"sopa301"},"content":" InvalidIndexException, InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"sopa301"},"content":" * Bot.Command to indicate the end of the program.","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"sopa301"},"content":" private static class ExitCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":146,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":148,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":149,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"sopa301"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":151,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":159,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":160,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":161,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"sopa301"},"content":" return ui.showGoodbye();","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":165,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":166,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":167,"author":{"gitId":"sopa301"},"content":" * Bot.Command to list all tasks in the task list.","lastModifiedDate":"2023-08-26"},{"lineNumber":168,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":169,"author":{"gitId":"sopa301"},"content":" private static class ListCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":170,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":171,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":172,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":173,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":174,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":175,"author":{"gitId":"sopa301"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":176,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":177,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":178,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":179,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":180,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":181,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":182,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":183,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":184,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":185,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"sopa301"},"content":" * @throws EmptyListException If an illegal operation is performed on an empty list.","lastModifiedDate":"2023-08-26"},{"lineNumber":187,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":188,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws EmptyListException {","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"sopa301"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":190,"author":{"gitId":"sopa301"},"content":" throw new EmptyListException();","lastModifiedDate":"2023-08-26"},{"lineNumber":191,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":192,"author":{"gitId":"sopa301"},"content":" return ui.println(\"Here are the tasks in your list:\").concat(ui.displayTaskList(tasks));","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":194,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":195,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":196,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":197,"author":{"gitId":"sopa301"},"content":" * Bot.Command to mark the task as done or not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":198,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":199,"author":{"gitId":"sopa301"},"content":" private static class MarkCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":200,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":201,"author":{"gitId":"sopa301"},"content":" * Index to mark the task at.","lastModifiedDate":"2023-08-26"},{"lineNumber":202,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":203,"author":{"gitId":"sopa301"},"content":" private final int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":204,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":205,"author":{"gitId":"sopa301"},"content":" * Mark the task as done or not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":206,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":207,"author":{"gitId":"sopa301"},"content":" private final DoneStatus done;","lastModifiedDate":"2023-09-04"},{"lineNumber":208,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":209,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":210,"author":{"gitId":"sopa301"},"content":" * Creates a MarkCommand with the command to mark or unmark the task","lastModifiedDate":"2023-08-26"},{"lineNumber":211,"author":{"gitId":"sopa301"},"content":" * at the given index.","lastModifiedDate":"2023-08-26"},{"lineNumber":212,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":213,"author":{"gitId":"sopa301"},"content":" * @param index Index to mark the task at.","lastModifiedDate":"2023-08-26"},{"lineNumber":214,"author":{"gitId":"sopa301"},"content":" * @param done Mark the task as done or not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":215,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":216,"author":{"gitId":"sopa301"},"content":" protected MarkCommand(int index, DoneStatus done) {","lastModifiedDate":"2023-08-26"},{"lineNumber":217,"author":{"gitId":"sopa301"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":218,"author":{"gitId":"sopa301"},"content":" this.done \u003d done;","lastModifiedDate":"2023-08-26"},{"lineNumber":219,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":220,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":221,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":222,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":223,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":224,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":225,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":226,"author":{"gitId":"sopa301"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":227,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":228,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":229,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":230,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":231,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":232,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":233,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":234,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":235,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":236,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-04"},{"lineNumber":237,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If the command tries to access an invalid index.","lastModifiedDate":"2023-08-26"},{"lineNumber":238,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":239,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-04"},{"lineNumber":240,"author":{"gitId":"sopa301"},"content":" if (done.equals(DoneStatus.DONE)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":241,"author":{"gitId":"sopa301"},"content":" tasks.mark(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":242,"author":{"gitId":"sopa301"},"content":" return ui.println(\"I\u0027ll mark this as done:\\n\" + tasks.get(index).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":243,"author":{"gitId":"sopa301"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":244,"author":{"gitId":"sopa301"},"content":" tasks.unmark(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":245,"author":{"gitId":"sopa301"},"content":" return ui.println(\"I\u0027ll mark this as not done:\\n\" + tasks.get(index).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":246,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":247,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":248,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":249,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":250,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":251,"author":{"gitId":"sopa301"},"content":" * Bot.Command to add tasks to the task list.","lastModifiedDate":"2023-08-26"},{"lineNumber":252,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":253,"author":{"gitId":"sopa301"},"content":" private static class AddCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":254,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":255,"author":{"gitId":"sopa301"},"content":" * Full command string","lastModifiedDate":"2023-08-26"},{"lineNumber":256,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":257,"author":{"gitId":"sopa301"},"content":" private final String input;","lastModifiedDate":"2023-09-04"},{"lineNumber":258,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":259,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":260,"author":{"gitId":"sopa301"},"content":" * Creates an AddCommand with the full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":261,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":262,"author":{"gitId":"sopa301"},"content":" * @param input Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":263,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":264,"author":{"gitId":"sopa301"},"content":" protected AddCommand(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":265,"author":{"gitId":"sopa301"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-26"},{"lineNumber":266,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":267,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":268,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":269,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":270,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":271,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":272,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":273,"author":{"gitId":"sopa301"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":274,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":275,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":276,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":277,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":278,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":279,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":280,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":281,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":282,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":283,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-04"},{"lineNumber":284,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the command creates a task and fails to do so.","lastModifiedDate":"2023-08-26"},{"lineNumber":285,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":286,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidTaskException {","lastModifiedDate":"2023-09-04"},{"lineNumber":287,"author":{"gitId":"sopa301"},"content":" Task newTask \u003d Task.makeTask(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":288,"author":{"gitId":"sopa301"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":289,"author":{"gitId":"sopa301"},"content":" return ui.println(\"Added:\\n\" + newTask.toString())","lastModifiedDate":"2023-09-04"},{"lineNumber":290,"author":{"gitId":"sopa301"},"content":" .concat(ui.println(\"Now you have \" + tasks.size() + \" task(s) in the list.\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":291,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":292,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":293,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":294,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":295,"author":{"gitId":"sopa301"},"content":" * Command to delete tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":296,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":297,"author":{"gitId":"sopa301"},"content":" private static class DeleteCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":298,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":299,"author":{"gitId":"sopa301"},"content":" * Index to delete task at.","lastModifiedDate":"2023-08-26"},{"lineNumber":300,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":301,"author":{"gitId":"sopa301"},"content":" private final int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":302,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":303,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":304,"author":{"gitId":"sopa301"},"content":" * Creates a DeleteCommand with the given index.","lastModifiedDate":"2023-08-26"},{"lineNumber":305,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":306,"author":{"gitId":"sopa301"},"content":" * @param index Index to delete task at.","lastModifiedDate":"2023-08-26"},{"lineNumber":307,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":308,"author":{"gitId":"sopa301"},"content":" protected DeleteCommand(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":309,"author":{"gitId":"sopa301"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":310,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":311,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":312,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":313,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":314,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":315,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":316,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":317,"author":{"gitId":"sopa301"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":318,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":319,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":320,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":321,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":322,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":323,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":324,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":325,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":326,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":327,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-04"},{"lineNumber":328,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If the command tries to access an invalid index.","lastModifiedDate":"2023-08-26"},{"lineNumber":329,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":330,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-04"},{"lineNumber":331,"author":{"gitId":"sopa301"},"content":" Task task \u003d tasks.remove(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":332,"author":{"gitId":"sopa301"},"content":" return ui.println(\"I\u0027ve removed this task:\\n\" + task.toString())","lastModifiedDate":"2023-09-04"},{"lineNumber":333,"author":{"gitId":"sopa301"},"content":" .concat(ui.println(\"Now you have \" + tasks.size() + \" task(s) in the list.\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":334,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":335,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":336,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":337,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":338,"author":{"gitId":"sopa301"},"content":" * Command for finding specific tasks in the task list.","lastModifiedDate":"2023-08-26"},{"lineNumber":339,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":340,"author":{"gitId":"sopa301"},"content":" private static class FindCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":341,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":342,"author":{"gitId":"sopa301"},"content":" * Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":343,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":344,"author":{"gitId":"sopa301"},"content":" private final String input;","lastModifiedDate":"2023-09-04"},{"lineNumber":345,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":346,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":347,"author":{"gitId":"sopa301"},"content":" * Creates an FindCommand with the full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":348,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":349,"author":{"gitId":"sopa301"},"content":" * @param input Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":350,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":351,"author":{"gitId":"sopa301"},"content":" protected FindCommand(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":352,"author":{"gitId":"sopa301"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-26"},{"lineNumber":353,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":354,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":355,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":356,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":357,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":358,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":359,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":360,"author":{"gitId":"sopa301"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":361,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":362,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":363,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":364,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":365,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":366,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":367,"author":{"gitId":"sopa301"},"content":" * @param tasks Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":368,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":369,"author":{"gitId":"sopa301"},"content":" * @param storage Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":370,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-04"},{"lineNumber":371,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":372,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":373,"author":{"gitId":"sopa301"},"content":" TaskList queries \u003d tasks.findAll(input.substring(5).trim());","lastModifiedDate":"2023-08-26"},{"lineNumber":374,"author":{"gitId":"sopa301"},"content":" if (queries.size() \u003e 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":375,"author":{"gitId":"sopa301"},"content":" return ui.println(\"Here are the matching tasks in your list:\")","lastModifiedDate":"2023-09-04"},{"lineNumber":376,"author":{"gitId":"sopa301"},"content":" .concat(ui.displayTaskList(queries));","lastModifiedDate":"2023-09-04"},{"lineNumber":377,"author":{"gitId":"sopa301"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":378,"author":{"gitId":"sopa301"},"content":" return ui.println(\"Sorry, no matching tasks found.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":379,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":380,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":381,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":382,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":382}},{"path":"src/main/java/bot/utils/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidArgumentException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" * Abstraction for making sense of user commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" * Default constructor. It does nothing as the parser is not meant to","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * be instantiated.","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" public Parser() {}","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * Parses the command string into a command to be executed.","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * Does not guarantee the command is syntactically correct.","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * @return Command object.","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * @throws InvalidArgumentException If the arguments are clearly invalid.","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" public static Command parse(String str) throws InvalidCommandException, InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" if (str.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" return Command.exit();","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" } else if (str.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" return Command.list();","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" } else if (str.startsWith(\"mark \") || str.equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" return Command.mark(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" } else if (str.startsWith(\"unmark \") || str.equals(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" return Command.unmark(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" } else if (Task.isTaskCommand(str)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" return Command.add(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" } else if (str.startsWith(\"delete \") || str.equals(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" return Command.delete(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" } else if (str.startsWith(\"find \") || str.equals(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" return Command.find(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":44}},{"path":"src/main/java/bot/utils/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.LoadingException;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * Abstraction for storing and loading data from a local file.","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * File path for loading and saving data.","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * Creates a Storage object that stores and loads data at that file path.","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * @param filePath Path to file.","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" * Loads data from that file path, and creates the file if it doesn\u0027t exist.","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" * @param ui UI for displaying messages.","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" * @return ArrayList of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" * @throws LoadingException If the data file cannot be read or created.","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" public ArrayList\u003cTask\u003e load(Ui ui) throws LoadingException {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" File parent \u003d new File(f.getParent());","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" if (f.isFile()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" Scanner scanner \u003d new Scanner(f);","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" tasks.add(Task.convertFromString(scanner.nextLine()));","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" ui.println(\"Invalid task, skipping...\");","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" ui.println(\"No data found, creating...\");","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" if (!parent.isDirectory()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" parent.mkdirs();","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" } catch (IOException | SecurityException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" throw new LoadingException(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" return tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" * Saves task list to file named at filePath. Assumes the file has been created.","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" * @param lst Bot.Task list to save to file.","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * @throws LoadingException If the list cannot be saved fully.","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" public void save(TaskList lst) throws LoadingException {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" FileWriter fw \u003d new FileWriter(f);","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" for (int i \u003d 1; i \u003c lst.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" fw.write(lst.get(i).convertToDataString());","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" fw.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" if (lst.size() \u003e 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" fw.write(lst.get(lst.size()).convertToDataString());","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" fw.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" throw new LoadingException(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":86}},{"path":"src/main/java/bot/utils/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" * Abstract task class for tasks that can be created for the task list in the chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Name of the task.","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" private String name;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * Indicates if the task is completed.","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * @param name Name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" * @param name Name of the task.","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" protected Task(String name, boolean isDone) {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" * Creates a task based on the string input. Throws an InvalidTaskException","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" * if no task can be created from the string.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create task from.","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" * @return Task object containing information from the string.","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If no task can be created.","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" public static Task makeTask(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" Task newTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" newTask \u003d ToDo.makeToDo(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" } else if (str.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" newTask \u003d Deadline.makeDeadline(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" newTask \u003d Event.makeEvent(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" return newTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and constructs a Task object based on the information.","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" * @param str Data string.","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" * @return Bot.Task object.","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the task object cannot be created from the string.","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" public static Task convertFromString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"t\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" return ToDo.convertFromString(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"d\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" return Deadline.convertFromString(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" return Event.convertFromString(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" * Checks if the raw string contains a task command.","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to check.","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" * @return True if a task command is found, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" public static boolean isTaskCommand(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" return str.startsWith(\"todo \") || str.startsWith(\"event \") || str.startsWith(\"deadline \");","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" * Gets completion status of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" * @return True if the task is complete, false otherwise.","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" @SuppressWarnings(\"BooleanMethodIsAlwaysInverted\")","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" protected boolean isDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" return this.isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" * Gets the name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" * @return Name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" protected String getName() {","lastModifiedDate":"2023-08-20"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" return this.name;","lastModifiedDate":"2023-08-20"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":" * Gets the string representation of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" * @return String representation of task.","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":" return \"[\" + (this.isDone() ? \"X\" : \" \") + \"] \" + this.getName();","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":" * Changes the task\u0027s completion status to complete.","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" public void mark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" * Changes the task\u0027s completion status to incomplete.","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":" public void unmark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":130,"author":{"gitId":"sopa301"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":131,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":132,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":134,"author":{"gitId":"sopa301"},"content":" * Creates data string of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":135,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":136,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-08-25"},{"lineNumber":137,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":138,"author":{"gitId":"sopa301"},"content":" public abstract String convertToDataString();","lastModifiedDate":"2023-08-25"},{"lineNumber":139,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":140,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"sopa301"},"content":" * ToDo subclass. Contains a name.","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"sopa301"},"content":" public static class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":144,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"sopa301"},"content":" * @param name Name of task.","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"sopa301"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-20"},{"lineNumber":150,"author":{"gitId":"sopa301"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":151,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":152,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":154,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-08-25"},{"lineNumber":155,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":156,"author":{"gitId":"sopa301"},"content":" * @param name Name of ToDo.","lastModifiedDate":"2023-08-25"},{"lineNumber":157,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of Todo.","lastModifiedDate":"2023-08-25"},{"lineNumber":158,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":159,"author":{"gitId":"sopa301"},"content":" protected ToDo(String name, boolean isDone) {","lastModifiedDate":"2023-08-25"},{"lineNumber":160,"author":{"gitId":"sopa301"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-25"},{"lineNumber":161,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":162,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":163,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":164,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and creates a ToDo object.","lastModifiedDate":"2023-08-25"},{"lineNumber":165,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":166,"author":{"gitId":"sopa301"},"content":" * @param str Data string to read.","lastModifiedDate":"2023-08-25"},{"lineNumber":167,"author":{"gitId":"sopa301"},"content":" * @return ToDo object.","lastModifiedDate":"2023-08-25"},{"lineNumber":168,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If an object cannot be created.","lastModifiedDate":"2023-08-25"},{"lineNumber":169,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":170,"author":{"gitId":"sopa301"},"content":" public static ToDo convertFromString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-25"},{"lineNumber":171,"author":{"gitId":"sopa301"},"content":" if (!str.matches(\"t/[01]/.+\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":172,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Could not read Todo.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":173,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":174,"author":{"gitId":"sopa301"},"content":" String[] arr \u003d str.split(\"/\");","lastModifiedDate":"2023-08-25"},{"lineNumber":175,"author":{"gitId":"sopa301"},"content":" return new ToDo(arr[2], arr[1].equals(\"1\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":176,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":177,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":178,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":179,"author":{"gitId":"sopa301"},"content":" * Checks for sameness of ToDo. ToDos are the same if they have the same name.","lastModifiedDate":"2023-08-26"},{"lineNumber":180,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":181,"author":{"gitId":"sopa301"},"content":" * @param o Object to compare to.","lastModifiedDate":"2023-08-26"},{"lineNumber":182,"author":{"gitId":"sopa301"},"content":" * @return True if objects are the same, else false.","lastModifiedDate":"2023-08-26"},{"lineNumber":183,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":184,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":185,"author":{"gitId":"sopa301"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":186,"author":{"gitId":"sopa301"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":187,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":188,"author":{"gitId":"sopa301"},"content":" } else if (o instanceof ToDo) {","lastModifiedDate":"2023-08-26"},{"lineNumber":189,"author":{"gitId":"sopa301"},"content":" return this.getName().equals(((ToDo) o).getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":190,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":191,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":192,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":193,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":194,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":195,"author":{"gitId":"sopa301"},"content":" * Creates a ToDo object.","lastModifiedDate":"2023-08-25"},{"lineNumber":196,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":197,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create the ToDo object from.","lastModifiedDate":"2023-08-25"},{"lineNumber":198,"author":{"gitId":"sopa301"},"content":" * @return ToDo object.","lastModifiedDate":"2023-08-25"},{"lineNumber":199,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If a ToDo object cannot be created from the string.","lastModifiedDate":"2023-08-25"},{"lineNumber":200,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":201,"author":{"gitId":"sopa301"},"content":" public static ToDo makeToDo(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-25"},{"lineNumber":202,"author":{"gitId":"sopa301"},"content":" String name \u003d str.substring(4).trim();","lastModifiedDate":"2023-08-25"},{"lineNumber":203,"author":{"gitId":"sopa301"},"content":" if (name.equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":204,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the todo description can\u0027t be empty.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":205,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":206,"author":{"gitId":"sopa301"},"content":" return new ToDo(name);","lastModifiedDate":"2023-08-25"},{"lineNumber":207,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":208,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":209,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":210,"author":{"gitId":"sopa301"},"content":" * String representation of the todo.","lastModifiedDate":"2023-08-26"},{"lineNumber":211,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":212,"author":{"gitId":"sopa301"},"content":" * @return String representation.","lastModifiedDate":"2023-08-26"},{"lineNumber":213,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":214,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":215,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":216,"author":{"gitId":"sopa301"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":217,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":218,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":219,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":220,"author":{"gitId":"sopa301"},"content":" * Get data string representation.","lastModifiedDate":"2023-08-26"},{"lineNumber":221,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":222,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-08-26"},{"lineNumber":223,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":224,"author":{"gitId":"sopa301"},"content":" public String convertToDataString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":225,"author":{"gitId":"sopa301"},"content":" return \"t/\" + (super.isDone() ? \"1\" : \"0\") + \"/\" + super.getName();","lastModifiedDate":"2023-08-26"},{"lineNumber":226,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":227,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":228,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":229,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":230,"author":{"gitId":"sopa301"},"content":" * Deadline subclass. Contains a name and a time the deadline is due.","lastModifiedDate":"2023-08-24"},{"lineNumber":231,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":232,"author":{"gitId":"sopa301"},"content":" public static class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":233,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":234,"author":{"gitId":"sopa301"},"content":" * The time the deadline is due.","lastModifiedDate":"2023-08-24"},{"lineNumber":235,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":236,"author":{"gitId":"sopa301"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-02"},{"lineNumber":237,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":238,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":239,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":240,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":241,"author":{"gitId":"sopa301"},"content":" * @param name Name of the deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":242,"author":{"gitId":"sopa301"},"content":" * @param by The time the deadline is due.","lastModifiedDate":"2023-08-24"},{"lineNumber":243,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":244,"author":{"gitId":"sopa301"},"content":" public Deadline(String name, LocalDate by) {","lastModifiedDate":"2023-08-25"},{"lineNumber":245,"author":{"gitId":"sopa301"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":246,"author":{"gitId":"sopa301"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-20"},{"lineNumber":247,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":248,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":249,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":250,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-08-25"},{"lineNumber":251,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":252,"author":{"gitId":"sopa301"},"content":" * @param name Name of deadline.","lastModifiedDate":"2023-08-26"},{"lineNumber":253,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of deadline.","lastModifiedDate":"2023-08-26"},{"lineNumber":254,"author":{"gitId":"sopa301"},"content":" * @param by The time the deadline is due.","lastModifiedDate":"2023-08-25"},{"lineNumber":255,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":256,"author":{"gitId":"sopa301"},"content":" protected Deadline(String name, boolean isDone, LocalDate by) {","lastModifiedDate":"2023-08-25"},{"lineNumber":257,"author":{"gitId":"sopa301"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-25"},{"lineNumber":258,"author":{"gitId":"sopa301"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":259,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":260,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":261,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":262,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and constructs a Deadline object based on the information.","lastModifiedDate":"2023-08-25"},{"lineNumber":263,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":264,"author":{"gitId":"sopa301"},"content":" * @param str Data string.","lastModifiedDate":"2023-08-25"},{"lineNumber":265,"author":{"gitId":"sopa301"},"content":" * @return Deadline object.","lastModifiedDate":"2023-08-25"},{"lineNumber":266,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If Deadline object cannot be created.","lastModifiedDate":"2023-08-25"},{"lineNumber":267,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":268,"author":{"gitId":"sopa301"},"content":" public static Deadline convertFromString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-25"},{"lineNumber":269,"author":{"gitId":"sopa301"},"content":" if (!str.matches(\"d/[01]/.+/.+\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":270,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Could not read Deadline.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":271,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":272,"author":{"gitId":"sopa301"},"content":" String[] arr \u003d str.split(\"/\");","lastModifiedDate":"2023-08-25"},{"lineNumber":273,"author":{"gitId":"sopa301"},"content":" return new Deadline(arr[2], arr[1].equals(\"1\"),","lastModifiedDate":"2023-08-25"},{"lineNumber":274,"author":{"gitId":"sopa301"},"content":" LocalDate.parse(arr[3], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")));","lastModifiedDate":"2023-08-25"},{"lineNumber":275,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":276,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":277,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":278,"author":{"gitId":"sopa301"},"content":" * Creates a Deadline object.","lastModifiedDate":"2023-08-25"},{"lineNumber":279,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":280,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create the Deadline object from.","lastModifiedDate":"2023-08-25"},{"lineNumber":281,"author":{"gitId":"sopa301"},"content":" * @return Deadline object.","lastModifiedDate":"2023-08-25"},{"lineNumber":282,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If a Deadline object cannot be created from the string.","lastModifiedDate":"2023-08-25"},{"lineNumber":283,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":284,"author":{"gitId":"sopa301"},"content":" public static Deadline makeDeadline(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-25"},{"lineNumber":285,"author":{"gitId":"sopa301"},"content":" String[] comps \u003d str.split(\"/\");","lastModifiedDate":"2023-08-25"},{"lineNumber":286,"author":{"gitId":"sopa301"},"content":" if (comps.length !\u003d 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":287,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the deadline is written in the correct format:\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":288,"author":{"gitId":"sopa301"},"content":" + \"deadline ... /by ...\");","lastModifiedDate":"2023-08-25"},{"lineNumber":289,"author":{"gitId":"sopa301"},"content":" } else if (comps[0].trim().equals(\"deadline\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":290,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the deadline description can\u0027t be empty.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":291,"author":{"gitId":"sopa301"},"content":" } else if (comps[1].trim().equals(\"by\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":292,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the deadline can\u0027t be empty.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":293,"author":{"gitId":"sopa301"},"content":" } else if (!comps[1].startsWith(\"by\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":294,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the deadline is written in the correct format:\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":295,"author":{"gitId":"sopa301"},"content":" + \"deadline ... /by ...\");","lastModifiedDate":"2023-08-25"},{"lineNumber":296,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":297,"author":{"gitId":"sopa301"},"content":" LocalDate by;","lastModifiedDate":"2023-08-25"},{"lineNumber":298,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":299,"author":{"gitId":"sopa301"},"content":" by \u003d LocalDate.parse(comps[1].substring(3).trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":300,"author":{"gitId":"sopa301"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":301,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"One or more dates are invalid.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":302,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":303,"author":{"gitId":"sopa301"},"content":" if (by.isBefore(LocalDate.now())) {","lastModifiedDate":"2023-08-25"},{"lineNumber":304,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Deadline can\u0027t be before now!\");","lastModifiedDate":"2023-08-25"},{"lineNumber":305,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":306,"author":{"gitId":"sopa301"},"content":" return new Deadline(comps[0].substring(9).trim(), by);","lastModifiedDate":"2023-08-26"},{"lineNumber":307,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":308,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":309,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":310,"author":{"gitId":"sopa301"},"content":" * String representation of the deadline.","lastModifiedDate":"2023-08-26"},{"lineNumber":311,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":312,"author":{"gitId":"sopa301"},"content":" * @return String representation.","lastModifiedDate":"2023-08-26"},{"lineNumber":313,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":314,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":315,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":316,"author":{"gitId":"sopa301"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-26"},{"lineNumber":317,"author":{"gitId":"sopa301"},"content":" + this.getBy().format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-26"},{"lineNumber":318,"author":{"gitId":"sopa301"},"content":" + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":319,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":320,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":321,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":322,"author":{"gitId":"sopa301"},"content":" * Get the deadline time.","lastModifiedDate":"2023-08-26"},{"lineNumber":323,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":324,"author":{"gitId":"sopa301"},"content":" * @return Deadline time.","lastModifiedDate":"2023-08-26"},{"lineNumber":325,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":326,"author":{"gitId":"sopa301"},"content":" protected LocalDate getBy() {","lastModifiedDate":"2023-08-26"},{"lineNumber":327,"author":{"gitId":"sopa301"},"content":" return this.by;","lastModifiedDate":"2023-08-26"},{"lineNumber":328,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":329,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":330,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":331,"author":{"gitId":"sopa301"},"content":" * Returns data string representation.","lastModifiedDate":"2023-08-25"},{"lineNumber":332,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":333,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-08-25"},{"lineNumber":334,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":335,"author":{"gitId":"sopa301"},"content":" public String convertToDataString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":336,"author":{"gitId":"sopa301"},"content":" return \"d/\" + (super.isDone() ? \"1\" : \"0\") + \"/\" + super.getName()","lastModifiedDate":"2023-08-25"},{"lineNumber":337,"author":{"gitId":"sopa301"},"content":" + \"/\" + this.getBy();","lastModifiedDate":"2023-08-25"},{"lineNumber":338,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":339,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":340,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":341,"author":{"gitId":"sopa301"},"content":" * Checks for sameness. Deadlines are the same if they have the same name and deadline.","lastModifiedDate":"2023-08-26"},{"lineNumber":342,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":343,"author":{"gitId":"sopa301"},"content":" * @param o Object to compare to.","lastModifiedDate":"2023-08-26"},{"lineNumber":344,"author":{"gitId":"sopa301"},"content":" * @return True if objects are the same, else false.","lastModifiedDate":"2023-08-26"},{"lineNumber":345,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":346,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":347,"author":{"gitId":"sopa301"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":348,"author":{"gitId":"sopa301"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":349,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":350,"author":{"gitId":"sopa301"},"content":" } else if (o instanceof Deadline) {","lastModifiedDate":"2023-08-26"},{"lineNumber":351,"author":{"gitId":"sopa301"},"content":" return this.getName().equals(((Deadline) o).getName())","lastModifiedDate":"2023-08-26"},{"lineNumber":352,"author":{"gitId":"sopa301"},"content":" \u0026\u0026 this.getBy().equals(((Deadline) o).getBy());","lastModifiedDate":"2023-08-26"},{"lineNumber":353,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":354,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":355,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":356,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":357,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":358,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":359,"author":{"gitId":"sopa301"},"content":" * Event subclass. Contains a name, event start time and end time.","lastModifiedDate":"2023-08-24"},{"lineNumber":360,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":361,"author":{"gitId":"sopa301"},"content":" public static class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":362,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":363,"author":{"gitId":"sopa301"},"content":" * Event start time.","lastModifiedDate":"2023-08-24"},{"lineNumber":364,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":365,"author":{"gitId":"sopa301"},"content":" private LocalDate from;","lastModifiedDate":"2023-09-02"},{"lineNumber":366,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":367,"author":{"gitId":"sopa301"},"content":" * Event end time.","lastModifiedDate":"2023-08-24"},{"lineNumber":368,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":369,"author":{"gitId":"sopa301"},"content":" private LocalDate to;","lastModifiedDate":"2023-09-02"},{"lineNumber":370,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":371,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":372,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":373,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":374,"author":{"gitId":"sopa301"},"content":" * @param name Event name.","lastModifiedDate":"2023-08-24"},{"lineNumber":375,"author":{"gitId":"sopa301"},"content":" * @param from Event start time.","lastModifiedDate":"2023-08-24"},{"lineNumber":376,"author":{"gitId":"sopa301"},"content":" * @param to Event end time.","lastModifiedDate":"2023-08-24"},{"lineNumber":377,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":378,"author":{"gitId":"sopa301"},"content":" public Event(String name, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":379,"author":{"gitId":"sopa301"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":380,"author":{"gitId":"sopa301"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-20"},{"lineNumber":381,"author":{"gitId":"sopa301"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-20"},{"lineNumber":382,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":383,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":384,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":385,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-08-25"},{"lineNumber":386,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":387,"author":{"gitId":"sopa301"},"content":" * @param name Name of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":388,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":389,"author":{"gitId":"sopa301"},"content":" * @param from Start time of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":390,"author":{"gitId":"sopa301"},"content":" * @param to End time of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":391,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":392,"author":{"gitId":"sopa301"},"content":" protected Event(String name, boolean isDone, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":393,"author":{"gitId":"sopa301"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-25"},{"lineNumber":394,"author":{"gitId":"sopa301"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":395,"author":{"gitId":"sopa301"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":396,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":397,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":398,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":399,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and constructs an Event object based on the information.","lastModifiedDate":"2023-08-25"},{"lineNumber":400,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":401,"author":{"gitId":"sopa301"},"content":" * @param str Data string.","lastModifiedDate":"2023-08-26"},{"lineNumber":402,"author":{"gitId":"sopa301"},"content":" * @return Event object.","lastModifiedDate":"2023-08-25"},{"lineNumber":403,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If an Event object cannot be created.","lastModifiedDate":"2023-08-25"},{"lineNumber":404,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":405,"author":{"gitId":"sopa301"},"content":" public static Event convertFromString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-25"},{"lineNumber":406,"author":{"gitId":"sopa301"},"content":" if (!str.matches(\"e/[01]/.+/.+/.+\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":407,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Could not read Event.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":408,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":409,"author":{"gitId":"sopa301"},"content":" String[] arr \u003d str.split(\"/\");","lastModifiedDate":"2023-08-25"},{"lineNumber":410,"author":{"gitId":"sopa301"},"content":" return new Event(arr[2], arr[1].equals(\"1\"), LocalDate.parse(arr[3]), LocalDate.parse(arr[4]));","lastModifiedDate":"2023-08-25"},{"lineNumber":411,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":412,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":413,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":414,"author":{"gitId":"sopa301"},"content":" * Creates an Event object.","lastModifiedDate":"2023-08-25"},{"lineNumber":415,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":416,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create the object from.","lastModifiedDate":"2023-08-25"},{"lineNumber":417,"author":{"gitId":"sopa301"},"content":" * @return Event object.","lastModifiedDate":"2023-08-25"},{"lineNumber":418,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the input string cannot create the Event object.","lastModifiedDate":"2023-08-25"},{"lineNumber":419,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":420,"author":{"gitId":"sopa301"},"content":" public static Event makeEvent(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-25"},{"lineNumber":421,"author":{"gitId":"sopa301"},"content":" String[] comps \u003d str.split(\"/\");","lastModifiedDate":"2023-08-25"},{"lineNumber":422,"author":{"gitId":"sopa301"},"content":" if (comps.length !\u003d 3) {","lastModifiedDate":"2023-08-25"},{"lineNumber":423,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the event is written in the correct format:\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":424,"author":{"gitId":"sopa301"},"content":" + \"event ... /from ... /to ...\");","lastModifiedDate":"2023-08-25"},{"lineNumber":425,"author":{"gitId":"sopa301"},"content":" } else if (comps[0].trim().equals(\"event\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":426,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the event description can\u0027t be empty.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":427,"author":{"gitId":"sopa301"},"content":" } else if (comps[1].trim().equals(\"from\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":428,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, event start time can\u0027t be empty.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":429,"author":{"gitId":"sopa301"},"content":" } else if (comps[2].trim().equals(\"to\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":430,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, event end time can\u0027t be empty.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":431,"author":{"gitId":"sopa301"},"content":" } else if (!comps[1].startsWith(\"from \") || !comps[2].startsWith(\"to \")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":432,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the event is written in the correct format:\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":433,"author":{"gitId":"sopa301"},"content":" + \"event ... /from ... /to ...\");","lastModifiedDate":"2023-08-25"},{"lineNumber":434,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":435,"author":{"gitId":"sopa301"},"content":" LocalDate from;","lastModifiedDate":"2023-08-26"},{"lineNumber":436,"author":{"gitId":"sopa301"},"content":" LocalDate to;","lastModifiedDate":"2023-08-26"},{"lineNumber":437,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":438,"author":{"gitId":"sopa301"},"content":" from \u003d LocalDate.parse(comps[1].substring(5).trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":439,"author":{"gitId":"sopa301"},"content":" to \u003d LocalDate.parse(comps[2].substring(3).trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":440,"author":{"gitId":"sopa301"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":441,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"One or more dates are invalid.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":442,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":443,"author":{"gitId":"sopa301"},"content":" if (from.isAfter(to)) {","lastModifiedDate":"2023-08-25"},{"lineNumber":444,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Event end time can\u0027t be before event start time!\");","lastModifiedDate":"2023-08-25"},{"lineNumber":445,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":446,"author":{"gitId":"sopa301"},"content":" return new Event(comps[0].substring(6).trim(), from, to);","lastModifiedDate":"2023-08-26"},{"lineNumber":447,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":448,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":449,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":450,"author":{"gitId":"sopa301"},"content":" * Get event start time.","lastModifiedDate":"2023-08-26"},{"lineNumber":451,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":452,"author":{"gitId":"sopa301"},"content":" * @return Event start time.","lastModifiedDate":"2023-08-26"},{"lineNumber":453,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":454,"author":{"gitId":"sopa301"},"content":" protected LocalDate getFrom() {","lastModifiedDate":"2023-08-26"},{"lineNumber":455,"author":{"gitId":"sopa301"},"content":" return this.from;","lastModifiedDate":"2023-08-26"},{"lineNumber":456,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":457,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":458,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":459,"author":{"gitId":"sopa301"},"content":" * Get event end time.","lastModifiedDate":"2023-08-26"},{"lineNumber":460,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":461,"author":{"gitId":"sopa301"},"content":" * @return Event end time.","lastModifiedDate":"2023-08-26"},{"lineNumber":462,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":463,"author":{"gitId":"sopa301"},"content":" protected LocalDate getTo() {","lastModifiedDate":"2023-08-26"},{"lineNumber":464,"author":{"gitId":"sopa301"},"content":" return this.to;","lastModifiedDate":"2023-08-26"},{"lineNumber":465,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":466,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":467,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":468,"author":{"gitId":"sopa301"},"content":" * String representation of the event.","lastModifiedDate":"2023-08-26"},{"lineNumber":469,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":470,"author":{"gitId":"sopa301"},"content":" * @return String representation.","lastModifiedDate":"2023-08-26"},{"lineNumber":471,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":472,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":473,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":474,"author":{"gitId":"sopa301"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-26"},{"lineNumber":475,"author":{"gitId":"sopa301"},"content":" + \" (from: \"","lastModifiedDate":"2023-08-26"},{"lineNumber":476,"author":{"gitId":"sopa301"},"content":" + this.getFrom().format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-26"},{"lineNumber":477,"author":{"gitId":"sopa301"},"content":" + \" to: \" + this.getTo().format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-26"},{"lineNumber":478,"author":{"gitId":"sopa301"},"content":" + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":479,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":480,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":481,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":482,"author":{"gitId":"sopa301"},"content":" * Returns data string representation.","lastModifiedDate":"2023-08-26"},{"lineNumber":483,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":484,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-08-26"},{"lineNumber":485,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":486,"author":{"gitId":"sopa301"},"content":" public String convertToDataString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":487,"author":{"gitId":"sopa301"},"content":" return \"e/\" + (super.isDone() ? \"1\" : \"0\") + \"/\" + super.getName()","lastModifiedDate":"2023-08-26"},{"lineNumber":488,"author":{"gitId":"sopa301"},"content":" + \"/\" + this.getFrom() + \"/\" + this.getTo();","lastModifiedDate":"2023-08-26"},{"lineNumber":489,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":490,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":491,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":492,"author":{"gitId":"sopa301"},"content":" * Checks for sameness. Events are the same if they have the same name, start time","lastModifiedDate":"2023-08-26"},{"lineNumber":493,"author":{"gitId":"sopa301"},"content":" * and end time.","lastModifiedDate":"2023-08-26"},{"lineNumber":494,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":495,"author":{"gitId":"sopa301"},"content":" * @param o Object to compare to.","lastModifiedDate":"2023-08-26"},{"lineNumber":496,"author":{"gitId":"sopa301"},"content":" * @return True if objects are the same, else false.","lastModifiedDate":"2023-08-26"},{"lineNumber":497,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":498,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":499,"author":{"gitId":"sopa301"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":500,"author":{"gitId":"sopa301"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":501,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":502,"author":{"gitId":"sopa301"},"content":" } else if (o instanceof Event) {","lastModifiedDate":"2023-08-26"},{"lineNumber":503,"author":{"gitId":"sopa301"},"content":" return this.getName().equals(((Event) o).getName())","lastModifiedDate":"2023-08-26"},{"lineNumber":504,"author":{"gitId":"sopa301"},"content":" \u0026\u0026 this.getFrom().equals(((Event) o).getFrom())","lastModifiedDate":"2023-08-26"},{"lineNumber":505,"author":{"gitId":"sopa301"},"content":" \u0026\u0026 this.getTo().equals(((Event) o).getTo());","lastModifiedDate":"2023-08-26"},{"lineNumber":506,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":507,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":508,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":509,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":510,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"sopa301":510}},{"path":"src/main/java/bot/utils/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.util.Collection;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import java.util.List;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" * Bot.Task list abstraction. Functions like an arraylist but may not contain one.","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Index starts at 1.","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" * Data structure to hold list.","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" private List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * Default constructor. To be used when an empty list is needed.","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" public TaskList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" * Constructor with a list of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * @param list List of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" public TaskList(Collection\u003cTask\u003e list) {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" this.list.addAll(list);","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" * Adds a task to the end of the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" * @param task Bot.Task to add.","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" * Gets the task at that index of the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" * @return Bot.Task object.","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" return this.list.get(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" * Removes the task at that index from the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" * @return Task object.","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If index is out of range.","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" public Task remove(int index) throws InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" return this.list.remove(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * Gets length of the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" * @return Length of list.","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" public int size() {","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" return this.list.size();","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" * Gets an iterator of the tasks in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" * @return Iterator of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" public Iterator\u003cTask\u003e iterator() {","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" return this.list.iterator();","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" * Marks the task at the specified index","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If index is out of range.","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" public void mark(int index) throws InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" this.list.get(index - 1).mark();","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" * Unmarks the task at the specified index.","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If index is out of range.","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" public void unmark(int index) throws InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" this.list.get(index - 1).unmark();","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" * Gets all tasks that contain the given string in their names.","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" * @param str Query string.","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":" * @return TaskList of tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":" public TaskList findAll(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" Iterator\u003cTask\u003e iter \u003d list.iterator();","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":" TaskList out \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" while (iter.hasNext()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" Task task \u003d iter.next();","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":" if (task.getName().contains(str)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" out.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" return out;","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":129}},{"path":"src/main/java/bot/utils/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":" * User interface class responsible for dealing with interactions with the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"public class Ui {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" * Default constructor. Creates a Ui object.","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" public Ui() {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * Formats the input string as an error message for the bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * @param str Input string.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" * @return Input string formatted as an error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" public String showError(String str) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" return println(\"ERROR: \" + str);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" * Formats the input string similar to System.out.println().","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * @param str Input string.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" * @return String with line separator.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" public String println(String str) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" return str + System.lineSeparator();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" * Gets the bot\u0027s welcome message.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * @return Welcome message.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" return println(\"Hello! I\u0027m the trash gremlin Caelus!\")","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" .concat(println(\"What can I do for you?\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" * Gets the bot\u0027s farewell message.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" * @return Farewell message.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" public String showGoodbye() {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" return println(\"Bye. I\u0027ll be at the nearest trash can!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" * Gets the inputted task list in a string format for printing to a screen.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" * @param tasks Input task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" * @return Task list in string format.","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" public String displayTaskList(TaskList tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" StringBuilder out \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" Iterator\u003cTask\u003e iter \u003d tasks.iterator();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" for (int ctr \u003d 1; iter.hasNext(); ctr++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" out.append(ctr).append(\". \")","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" .append(iter.next().toString())","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" .append(System.lineSeparator());","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" out.deleteCharAt(out.length() - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" return println(out.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":72}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"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":"sopa301"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"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":12,"author":{"gitId":"sopa301"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"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\"bot.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"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":12,"author":{"gitId":"sopa301"},"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":13,"author":{"gitId":"sopa301"},"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":14,"author":{"gitId":"sopa301"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":19}},{"path":"src/test/java/bot/utils/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" public void remove_validIndex_success() throws InvalidTaskException, InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" Task task \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" arr.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" assertEquals(task, tasks.remove(1));","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" public void remove_multipleIndex_success() throws InvalidTaskException, InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" Task task1 \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" Task task2 \u003d Task.makeTask(\"todo 2\");","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" arr.add(task1);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" arr.add(task2);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" assertEquals(task2, tasks.remove(2));","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" assertEquals(task1, tasks.remove(1));","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" public void remove_negativeIndex_throwsException() throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" Task task \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" arr.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" tasks.remove(-1);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, that index doesn\u0027t exist. Please key in a valid index.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" public void remove_bigNumber_throwsException() throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" Task task \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" arr.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" tasks.remove(100);","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, that index doesn\u0027t exist. Please key in a valid index.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":68}},{"path":"src/test/java/bot/utils/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" public void makeTask_validInput_success() throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" assertEquals(new Task.ToDo(\"name1\"), Task.makeTask(\"todo name1\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" assertEquals(new Task.Deadline(\"name2\", LocalDate.parse(\"2024-08-10\")),","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"deadline name2 /by 2024-08-10\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" assertEquals(new Task.Event(\"name3\",","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" LocalDate.parse(\"2024-07-01\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" LocalDate.parse(\"2024-08-01\")),","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"event name3 /from 2024-07-01 /to 2024-08-01\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" public void makeTask_missingDetailsToDo_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"todo\");","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, the todo description can\u0027t be empty.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" public void makeTask_missingDetailsDeadline_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"deadline two\");","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Please make sure the deadline \"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" + \"is written in the correct format:\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" + \"deadline ... /by ...\",","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" public void makeTask_missingDetailsEvent_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"event /from 2020-10-10 /to 2020-12-10\");","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, the event description can\u0027t be empty.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" public void makeTask_invalidDate_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"deadline kappa /by 2020-20-20\");","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" assertEquals(\"One or more dates are invalid.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":73}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"hello","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"delete 1","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"delete 1","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"todo taskone","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"mark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"unmark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"deadline tasktwo /by 2023-11-11","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"event taskthree /from 2023-08-25 /to 2023-08-26","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"event taskfail /from 2020-11-22 /to 2019-11-11","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"deadline taskfail /by 2020-20-20","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"mark 3","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":"delete 3","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"sopa301":20}},{"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":"sopa301"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\bot\\*.java","lastModifiedDate":"2023-08-26"},{"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":"sopa301"},"content":"java -classpath ..\\bin bot.Bot \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":{"sopa301":2,"-":19}}] diff --git a/sopa301_ip_master/commits.json b/sopa301_ip_master/commits.json index 8ad50075..44506d74 100644 --- a/sopa301_ip_master/commits.json +++ b/sopa301_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"sopa301":[{"date":"2023-08-19","commitResults":[{"hash":"4b46ff407fb5a48a39c3fcef9684929793f3959e","isMergeCommit":false,"messageTitle":"Changed name of bot from Duke to Bot.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":10}}}]},{"date":"2023-08-20","commitResults":[{"hash":"0c5151fc46abed3acc6a2da4d70984784eb04e93","isMergeCommit":false,"messageTitle":"Changed bot personality to trash gremlin Caelus. Added echo functionality.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"c496ac457dee587f236c279837330d68b0867bc6","isMergeCommit":false,"messageTitle":"Added list capability","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}},{"hash":"8c74c9a13a6a0f5b790f5945b2f623be5b88a827","isMergeCommit":false,"messageTitle":"Added task marking and unmarking capability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":7}}},{"hash":"fc1cb66b187c5ab0bd0d9b707e34bfa1f5ed8457","isMergeCommit":false,"messageTitle":"Added helper methods for Task class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"2e3671e1cbceedb97eb8b52ac0dd9a59ddbaadf7","isMergeCommit":false,"messageTitle":"Added support for multiple task types","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":12}}},{"hash":"595323519bfbd8b6b718eba81bac35ce99e156d5","isMergeCommit":false,"messageTitle":"Added test files and re-added echo function.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":3,"deletions":5},"bat":{"insertions":1,"deletions":1}}},{"hash":"e3c686c1dae4df283dcb68c3814931eb1c7c6887","isMergeCommit":false,"messageTitle":"Added exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":62}}},{"hash":"15447602bd6d89240b041018876456b746fc61dd","isMergeCommit":false,"messageTitle":"Added delete functionality","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":20,"deletions":18}}}]},{"date":"2023-08-24","commitResults":[{"hash":"3fe9fb3dbc306f02c0c245c890f6226ae8aa8e93","isMergeCommit":false,"messageTitle":"Minor optimisations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":33}}},{"hash":"01a901480ca35fb3ca2618b0a48263c915614869","isMergeCommit":false,"messageTitle":"Added documentation, fixed minor bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":274,"deletions":30}}}]},{"date":"2023-08-25","commitResults":[{"hash":"77d1eef11ebb63286fa2cfe3aabd1e222aa49b3a","isMergeCommit":false,"messageTitle":"Added data file reading capability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":1}}},{"hash":"81f7badc9b10c8df932a0c6068929697431c757d","isMergeCommit":false,"messageTitle":"Routed data folder creation to correct level","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"9ee179659314493c431f1e3791cc3b0d20c5f3cf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6aa376d107b20d168a164a2ec6810b86640cb571","isMergeCommit":false,"messageTitle":"Added save functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":98,"deletions":9}}},{"hash":"8244d7f7672f9c6044acfd9d68f6549cb7e189fb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"a00dfdbc5f28a8c5d5dffc63c4559276e42ce811","isMergeCommit":false,"messageTitle":"Added some date functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2}}},{"hash":"c1bb05324a14838ed8b2f0490b2de245555f4c19","isMergeCommit":false,"messageTitle":"Moved makeTask for classes to the respective classes and added some docs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":86}}},{"hash":"f63ff0f19cc3e8292501291dc48821c4f5f44623","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"0a4a2a049d5be7ffec1320900c4a404442e12ee1","isMergeCommit":false,"messageTitle":"Fix style for Task class","messageBody":"Certain excerpts are not conforming to the required style.\n\nLet\u0027s change it so that it follows the style guide.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"79c81ab19a25eb20c4738b5130348522e6fcc29d","isMergeCommit":false,"messageTitle":"Add TaskList class","messageBody":"We are required to add this abstraction.\n\nLet\u0027s add the TaskList class.\n","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":0}}},{"hash":"34801a5c116a34856b05b13c861b240fa668cffa","isMergeCommit":false,"messageTitle":"Add Storage class","messageBody":"We are required to add this abstraction.\n\nLet\u0027s add the Storage class.\n","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":1}}},{"hash":"a7126a6a16545582355863e3417011411b267785","isMergeCommit":false,"messageTitle":"Add Ui, Parser and Command classes","messageBody":"As part of the requirements, we have to do this.\n\nLet\u0027s add the required classes, the optional Command class,\nmore linking code and link it all together.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"fc1fdbd8ec19a7fa1d842e42c61fcafb1785446a","isMergeCommit":false,"messageTitle":"Fix more bugs","messageBody":"Let\u0027s fix more bugs.\n","fileTypesAndContributionMap":{"java":{"insertions":472,"deletions":198}}},{"hash":"5a47536dc26b4ec71f1e10784996e02b025d5627","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"798ca8dd57a316e6115b509da67c40bce6924edf","isMergeCommit":false,"messageTitle":"Format code into packages","messageBody":"As per requirement.\n\nLet\u0027s put the code in packages.\n","fileTypesAndContributionMap":{"java":{"insertions":258,"deletions":218},"bat":{"insertions":2,"deletions":2}}},{"hash":"30f91d7df0077f8aa6e5f5f23bdb446f91939f05","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages","A-Enums"],"fileTypesAndContributionMap":{}},{"hash":"bb40256b72163e658fa0c4dac7de713a0c3f8c7c","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bc5685a669e0b027a8ec0bffb23c65c871f3cd1a","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"As per the requirements.\n\nLet\u0027s add gradle and stylecheck.\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":73,"deletions":17}}},{"hash":"87decccd6e9c2536b9e607a06c306557c18ae8a6","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"As per requirements.\n\nLet\u0027s add some tests for Task and TaskList.\n","fileTypesAndContributionMap":{"java":{"insertions":201,"deletions":10}}},{"hash":"f32f6c0f945db47f5b64805d72ba7c2e02a43600","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"c4bc712a68dae9dc3c13a5f53673c08ff9fe8457","isMergeCommit":false,"messageTitle":"Add JAR packaging capability","messageBody":"As per requirements, let\u0027s make our bot packagable using gradle.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"1f4599ea2775d94d3418606481d80f2ad31aae91","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"d11da99b21640e001c2efa25a6017186e39a4158","isMergeCommit":false,"messageTitle":"Fix coding standard for test files","messageBody":"As per requirements, let\u0027s fix the coding standard for TaskListTest\nand TaskTest.\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":8}}},{"hash":"87c5ad809cbc64f790654a41e3bebf897dd48988","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"As per requirements, let\u0027s add the find command.\n","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":16}}},{"hash":"266e4e53c2b45a591c3ad281d74adaa8cff7bd08","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"a06d59e9228d0902adf99bade157e13faad4fd12","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9","A-Checkstyle"],"fileTypesAndContributionMap":{}},{"hash":"c334282b65dda09bc57a7e40c44da0ed4a85983f","isMergeCommit":false,"messageTitle":"Add code to close scanner","messageBody":"It\u0027s nice to close scanners after use. Let\u0027s close the scanner in Ui at\nthe end of its usage.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"7eb0b44305eb5fe12c42b31fcb85215453f9849c","isMergeCommit":false,"messageTitle":"Fix minor bugs","messageBody":"Let\u0027s remove the final keyword from all not-properly-named constants\n(thereby making them non-constants) and add code in parser for when\npeople key in commands without anything else.\n","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":18}}}]}]},"authorFileTypeContributionMap":{"sopa301":{"java":1567,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":7,"txt":20}},"authorContributionVariance":{"sopa301":197708.28},"authorDisplayNameMap":{"sopa301":"CS2103T-F12-1 POON..RYAN"}} +{"authorDailyContributionsMap":{"sopa301":[{"date":"2023-08-19","commitResults":[{"hash":"4b46ff407fb5a48a39c3fcef9684929793f3959e","isMergeCommit":false,"messageTitle":"Changed name of bot from Duke to Bot.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":10}}}]},{"date":"2023-08-20","commitResults":[{"hash":"0c5151fc46abed3acc6a2da4d70984784eb04e93","isMergeCommit":false,"messageTitle":"Changed bot personality to trash gremlin Caelus. Added echo functionality.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"c496ac457dee587f236c279837330d68b0867bc6","isMergeCommit":false,"messageTitle":"Added list capability","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}},{"hash":"8c74c9a13a6a0f5b790f5945b2f623be5b88a827","isMergeCommit":false,"messageTitle":"Added task marking and unmarking capability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":7}}},{"hash":"fc1cb66b187c5ab0bd0d9b707e34bfa1f5ed8457","isMergeCommit":false,"messageTitle":"Added helper methods for Task class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"2e3671e1cbceedb97eb8b52ac0dd9a59ddbaadf7","isMergeCommit":false,"messageTitle":"Added support for multiple task types","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":12}}},{"hash":"595323519bfbd8b6b718eba81bac35ce99e156d5","isMergeCommit":false,"messageTitle":"Added test files and re-added echo function.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":3,"deletions":5},"bat":{"insertions":1,"deletions":1}}},{"hash":"e3c686c1dae4df283dcb68c3814931eb1c7c6887","isMergeCommit":false,"messageTitle":"Added exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":62}}},{"hash":"15447602bd6d89240b041018876456b746fc61dd","isMergeCommit":false,"messageTitle":"Added delete functionality","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":20,"deletions":18}}}]},{"date":"2023-08-24","commitResults":[{"hash":"3fe9fb3dbc306f02c0c245c890f6226ae8aa8e93","isMergeCommit":false,"messageTitle":"Minor optimisations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":33}}},{"hash":"01a901480ca35fb3ca2618b0a48263c915614869","isMergeCommit":false,"messageTitle":"Added documentation, fixed minor bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":274,"deletions":30}}}]},{"date":"2023-08-25","commitResults":[{"hash":"77d1eef11ebb63286fa2cfe3aabd1e222aa49b3a","isMergeCommit":false,"messageTitle":"Added data file reading capability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":1}}},{"hash":"81f7badc9b10c8df932a0c6068929697431c757d","isMergeCommit":false,"messageTitle":"Routed data folder creation to correct level","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"9ee179659314493c431f1e3791cc3b0d20c5f3cf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6aa376d107b20d168a164a2ec6810b86640cb571","isMergeCommit":false,"messageTitle":"Added save functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":98,"deletions":9}}},{"hash":"8244d7f7672f9c6044acfd9d68f6549cb7e189fb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"a00dfdbc5f28a8c5d5dffc63c4559276e42ce811","isMergeCommit":false,"messageTitle":"Added some date functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2}}},{"hash":"c1bb05324a14838ed8b2f0490b2de245555f4c19","isMergeCommit":false,"messageTitle":"Moved makeTask for classes to the respective classes and added some docs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":86}}},{"hash":"f63ff0f19cc3e8292501291dc48821c4f5f44623","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"0a4a2a049d5be7ffec1320900c4a404442e12ee1","isMergeCommit":false,"messageTitle":"Fix style for Task class","messageBody":"Certain excerpts are not conforming to the required style.\n\nLet\u0027s change it so that it follows the style guide.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"79c81ab19a25eb20c4738b5130348522e6fcc29d","isMergeCommit":false,"messageTitle":"Add TaskList class","messageBody":"We are required to add this abstraction.\n\nLet\u0027s add the TaskList class.\n","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":0}}},{"hash":"34801a5c116a34856b05b13c861b240fa668cffa","isMergeCommit":false,"messageTitle":"Add Storage class","messageBody":"We are required to add this abstraction.\n\nLet\u0027s add the Storage class.\n","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":1}}},{"hash":"a7126a6a16545582355863e3417011411b267785","isMergeCommit":false,"messageTitle":"Add Ui, Parser and Command classes","messageBody":"As part of the requirements, we have to do this.\n\nLet\u0027s add the required classes, the optional Command class,\nmore linking code and link it all together.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"fc1fdbd8ec19a7fa1d842e42c61fcafb1785446a","isMergeCommit":false,"messageTitle":"Fix more bugs","messageBody":"Let\u0027s fix more bugs.\n","fileTypesAndContributionMap":{"java":{"insertions":472,"deletions":198}}},{"hash":"5a47536dc26b4ec71f1e10784996e02b025d5627","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"798ca8dd57a316e6115b509da67c40bce6924edf","isMergeCommit":false,"messageTitle":"Format code into packages","messageBody":"As per requirement.\n\nLet\u0027s put the code in packages.\n","fileTypesAndContributionMap":{"java":{"insertions":258,"deletions":218},"bat":{"insertions":2,"deletions":2}}},{"hash":"30f91d7df0077f8aa6e5f5f23bdb446f91939f05","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages","A-Enums"],"fileTypesAndContributionMap":{}},{"hash":"bb40256b72163e658fa0c4dac7de713a0c3f8c7c","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bc5685a669e0b027a8ec0bffb23c65c871f3cd1a","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"As per the requirements.\n\nLet\u0027s add gradle and stylecheck.\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":73,"deletions":17}}},{"hash":"87decccd6e9c2536b9e607a06c306557c18ae8a6","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"As per requirements.\n\nLet\u0027s add some tests for Task and TaskList.\n","fileTypesAndContributionMap":{"java":{"insertions":201,"deletions":10}}},{"hash":"f32f6c0f945db47f5b64805d72ba7c2e02a43600","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"c4bc712a68dae9dc3c13a5f53673c08ff9fe8457","isMergeCommit":false,"messageTitle":"Add JAR packaging capability","messageBody":"As per requirements, let\u0027s make our bot packagable using gradle.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"1f4599ea2775d94d3418606481d80f2ad31aae91","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"d11da99b21640e001c2efa25a6017186e39a4158","isMergeCommit":false,"messageTitle":"Fix coding standard for test files","messageBody":"As per requirements, let\u0027s fix the coding standard for TaskListTest\nand TaskTest.\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":8}}},{"hash":"87c5ad809cbc64f790654a41e3bebf897dd48988","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"As per requirements, let\u0027s add the find command.\n","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":16}}},{"hash":"266e4e53c2b45a591c3ad281d74adaa8cff7bd08","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"a06d59e9228d0902adf99bade157e13faad4fd12","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9","A-Checkstyle"],"fileTypesAndContributionMap":{}},{"hash":"c334282b65dda09bc57a7e40c44da0ed4a85983f","isMergeCommit":false,"messageTitle":"Add code to close scanner","messageBody":"It\u0027s nice to close scanners after use. Let\u0027s close the scanner in Ui at\nthe end of its usage.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"7eb0b44305eb5fe12c42b31fcb85215453f9849c","isMergeCommit":false,"messageTitle":"Fix minor bugs","messageBody":"Let\u0027s remove the final keyword from all not-properly-named constants\n(thereby making them non-constants) and add code in parser for when\npeople key in commands without anything else.\n","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":18}}}]},{"date":"2023-09-04","commitResults":[{"hash":"7135efadcbcefa3b6f17cdde90a974dcbdd25625","isMergeCommit":false,"messageTitle":"Add GUI for the bot","messageBody":"As per requirements, let\u0027s add a GUI for our bot.\n","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":330,"deletions":86}}},{"hash":"db2aa59a838cf9bc2659e3d0c7de3aab570e9020","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"Let\u0027s just fix the style for the project because why not?\n","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":8}}},{"hash":"60a41b51dbef2922e683dcb99ef620497fafe84c","isMergeCommit":false,"messageTitle":"Move Main out of gui package","messageBody":"Let\u0027s move the Main class into the main package because it\u0027s the main\nclass.\n","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"3d59d5b4e3b95fa21d0b4b2fecb608a46988daf2","isMergeCommit":false,"messageTitle":"Rename package statements","messageBody":"Let\u0027s rename the package statements for the classes affected by the\nmoving of Main so they don\u0027t break.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"ff60959e951869ea4dace2b2e07eff1d313abb88","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"sopa301":{"java":1811,"md":0,"fxml":35,"sh":0,"bat":2,"gradle":21,"txt":20}},"authorContributionVariance":{"sopa301":182549.25},"authorDisplayNameMap":{"sopa301":"CS2103T-F12-1 POON..RYAN"}} diff --git a/summary.json b/summary.json index aef9a2dc..59476a6c 100644 --- a/summary.json +++ b/summary.json @@ -1 +1 @@ -{"repoSenseVersion":"3bad16bb3d","reportGeneratedTime":"Mon Sep 4 21:43:12 2023 UTC+08:00","reportGenerationTime":" 1 minute(s) 48.10 second(s)","zoneId":"UTC+08:00","reportTitle":"CS2103 iP Code Dashboard","repos":[{"location":{"location":"https://github.com/remuslum/ip.git","repoName":"ip","organization":"remuslum","domainName":"github"},"branch":"master","displayName":"remuslum/ip[master]","outputFolderName":"remuslum_ip_master"},{"location":{"location":"https://github.com/elhy1999/ip.git","repoName":"ip","organization":"elhy1999","domainName":"github"},"branch":"master","displayName":"elhy1999/ip[master]","outputFolderName":"elhy1999_ip_master"},{"location":{"location":"https://github.com/XihuaZ/ip.git","repoName":"ip","organization":"XihuaZ","domainName":"github"},"branch":"master","displayName":"XihuaZ/ip[master]","outputFolderName":"XihuaZ_ip_master"},{"location":{"location":"https://github.com/bwangpj/ip.git","repoName":"ip","organization":"bwangpj","domainName":"github"},"branch":"master","displayName":"bwangpj/ip[master]","outputFolderName":"bwangpj_ip_master"},{"location":{"location":"https://github.com/shuenj/ip.git","repoName":"ip","organization":"shuenj","domainName":"github"},"branch":"master","displayName":"shuenj/ip[master]","outputFolderName":"shuenj_ip_master"},{"location":{"location":"https://github.com/SungMatt/ip.git","repoName":"ip","organization":"SungMatt","domainName":"github"},"branch":"master","displayName":"SungMatt/ip[master]","outputFolderName":"SungMatt_ip_master"},{"location":{"location":"https://github.com/junhonglow/ip.git","repoName":"ip","organization":"junhonglow","domainName":"github"},"branch":"master","displayName":"junhonglow/ip[master]","outputFolderName":"junhonglow_ip_master"},{"location":{"location":"https://github.com/xavierpok/ip.git","repoName":"ip","organization":"xavierpok","domainName":"github"},"branch":"master","displayName":"xavierpok/ip[master]","outputFolderName":"xavierpok_ip_master"},{"location":{"location":"https://github.com/marcellaantania/ip.git","repoName":"ip","organization":"marcellaantania","domainName":"github"},"branch":"master","displayName":"marcellaantania/ip[master]","outputFolderName":"marcellaantania_ip_master"},{"location":{"location":"https://github.com/felibunnyy/ip.git","repoName":"ip","organization":"felibunnyy","domainName":"github"},"branch":"master","displayName":"felibunnyy/ip[master]","outputFolderName":"felibunnyy_ip_master"},{"location":{"location":"https://github.com/starrylight99/ip.git","repoName":"ip","organization":"starrylight99","domainName":"github"},"branch":"master","displayName":"starrylight99/ip[master]","outputFolderName":"starrylight99_ip_master"},{"location":{"location":"https://github.com/leezhanpeng/ip.git","repoName":"ip","organization":"leezhanpeng","domainName":"github"},"branch":"master","displayName":"leezhanpeng/ip[master]","outputFolderName":"leezhanpeng_ip_master"},{"location":{"location":"https://github.com/sheryew/ip.git","repoName":"ip","organization":"sheryew","domainName":"github"},"branch":"master","displayName":"sheryew/ip[master]","outputFolderName":"sheryew_ip_master"},{"location":{"location":"https://github.com/lihongguang00/ip.git","repoName":"ip","organization":"lihongguang00","domainName":"github"},"branch":"master","displayName":"lihongguang00/ip[master]","outputFolderName":"lihongguang00_ip_master"},{"location":{"location":"https://github.com/nicrandomlee/ip.git","repoName":"ip","organization":"nicrandomlee","domainName":"github"},"branch":"master","displayName":"nicrandomlee/ip[master]","outputFolderName":"nicrandomlee_ip_master"},{"location":{"location":"https://github.com/LuahJunYang/ip.git","repoName":"ip","organization":"LuahJunYang","domainName":"github"},"branch":"master","displayName":"LuahJunYang/ip[master]","outputFolderName":"LuahJunYang_ip_master"},{"location":{"location":"https://github.com/s-peiran/ip.git","repoName":"ip","organization":"s-peiran","domainName":"github"},"branch":"master","displayName":"s-peiran/ip[master]","outputFolderName":"s-peiran_ip_master"},{"location":{"location":"https://github.com/aarontxz/ip.git","repoName":"ip","organization":"aarontxz","domainName":"github"},"branch":"master","displayName":"aarontxz/ip[master]","outputFolderName":"aarontxz_ip_master"},{"location":{"location":"https://github.com/chiayunrong/ip.git","repoName":"ip","organization":"chiayunrong","domainName":"github"},"branch":"master","displayName":"chiayunrong/ip[master]","outputFolderName":"chiayunrong_ip_master"},{"location":{"location":"https://github.com/nixonwidjaja/ip.git","repoName":"ip","organization":"nixonwidjaja","domainName":"github"},"branch":"master","displayName":"nixonwidjaja/ip[master]","outputFolderName":"nixonwidjaja_ip_master"},{"location":{"location":"https://github.com/imkwokyong/ip.git","repoName":"ip","organization":"imkwokyong","domainName":"github"},"branch":"master","displayName":"imkwokyong/ip[master]","outputFolderName":"imkwokyong_ip_master"},{"location":{"location":"https://github.com/mamayuan/ip.git","repoName":"ip","organization":"mamayuan","domainName":"github"},"branch":"master","displayName":"mamayuan/ip[master]","outputFolderName":"mamayuan_ip_master"},{"location":{"location":"https://github.com/geoffong11/ip.git","repoName":"ip","organization":"geoffong11","domainName":"github"},"branch":"master","displayName":"geoffong11/ip[master]","outputFolderName":"geoffong11_ip_master"},{"location":{"location":"https://github.com/vivienherq/ip.git","repoName":"ip","organization":"vivienherq","domainName":"github"},"branch":"master","displayName":"vivienherq/ip[master]","outputFolderName":"vivienherq_ip_master"},{"location":{"location":"https://github.com/johnnythesnake12/ip.git","repoName":"ip","organization":"johnnythesnake12","domainName":"github"},"branch":"master","displayName":"johnnythesnake12/ip[master]","outputFolderName":"johnnythesnake12_ip_master"},{"location":{"location":"https://github.com/Cloud7050/ip.git","repoName":"ip","organization":"Cloud7050","domainName":"github"},"branch":"master","displayName":"Cloud7050/ip[master]","outputFolderName":"Cloud7050_ip_master"},{"location":{"location":"https://github.com/jonyeokj/ip.git","repoName":"ip","organization":"jonyeokj","domainName":"github"},"branch":"master","displayName":"jonyeokj/ip[master]","outputFolderName":"jonyeokj_ip_master"},{"location":{"location":"https://github.com/lipwei1808/ip.git","repoName":"ip","organization":"lipwei1808","domainName":"github"},"branch":"master","displayName":"lipwei1808/ip[master]","outputFolderName":"lipwei1808_ip_master"},{"location":{"location":"https://github.com/zhanyang01/ip.git","repoName":"ip","organization":"zhanyang01","domainName":"github"},"branch":"master","displayName":"zhanyang01/ip[master]","outputFolderName":"zhanyang01_ip_master"},{"location":{"location":"https://github.com/EricXiong420/ip.git","repoName":"ip","organization":"EricXiong420","domainName":"github"},"branch":"master","displayName":"EricXiong420/ip[master]","outputFolderName":"EricXiong420_ip_master"},{"location":{"location":"https://github.com/sp4ce-cowboy/ip.git","repoName":"ip","organization":"sp4ce-cowboy","domainName":"github"},"branch":"master","displayName":"sp4ce-cowboy/ip[master]","outputFolderName":"sp4ce-cowboy_ip_master"},{"location":{"location":"https://github.com/ktzy0305/ip.git","repoName":"ip","organization":"ktzy0305","domainName":"github"},"branch":"master","displayName":"ktzy0305/ip[master]","outputFolderName":"ktzy0305_ip_master"},{"location":{"location":"https://github.com/dom-buri/ip.git","repoName":"ip","organization":"dom-buri","domainName":"github"},"branch":"master","displayName":"dom-buri/ip[master]","outputFolderName":"dom-buri_ip_master"},{"location":{"location":"https://github.com/rayshawntan/ip.git","repoName":"ip","organization":"rayshawntan","domainName":"github"},"branch":"master","displayName":"rayshawntan/ip[master]","outputFolderName":"rayshawntan_ip_master"},{"location":{"location":"https://github.com/Seonlo99/ip.git","repoName":"ip","organization":"Seonlo99","domainName":"github"},"branch":"master","displayName":"Seonlo99/ip[master]","outputFolderName":"Seonlo99_ip_master"},{"location":{"location":"https://github.com/woojiahao/ip.git","repoName":"ip","organization":"woojiahao","domainName":"github"},"branch":"master","displayName":"woojiahao/ip[master]","outputFolderName":"woojiahao_ip_master"},{"location":{"location":"https://github.com/Angelyxx/ip.git","repoName":"ip","organization":"Angelyxx","domainName":"github"},"branch":"master","displayName":"Angelyxx/ip[master]","outputFolderName":"Angelyxx_ip_master"},{"location":{"location":"https://github.com/jamz903/ip.git","repoName":"ip","organization":"jamz903","domainName":"github"},"branch":"master","displayName":"jamz903/ip[master]","outputFolderName":"jamz903_ip_master"},{"location":{"location":"https://github.com/Fallman2/ip.git","repoName":"ip","organization":"Fallman2","domainName":"github"},"branch":"master","displayName":"Fallman2/ip[master]","outputFolderName":"Fallman2_ip_master"},{"location":{"location":"https://github.com/jacobcuison/ip.git","repoName":"ip","organization":"jacobcuison","domainName":"github"},"branch":"master","displayName":"jacobcuison/ip[master]","outputFolderName":"jacobcuison_ip_master"},{"location":{"location":"https://github.com/kenvynKwek/ip.git","repoName":"ip","organization":"kenvynKwek","domainName":"github"},"branch":"master","displayName":"kenvynKwek/ip[master]","outputFolderName":"kenvynKwek_ip_master"},{"location":{"location":"https://github.com/kokrui/ip.git","repoName":"ip","organization":"kokrui","domainName":"github"},"branch":"master","displayName":"kokrui/ip[master]","outputFolderName":"kokrui_ip_master"},{"location":{"location":"https://github.com/ncmathan/ip.git","repoName":"ip","organization":"ncmathan","domainName":"github"},"branch":"master","displayName":"ncmathan/ip[master]","outputFolderName":"ncmathan_ip_master"},{"location":{"location":"https://github.com/xCOLOURx/ip.git","repoName":"ip","organization":"xCOLOURx","domainName":"github"},"branch":"master","displayName":"xCOLOURx/ip[master]","outputFolderName":"xCOLOURx_ip_master"},{"location":{"location":"https://github.com/zhyuhan/ip.git","repoName":"ip","organization":"zhyuhan","domainName":"github"},"branch":"master","displayName":"zhyuhan/ip[master]","outputFolderName":"zhyuhan_ip_master"},{"location":{"location":"https://github.com/ceilingFan456/ip.git","repoName":"ip","organization":"ceilingFan456","domainName":"github"},"branch":"master","displayName":"ceilingFan456/ip[master]","outputFolderName":"ceilingFan456_ip_master"},{"location":{"location":"https://github.com/chuababyy/ip.git","repoName":"ip","organization":"chuababyy","domainName":"github"},"branch":"master","displayName":"chuababyy/ip[master]","outputFolderName":"chuababyy_ip_master"},{"location":{"location":"https://github.com/rocketninja7/ip.git","repoName":"ip","organization":"rocketninja7","domainName":"github"},"branch":"master","displayName":"rocketninja7/ip[master]","outputFolderName":"rocketninja7_ip_master"},{"location":{"location":"https://github.com/marquestye/ip.git","repoName":"ip","organization":"marquestye","domainName":"github"},"branch":"master","displayName":"marquestye/ip[master]","outputFolderName":"marquestye_ip_master"},{"location":{"location":"https://github.com/ruiyangzh/ip.git","repoName":"ip","organization":"ruiyangzh","domainName":"github"},"branch":"master","displayName":"ruiyangzh/ip[master]","outputFolderName":"ruiyangzh_ip_master"},{"location":{"location":"https://github.com/derekjxtan/ip.git","repoName":"ip","organization":"derekjxtan","domainName":"github"},"branch":"master","displayName":"derekjxtan/ip[master]","outputFolderName":"derekjxtan_ip_master"},{"location":{"location":"https://github.com/mounilsankar/ip.git","repoName":"ip","organization":"mounilsankar","domainName":"github"},"branch":"master","displayName":"mounilsankar/ip[master]","outputFolderName":"mounilsankar_ip_master"},{"location":{"location":"https://github.com/wj331/ip.git","repoName":"ip","organization":"wj331","domainName":"github"},"branch":"master","displayName":"wj331/ip[master]","outputFolderName":"wj331_ip_master"},{"location":{"location":"https://github.com/JasonLCY-Temp/ip.git","repoName":"ip","organization":"JasonLCY-Temp","domainName":"github"},"branch":"master","displayName":"JasonLCY-Temp/ip[master]","outputFolderName":"JasonLCY-Temp_ip_master"},{"location":{"location":"https://github.com/lawruixi/ip.git","repoName":"ip","organization":"lawruixi","domainName":"github"},"branch":"master","displayName":"lawruixi/ip[master]","outputFolderName":"lawruixi_ip_master"},{"location":{"location":"https://github.com/wxwern/ip.git","repoName":"ip","organization":"wxwern","domainName":"github"},"branch":"master","displayName":"wxwern/ip[master]","outputFolderName":"wxwern_ip_master"},{"location":{"location":"https://github.com/zekone/ip.git","repoName":"ip","organization":"zekone","domainName":"github"},"branch":"master","displayName":"zekone/ip[master]","outputFolderName":"zekone_ip_master"},{"location":{"location":"https://github.com/wamps-jp/ip.git","repoName":"ip","organization":"wamps-jp","domainName":"github"},"branch":"master","displayName":"wamps-jp/ip[master]","outputFolderName":"wamps-jp_ip_master"},{"location":{"location":"https://github.com/saltedfishxx/ip.git","repoName":"ip","organization":"saltedfishxx","domainName":"github"},"branch":"master","displayName":"saltedfishxx/ip[master]","outputFolderName":"saltedfishxx_ip_master"},{"location":{"location":"https://github.com/winson8222/ip.git","repoName":"ip","organization":"winson8222","domainName":"github"},"branch":"master","displayName":"winson8222/ip[master]","outputFolderName":"winson8222_ip_master"},{"location":{"location":"https://github.com/brandon-nam/ip.git","repoName":"ip","organization":"brandon-nam","domainName":"github"},"branch":"master","displayName":"brandon-nam/ip[master]","outputFolderName":"brandon-nam_ip_master"},{"location":{"location":"https://github.com/p-xp/ip.git","repoName":"ip","organization":"p-xp","domainName":"github"},"branch":"master","displayName":"p-xp/ip[master]","outputFolderName":"p-xp_ip_master"},{"location":{"location":"https://github.com/WeeMingQing/ip.git","repoName":"ip","organization":"WeeMingQing","domainName":"github"},"branch":"master","displayName":"WeeMingQing/ip[master]","outputFolderName":"WeeMingQing_ip_master"},{"location":{"location":"https://github.com/ScarletBlanks/ip.git","repoName":"ip","organization":"ScarletBlanks","domainName":"github"},"branch":"master","displayName":"ScarletBlanks/ip[master]","outputFolderName":"ScarletBlanks_ip_master"},{"location":{"location":"https://github.com/seraphimstreets/ip.git","repoName":"ip","organization":"seraphimstreets","domainName":"github"},"branch":"master","displayName":"seraphimstreets/ip[master]","outputFolderName":"seraphimstreets_ip_master"},{"location":{"location":"https://github.com/devanshubisht/ip.git","repoName":"ip","organization":"devanshubisht","domainName":"github"},"branch":"master","displayName":"devanshubisht/ip[master]","outputFolderName":"devanshubisht_ip_master"},{"location":{"location":"https://github.com/Zjinnnn/ip.git","repoName":"ip","organization":"Zjinnnn","domainName":"github"},"branch":"master","displayName":"Zjinnnn/ip[master]","outputFolderName":"Zjinnnn_ip_master"},{"location":{"location":"https://github.com/brendanneojw/ip.git","repoName":"ip","organization":"brendanneojw","domainName":"github"},"branch":"master","displayName":"brendanneojw/ip[master]","outputFolderName":"brendanneojw_ip_master"},{"location":{"location":"https://github.com/aexolate/ip.git","repoName":"ip","organization":"aexolate","domainName":"github"},"branch":"master","displayName":"aexolate/ip[master]","outputFolderName":"aexolate_ip_master"},{"location":{"location":"https://github.com/techjay-c/ip.git","repoName":"ip","organization":"techjay-c","domainName":"github"},"branch":"master","displayName":"techjay-c/ip[master]","outputFolderName":"techjay-c_ip_master"},{"location":{"location":"https://github.com/SynapseProgramming/ip.git","repoName":"ip","organization":"SynapseProgramming","domainName":"github"},"branch":"master","displayName":"SynapseProgramming/ip[master]","outputFolderName":"SynapseProgramming_ip_master"},{"location":{"location":"https://github.com/TyrusLye/ip.git","repoName":"ip","organization":"TyrusLye","domainName":"github"},"branch":"master","displayName":"TyrusLye/ip[master]","outputFolderName":"TyrusLye_ip_master"},{"location":{"location":"https://github.com/RB9823/ip.git","repoName":"ip","organization":"RB9823","domainName":"github"},"branch":"master","displayName":"RB9823/ip[master]","outputFolderName":"RB9823_ip_master"},{"location":{"location":"https://github.com/jean-cq/ip.git","repoName":"ip","organization":"jean-cq","domainName":"github"},"branch":"master","displayName":"jean-cq/ip[master]","outputFolderName":"jean-cq_ip_master"},{"location":{"location":"https://github.com/Bearypop/ip.git","repoName":"ip","organization":"Bearypop","domainName":"github"},"branch":"master","displayName":"Bearypop/ip[master]","outputFolderName":"Bearypop_ip_master"},{"location":{"location":"https://github.com/andytoh1/ip.git","repoName":"ip","organization":"andytoh1","domainName":"github"},"branch":"master","displayName":"andytoh1/ip[master]","outputFolderName":"andytoh1_ip_master"},{"location":{"location":"https://github.com/siqirua/ip.git","repoName":"ip","organization":"siqirua","domainName":"github"},"branch":"master","displayName":"siqirua/ip[master]","outputFolderName":"siqirua_ip_master"},{"location":{"location":"https://github.com/amosting/ip.git","repoName":"ip","organization":"amosting","domainName":"github"},"branch":"master","displayName":"amosting/ip[master]","outputFolderName":"amosting_ip_master"},{"location":{"location":"https://github.com/JizhuoChen/ip.git","repoName":"ip","organization":"JizhuoChen","domainName":"github"},"branch":"master","displayName":"JizhuoChen/ip[master]","outputFolderName":"JizhuoChen_ip_master"},{"location":{"location":"https://github.com/Tang-Moyan/ip.git","repoName":"ip","organization":"Tang-Moyan","domainName":"github"},"branch":"master","displayName":"Tang-Moyan/ip[master]","outputFolderName":"Tang-Moyan_ip_master"},{"location":{"location":"https://github.com/aliciamichellew/ip.git","repoName":"ip","organization":"aliciamichellew","domainName":"github"},"branch":"master","displayName":"aliciamichellew/ip[master]","outputFolderName":"aliciamichellew_ip_master"},{"location":{"location":"https://github.com/KamiliArsyad/ip.git","repoName":"ip","organization":"KamiliArsyad","domainName":"github"},"branch":"master","displayName":"KamiliArsyad/ip[master]","outputFolderName":"KamiliArsyad_ip_master"},{"location":{"location":"https://github.com/dishenggg/ip.git","repoName":"ip","organization":"dishenggg","domainName":"github"},"branch":"master","displayName":"dishenggg/ip[master]","outputFolderName":"dishenggg_ip_master"},{"location":{"location":"https://github.com/Nixx162/ip.git","repoName":"ip","organization":"Nixx162","domainName":"github"},"branch":"master","displayName":"Nixx162/ip[master]","outputFolderName":"Nixx162_ip_master"},{"location":{"location":"https://github.com/Leb14/ip.git","repoName":"ip","organization":"Leb14","domainName":"github"},"branch":"master","displayName":"Leb14/ip[master]","outputFolderName":"Leb14_ip_master"},{"location":{"location":"https://github.com/Heran9/ip.git","repoName":"ip","organization":"Heran9","domainName":"github"},"branch":"master","displayName":"Heran9/ip[master]","outputFolderName":"Heran9_ip_master"},{"location":{"location":"https://github.com/FerdiHS/ip.git","repoName":"ip","organization":"FerdiHS","domainName":"github"},"branch":"master","displayName":"FerdiHS/ip[master]","outputFolderName":"FerdiHS_ip_master"},{"location":{"location":"https://github.com/StevenLiudw/ip.git","repoName":"ip","organization":"StevenLiudw","domainName":"github"},"branch":"master","displayName":"StevenLiudw/ip[master]","outputFolderName":"StevenLiudw_ip_master"},{"location":{"location":"https://github.com/InfiBeyond/ip.git","repoName":"ip","organization":"InfiBeyond","domainName":"github"},"branch":"master","displayName":"InfiBeyond/ip[master]","outputFolderName":"InfiBeyond_ip_master"},{"location":{"location":"https://github.com/s0ngyang/ip.git","repoName":"ip","organization":"s0ngyang","domainName":"github"},"branch":"master","displayName":"s0ngyang/ip[master]","outputFolderName":"s0ngyang_ip_master"},{"location":{"location":"https://github.com/ivyy-poison/ip.git","repoName":"ip","organization":"ivyy-poison","domainName":"github"},"branch":"master","displayName":"ivyy-poison/ip[master]","outputFolderName":"ivyy-poison_ip_master"},{"location":{"location":"https://github.com/yytan25/ip.git","repoName":"ip","organization":"yytan25","domainName":"github"},"branch":"master","displayName":"yytan25/ip[master]","outputFolderName":"yytan25_ip_master"},{"location":{"location":"https://github.com/tjch-o/ip.git","repoName":"ip","organization":"tjch-o","domainName":"github"},"branch":"master","displayName":"tjch-o/ip[master]","outputFolderName":"tjch-o_ip_master"},{"location":{"location":"https://github.com/jedkohjk/ip.git","repoName":"ip","organization":"jedkohjk","domainName":"github"},"branch":"master","displayName":"jedkohjk/ip[master]","outputFolderName":"jedkohjk_ip_master"},{"location":{"location":"https://github.com/raynertjx/ip.git","repoName":"ip","organization":"raynertjx","domainName":"github"},"branch":"master","displayName":"raynertjx/ip[master]","outputFolderName":"raynertjx_ip_master"},{"location":{"location":"https://github.com/cmHuang777/ip.git","repoName":"ip","organization":"cmHuang777","domainName":"github"},"branch":"master","displayName":"cmHuang777/ip[master]","outputFolderName":"cmHuang777_ip_master"},{"location":{"location":"https://github.com/wui-hong/ip.git","repoName":"ip","organization":"wui-hong","domainName":"github"},"branch":"master","displayName":"wui-hong/ip[master]","outputFolderName":"wui-hong_ip_master"},{"location":{"location":"https://github.com/PohSayKeong/ip.git","repoName":"ip","organization":"PohSayKeong","domainName":"github"},"branch":"master","displayName":"PohSayKeong/ip[master]","outputFolderName":"PohSayKeong_ip_master"},{"location":{"location":"https://github.com/lsyurea/ip.git","repoName":"ip","organization":"lsyurea","domainName":"github"},"branch":"master","displayName":"lsyurea/ip[master]","outputFolderName":"lsyurea_ip_master"},{"location":{"location":"https://github.com/ong-wei-hong/ip.git","repoName":"ip","organization":"ong-wei-hong","domainName":"github"},"branch":"master","displayName":"ong-wei-hong/ip[master]","outputFolderName":"ong-wei-hong_ip_master"},{"location":{"location":"https://github.com/asdfghjkxd/ip.git","repoName":"ip","organization":"asdfghjkxd","domainName":"github"},"branch":"master","displayName":"asdfghjkxd/ip[master]","outputFolderName":"asdfghjkxd_ip_master"},{"location":{"location":"https://github.com/GSgiansen/ip.git","repoName":"ip","organization":"GSgiansen","domainName":"github"},"branch":"master","displayName":"GSgiansen/ip[master]","outputFolderName":"GSgiansen_ip_master"},{"location":{"location":"https://github.com/syamfarh/ip.git","repoName":"ip","organization":"syamfarh","domainName":"github"},"branch":"master","displayName":"syamfarh/ip[master]","outputFolderName":"syamfarh_ip_master"},{"location":{"location":"https://github.com/PetrichorPrecipice/ip.git","repoName":"ip","organization":"PetrichorPrecipice","domainName":"github"},"branch":"master","displayName":"PetrichorPrecipice/ip[master]","outputFolderName":"PetrichorPrecipice_ip_master"},{"location":{"location":"https://github.com/ngeeyonglim/ip.git","repoName":"ip","organization":"ngeeyonglim","domainName":"github"},"branch":"master","displayName":"ngeeyonglim/ip[master]","outputFolderName":"ngeeyonglim_ip_master"},{"location":{"location":"https://github.com/ivanleekk/ip.git","repoName":"ip","organization":"ivanleekk","domainName":"github"},"branch":"master","displayName":"ivanleekk/ip[master]","outputFolderName":"ivanleekk_ip_master"},{"location":{"location":"https://github.com/ryanozx/ip.git","repoName":"ip","organization":"ryanozx","domainName":"github"},"branch":"master","displayName":"ryanozx/ip[master]","outputFolderName":"ryanozx_ip_master"},{"location":{"location":"https://github.com/Jweewee/ip.git","repoName":"ip","organization":"Jweewee","domainName":"github"},"branch":"master","displayName":"Jweewee/ip[master]","outputFolderName":"Jweewee_ip_master"},{"location":{"location":"https://github.com/supermii2/ip.git","repoName":"ip","organization":"supermii2","domainName":"github"},"branch":"master","displayName":"supermii2/ip[master]","outputFolderName":"supermii2_ip_master"},{"location":{"location":"https://github.com/bkjwjason/ip.git","repoName":"ip","organization":"bkjwjason","domainName":"github"},"branch":"master","displayName":"bkjwjason/ip[master]","outputFolderName":"bkjwjason_ip_master"},{"location":{"location":"https://github.com/Sasmik23/ip.git","repoName":"ip","organization":"Sasmik23","domainName":"github"},"branch":"master","displayName":"Sasmik23/ip[master]","outputFolderName":"Sasmik23_ip_master"},{"location":{"location":"https://github.com/nathanielcalimag/ip.git","repoName":"ip","organization":"nathanielcalimag","domainName":"github"},"branch":"master","displayName":"nathanielcalimag/ip[master]","outputFolderName":"nathanielcalimag_ip_master"},{"location":{"location":"https://github.com/AlagappanRa/ip.git","repoName":"ip","organization":"AlagappanRa","domainName":"github"},"branch":"master","displayName":"AlagappanRa/ip[master]","outputFolderName":"AlagappanRa_ip_master"},{"location":{"location":"https://github.com/McNaBry/ip.git","repoName":"ip","organization":"McNaBry","domainName":"github"},"branch":"master","displayName":"McNaBry/ip[master]","outputFolderName":"McNaBry_ip_master"},{"location":{"location":"https://github.com/phiphi-tan/ip.git","repoName":"ip","organization":"phiphi-tan","domainName":"github"},"branch":"master","displayName":"phiphi-tan/ip[master]","outputFolderName":"phiphi-tan_ip_master"},{"location":{"location":"https://github.com/LicongHuang/ip.git","repoName":"ip","organization":"LicongHuang","domainName":"github"},"branch":"master","displayName":"LicongHuang/ip[master]","outputFolderName":"LicongHuang_ip_master"},{"location":{"location":"https://github.com/tanshiyu1999/ip.git","repoName":"ip","organization":"tanshiyu1999","domainName":"github"},"branch":"master","displayName":"tanshiyu1999/ip[master]","outputFolderName":"tanshiyu1999_ip_master"},{"location":{"location":"https://github.com/raydenlim/ip.git","repoName":"ip","organization":"raydenlim","domainName":"github"},"branch":"master","displayName":"raydenlim/ip[master]","outputFolderName":"raydenlim_ip_master"},{"location":{"location":"https://github.com/jianyangg/ip.git","repoName":"ip","organization":"jianyangg","domainName":"github"},"branch":"master","displayName":"jianyangg/ip[master]","outputFolderName":"jianyangg_ip_master"},{"location":{"location":"https://github.com/rionshocker/ip.git","repoName":"ip","organization":"rionshocker","domainName":"github"},"branch":"master","displayName":"rionshocker/ip[master]","outputFolderName":"rionshocker_ip_master"},{"location":{"location":"https://github.com/conradsoon/ip.git","repoName":"ip","organization":"conradsoon","domainName":"github"},"branch":"master","displayName":"conradsoon/ip[master]","outputFolderName":"conradsoon_ip_master"},{"location":{"location":"https://github.com/Jonyxzx/ip.git","repoName":"ip","organization":"Jonyxzx","domainName":"github"},"branch":"master","displayName":"Jonyxzx/ip[master]","outputFolderName":"Jonyxzx_ip_master"},{"location":{"location":"https://github.com/euchangxian/ip.git","repoName":"ip","organization":"euchangxian","domainName":"github"},"branch":"master","displayName":"euchangxian/ip[master]","outputFolderName":"euchangxian_ip_master"},{"location":{"location":"https://github.com/teoks0199/ip.git","repoName":"ip","organization":"teoks0199","domainName":"github"},"branch":"master","displayName":"teoks0199/ip[master]","outputFolderName":"teoks0199_ip_master"},{"location":{"location":"https://github.com/HollaG/ip.git","repoName":"ip","organization":"HollaG","domainName":"github"},"branch":"master","displayName":"HollaG/ip[master]","outputFolderName":"HollaG_ip_master"},{"location":{"location":"https://github.com/leezhengjing/ip.git","repoName":"ip","organization":"leezhengjing","domainName":"github"},"branch":"master","displayName":"leezhengjing/ip[master]","outputFolderName":"leezhengjing_ip_master"},{"location":{"location":"https://github.com/timleow/ip.git","repoName":"ip","organization":"timleow","domainName":"github"},"branch":"master","displayName":"timleow/ip[master]","outputFolderName":"timleow_ip_master"},{"location":{"location":"https://github.com/jacksonyuan256/ip.git","repoName":"ip","organization":"jacksonyuan256","domainName":"github"},"branch":"master","displayName":"jacksonyuan256/ip[master]","outputFolderName":"jacksonyuan256_ip_master"},{"location":{"location":"https://github.com/victorlaiyeeteng/ip.git","repoName":"ip","organization":"victorlaiyeeteng","domainName":"github"},"branch":"master","displayName":"victorlaiyeeteng/ip[master]","outputFolderName":"victorlaiyeeteng_ip_master"},{"location":{"location":"https://github.com/prawnzyy/ip.git","repoName":"ip","organization":"prawnzyy","domainName":"github"},"branch":"master","displayName":"prawnzyy/ip[master]","outputFolderName":"prawnzyy_ip_master"},{"location":{"location":"https://github.com/ryanongwx/ip.git","repoName":"ip","organization":"ryanongwx","domainName":"github"},"branch":"master","displayName":"ryanongwx/ip[master]","outputFolderName":"ryanongwx_ip_master"},{"location":{"location":"https://github.com/tohpinren/ip.git","repoName":"ip","organization":"tohpinren","domainName":"github"},"branch":"master","displayName":"tohpinren/ip[master]","outputFolderName":"tohpinren_ip_master"},{"location":{"location":"https://github.com/DeltonCheng/ip.git","repoName":"ip","organization":"DeltonCheng","domainName":"github"},"branch":"master","displayName":"DeltonCheng/ip[master]","outputFolderName":"DeltonCheng_ip_master"},{"location":{"location":"https://github.com/leontan2/ip.git","repoName":"ip","organization":"leontan2","domainName":"github"},"branch":"master","displayName":"leontan2/ip[master]","outputFolderName":"leontan2_ip_master"},{"location":{"location":"https://github.com/alvinlim277/ip.git","repoName":"ip","organization":"alvinlim277","domainName":"github"},"branch":"master","displayName":"alvinlim277/ip[master]","outputFolderName":"alvinlim277_ip_master"},{"location":{"location":"https://github.com/lshaoqin/ip.git","repoName":"ip","organization":"lshaoqin","domainName":"github"},"branch":"master","displayName":"lshaoqin/ip[master]","outputFolderName":"lshaoqin_ip_master"},{"location":{"location":"https://github.com/ChongWeiJie29/ip.git","repoName":"ip","organization":"ChongWeiJie29","domainName":"github"},"branch":"master","displayName":"ChongWeiJie29/ip[master]","outputFolderName":"ChongWeiJie29_ip_master"},{"location":{"location":"https://github.com/zhonghan721/ip.git","repoName":"ip","organization":"zhonghan721","domainName":"github"},"branch":"master","displayName":"zhonghan721/ip[master]","outputFolderName":"zhonghan721_ip_master"},{"location":{"location":"https://github.com/teozhengyang/ip.git","repoName":"ip","organization":"teozhengyang","domainName":"github"},"branch":"master","displayName":"teozhengyang/ip[master]","outputFolderName":"teozhengyang_ip_master"},{"location":{"location":"https://github.com/garylow2001/ip.git","repoName":"ip","organization":"garylow2001","domainName":"github"},"branch":"master","displayName":"garylow2001/ip[master]","outputFolderName":"garylow2001_ip_master"},{"location":{"location":"https://github.com/Cleon2/ip.git","repoName":"ip","organization":"Cleon2","domainName":"github"},"branch":"master","displayName":"Cleon2/ip[master]","outputFolderName":"Cleon2_ip_master"},{"location":{"location":"https://github.com/limzhenwy/ip.git","repoName":"ip","organization":"limzhenwy","domainName":"github"},"branch":"master","displayName":"limzhenwy/ip[master]","outputFolderName":"limzhenwy_ip_master"},{"location":{"location":"https://github.com/ItsTYtan/ip.git","repoName":"ip","organization":"ItsTYtan","domainName":"github"},"branch":"master","displayName":"ItsTYtan/ip[master]","outputFolderName":"ItsTYtan_ip_master"},{"location":{"location":"https://github.com/owenyeo/ip.git","repoName":"ip","organization":"owenyeo","domainName":"github"},"branch":"master","displayName":"owenyeo/ip[master]","outputFolderName":"owenyeo_ip_master"},{"location":{"location":"https://github.com/jonasongg/ip.git","repoName":"ip","organization":"jonasongg","domainName":"github"},"branch":"master","displayName":"jonasongg/ip[master]","outputFolderName":"jonasongg_ip_master"},{"location":{"location":"https://github.com/Ruizhi2001/ip.git","repoName":"ip","organization":"Ruizhi2001","domainName":"github"},"branch":"master","displayName":"Ruizhi2001/ip[master]","outputFolderName":"Ruizhi2001_ip_master"},{"location":{"location":"https://github.com/Dioclei/ip.git","repoName":"ip","organization":"Dioclei","domainName":"github"},"branch":"master","displayName":"Dioclei/ip[master]","outputFolderName":"Dioclei_ip_master"},{"location":{"location":"https://github.com/bobscodedump/ip.git","repoName":"ip","organization":"bobscodedump","domainName":"github"},"branch":"master","displayName":"bobscodedump/ip[master]","outputFolderName":"bobscodedump_ip_master"},{"location":{"location":"https://github.com/andrefoo/ip.git","repoName":"ip","organization":"andrefoo","domainName":"github"},"branch":"master","displayName":"andrefoo/ip[master]","outputFolderName":"andrefoo_ip_master"},{"location":{"location":"https://github.com/Bombbird2001/ip.git","repoName":"ip","organization":"Bombbird2001","domainName":"github"},"branch":"master","displayName":"Bombbird2001/ip[master]","outputFolderName":"Bombbird2001_ip_master"},{"location":{"location":"https://github.com/chewjh1234/ip.git","repoName":"ip","organization":"chewjh1234","domainName":"github"},"branch":"master","displayName":"chewjh1234/ip[master]","outputFolderName":"chewjh1234_ip_master"},{"location":{"location":"https://github.com/dloh2236/ip.git","repoName":"ip","organization":"dloh2236","domainName":"github"},"branch":"master","displayName":"dloh2236/ip[master]","outputFolderName":"dloh2236_ip_master"},{"location":{"location":"https://github.com/chew01/ip.git","repoName":"ip","organization":"chew01","domainName":"github"},"branch":"master","displayName":"chew01/ip[master]","outputFolderName":"chew01_ip_master"},{"location":{"location":"https://github.com/trgao/ip.git","repoName":"ip","organization":"trgao","domainName":"github"},"branch":"master","displayName":"trgao/ip[master]","outputFolderName":"trgao_ip_master"},{"location":{"location":"https://github.com/richiehx/ip.git","repoName":"ip","organization":"richiehx","domainName":"github"},"branch":"master","displayName":"richiehx/ip[master]","outputFolderName":"richiehx_ip_master"},{"location":{"location":"https://github.com/LoMaply/ip.git","repoName":"ip","organization":"LoMaply","domainName":"github"},"branch":"master","displayName":"LoMaply/ip[master]","outputFolderName":"LoMaply_ip_master"},{"location":{"location":"https://github.com/Originalidk/ip.git","repoName":"ip","organization":"Originalidk","domainName":"github"},"branch":"master","displayName":"Originalidk/ip[master]","outputFolderName":"Originalidk_ip_master"},{"location":{"location":"https://github.com/kiatkat/ip.git","repoName":"ip","organization":"kiatkat","domainName":"github"},"branch":"master","displayName":"kiatkat/ip[master]","outputFolderName":"kiatkat_ip_master"},{"location":{"location":"https://github.com/juliusgambe/ip.git","repoName":"ip","organization":"juliusgambe","domainName":"github"},"branch":"master","displayName":"juliusgambe/ip[master]","outputFolderName":"juliusgambe_ip_master"},{"location":{"location":"https://github.com/jiakai-17/ip.git","repoName":"ip","organization":"jiakai-17","domainName":"github"},"branch":"master","displayName":"jiakai-17/ip[master]","outputFolderName":"jiakai-17_ip_master"},{"location":{"location":"https://github.com/nikele2001/ip.git","repoName":"ip","organization":"nikele2001","domainName":"github"},"branch":"master","displayName":"nikele2001/ip[master]","outputFolderName":"nikele2001_ip_master"},{"location":{"location":"https://github.com/jylow/ip.git","repoName":"ip","organization":"jylow","domainName":"github"},"branch":"master","displayName":"jylow/ip[master]","outputFolderName":"jylow_ip_master"},{"location":{"location":"https://github.com/jx124/ip.git","repoName":"ip","organization":"jx124","domainName":"github"},"branch":"master","displayName":"jx124/ip[master]","outputFolderName":"jx124_ip_master"},{"location":{"location":"https://github.com/Kb-Tay/ip.git","repoName":"ip","organization":"Kb-Tay","domainName":"github"},"branch":"master","displayName":"Kb-Tay/ip[master]","outputFolderName":"Kb-Tay_ip_master"},{"location":{"location":"https://github.com/jinyuan0425/ip.git","repoName":"ip","organization":"jinyuan0425","domainName":"github"},"branch":"master","displayName":"jinyuan0425/ip[master]","outputFolderName":"jinyuan0425_ip_master"},{"location":{"location":"https://github.com/darrentfy/ip.git","repoName":"ip","organization":"darrentfy","domainName":"github"},"branch":"master","displayName":"darrentfy/ip[master]","outputFolderName":"darrentfy_ip_master"},{"location":{"location":"https://github.com/HEEaZ/ip.git","repoName":"ip","organization":"HEEaZ","domainName":"github"},"branch":"master","displayName":"HEEaZ/ip[master]","outputFolderName":"HEEaZ_ip_master"},{"location":{"location":"https://github.com/ji-just-ji/ip.git","repoName":"ip","organization":"ji-just-ji","domainName":"github"},"branch":"master","displayName":"ji-just-ji/ip[master]","outputFolderName":"ji-just-ji_ip_master"},{"location":{"location":"https://github.com/simbayippy/ip.git","repoName":"ip","organization":"simbayippy","domainName":"github"},"branch":"master","displayName":"simbayippy/ip[master]","outputFolderName":"simbayippy_ip_master"},{"location":{"location":"https://github.com/teozern1/ip.git","repoName":"ip","organization":"teozern1","domainName":"github"},"branch":"master","displayName":"teozern1/ip[master]","outputFolderName":"teozern1_ip_master"},{"location":{"location":"https://github.com/brein62/ip.git","repoName":"ip","organization":"brein62","domainName":"github"},"branch":"master","displayName":"brein62/ip[master]","outputFolderName":"brein62_ip_master"},{"location":{"location":"https://github.com/awhb/ip.git","repoName":"ip","organization":"awhb","domainName":"github"},"branch":"master","displayName":"awhb/ip[master]","outputFolderName":"awhb_ip_master"},{"location":{"location":"https://github.com/Mahidharah/ip.git","repoName":"ip","organization":"Mahidharah","domainName":"github"},"branch":"master","displayName":"Mahidharah/ip[master]","outputFolderName":"Mahidharah_ip_master"},{"location":{"location":"https://github.com/timetraveller-123/ip.git","repoName":"ip","organization":"timetraveller-123","domainName":"github"},"branch":"master","displayName":"timetraveller-123/ip[master]","outputFolderName":"timetraveller-123_ip_master"},{"location":{"location":"https://github.com/ElginTZM/ip.git","repoName":"ip","organization":"ElginTZM","domainName":"github"},"branch":"master","displayName":"ElginTZM/ip[master]","outputFolderName":"ElginTZM_ip_master"},{"location":{"location":"https://github.com/ryamgoh/ip.git","repoName":"ip","organization":"ryamgoh","domainName":"github"},"branch":"master","displayName":"ryamgoh/ip[master]","outputFolderName":"ryamgoh_ip_master"},{"location":{"location":"https://github.com/Blizzeracz/ip.git","repoName":"ip","organization":"Blizzeracz","domainName":"github"},"branch":"master","displayName":"Blizzeracz/ip[master]","outputFolderName":"Blizzeracz_ip_master"},{"location":{"location":"https://github.com/kiwibang/ip.git","repoName":"ip","organization":"kiwibang","domainName":"github"},"branch":"master","displayName":"kiwibang/ip[master]","outputFolderName":"kiwibang_ip_master"},{"location":{"location":"https://github.com/redtailedfox/ip.git","repoName":"ip","organization":"redtailedfox","domainName":"github"},"branch":"master","displayName":"redtailedfox/ip[master]","outputFolderName":"redtailedfox_ip_master"},{"location":{"location":"https://github.com/lamchenghou/ip.git","repoName":"ip","organization":"lamchenghou","domainName":"github"},"branch":"master","displayName":"lamchenghou/ip[master]","outputFolderName":"lamchenghou_ip_master"},{"location":{"location":"https://github.com/gongg21/ip.git","repoName":"ip","organization":"gongg21","domainName":"github"},"branch":"master","displayName":"gongg21/ip[master]","outputFolderName":"gongg21_ip_master"},{"location":{"location":"https://github.com/CJ-Lee01/ip.git","repoName":"ip","organization":"CJ-Lee01","domainName":"github"},"branch":"master","displayName":"CJ-Lee01/ip[master]","outputFolderName":"CJ-Lee01_ip_master"},{"location":{"location":"https://github.com/Sheeepen/ip.git","repoName":"ip","organization":"Sheeepen","domainName":"github"},"branch":"master","displayName":"Sheeepen/ip[master]","outputFolderName":"Sheeepen_ip_master"},{"location":{"location":"https://github.com/AaronJT1/ip.git","repoName":"ip","organization":"AaronJT1","domainName":"github"},"branch":"master","displayName":"AaronJT1/ip[master]","outputFolderName":"AaronJT1_ip_master"},{"location":{"location":"https://github.com/Respirayson/ip.git","repoName":"ip","organization":"Respirayson","domainName":"github"},"branch":"master","displayName":"Respirayson/ip[master]","outputFolderName":"Respirayson_ip_master"},{"location":{"location":"https://github.com/dickongwd/ip.git","repoName":"ip","organization":"dickongwd","domainName":"github"},"branch":"master","displayName":"dickongwd/ip[master]","outputFolderName":"dickongwd_ip_master"},{"location":{"location":"https://github.com/nicholascher/ip.git","repoName":"ip","organization":"nicholascher","domainName":"github"},"branch":"master","displayName":"nicholascher/ip[master]","outputFolderName":"nicholascher_ip_master"},{"location":{"location":"https://github.com/et-irl/ip.git","repoName":"ip","organization":"et-irl","domainName":"github"},"branch":"master","displayName":"et-irl/ip[master]","outputFolderName":"et-irl_ip_master"},{"location":{"location":"https://github.com/aslam341/ip.git","repoName":"ip","organization":"aslam341","domainName":"github"},"branch":"master","displayName":"aslam341/ip[master]","outputFolderName":"aslam341_ip_master"},{"location":{"location":"https://github.com/seantehds/ip.git","repoName":"ip","organization":"seantehds","domainName":"github"},"branch":"master","displayName":"seantehds/ip[master]","outputFolderName":"seantehds_ip_master"},{"location":{"location":"https://github.com/jianrong7/ip.git","repoName":"ip","organization":"jianrong7","domainName":"github"},"branch":"master","displayName":"jianrong7/ip[master]","outputFolderName":"jianrong7_ip_master"},{"location":{"location":"https://github.com/TeeRenJing/ip.git","repoName":"ip","organization":"TeeRenJing","domainName":"github"},"branch":"master","displayName":"TeeRenJing/ip[master]","outputFolderName":"TeeRenJing_ip_master"},{"location":{"location":"https://github.com/RoeReRe/ip.git","repoName":"ip","organization":"RoeReRe","domainName":"github"},"branch":"master","displayName":"RoeReRe/ip[master]","outputFolderName":"RoeReRe_ip_master"},{"location":{"location":"https://github.com/zsh-eng/ip.git","repoName":"ip","organization":"zsh-eng","domainName":"github"},"branch":"master","displayName":"zsh-eng/ip[master]","outputFolderName":"zsh-eng_ip_master"},{"location":{"location":"https://github.com/seanpzk/ip.git","repoName":"ip","organization":"seanpzk","domainName":"github"},"branch":"master","displayName":"seanpzk/ip[master]","outputFolderName":"seanpzk_ip_master"},{"location":{"location":"https://github.com/quzhetao01/ip.git","repoName":"ip","organization":"quzhetao01","domainName":"github"},"branch":"master","displayName":"quzhetao01/ip[master]","outputFolderName":"quzhetao01_ip_master"},{"location":{"location":"https://github.com/joel-foo/ip.git","repoName":"ip","organization":"joel-foo","domainName":"github"},"branch":"master","displayName":"joel-foo/ip[master]","outputFolderName":"joel-foo_ip_master"},{"location":{"location":"https://github.com/markgcera/ip.git","repoName":"ip","organization":"markgcera","domainName":"github"},"branch":"master","displayName":"markgcera/ip[master]","outputFolderName":"markgcera_ip_master"},{"location":{"location":"https://github.com/dylkaw/ip.git","repoName":"ip","organization":"dylkaw","domainName":"github"},"branch":"master","displayName":"dylkaw/ip[master]","outputFolderName":"dylkaw_ip_master"},{"location":{"location":"https://github.com/SelwynAng/ip.git","repoName":"ip","organization":"SelwynAng","domainName":"github"},"branch":"master","displayName":"SelwynAng/ip[master]","outputFolderName":"SelwynAng_ip_master"},{"location":{"location":"https://github.com/jinyang628/ip.git","repoName":"ip","organization":"jinyang628","domainName":"github"},"branch":"master","displayName":"jinyang628/ip[master]","outputFolderName":"jinyang628_ip_master"},{"location":{"location":"https://github.com/matochichap/ip.git","repoName":"ip","organization":"matochichap","domainName":"github"},"branch":"master","displayName":"matochichap/ip[master]","outputFolderName":"matochichap_ip_master"},{"location":{"location":"https://github.com/sk2001git/ip.git","repoName":"ip","organization":"sk2001git","domainName":"github"},"branch":"master","displayName":"sk2001git/ip[master]","outputFolderName":"sk2001git_ip_master"},{"location":{"location":"https://github.com/jason-raiin/ip.git","repoName":"ip","organization":"jason-raiin","domainName":"github"},"branch":"master","displayName":"jason-raiin/ip[master]","outputFolderName":"jason-raiin_ip_master"},{"location":{"location":"https://github.com/Sebtey/ip.git","repoName":"ip","organization":"Sebtey","domainName":"github"},"branch":"master","displayName":"Sebtey/ip[master]","outputFolderName":"Sebtey_ip_master"},{"location":{"location":"https://github.com/Jweng88/ip.git","repoName":"ip","organization":"Jweng88","domainName":"github"},"branch":"master","displayName":"Jweng88/ip[master]","outputFolderName":"Jweng88_ip_master"},{"location":{"location":"https://github.com/billieboy7/ip.git","repoName":"ip","organization":"billieboy7","domainName":"github"},"branch":"master","displayName":"billieboy7/ip[master]","outputFolderName":"billieboy7_ip_master"},{"location":{"location":"https://github.com/ldinghan/ip.git","repoName":"ip","organization":"ldinghan","domainName":"github"},"branch":"master","displayName":"ldinghan/ip[master]","outputFolderName":"ldinghan_ip_master"},{"location":{"location":"https://github.com/anthonytamzil/ip.git","repoName":"ip","organization":"anthonytamzil","domainName":"github"},"branch":"master","displayName":"anthonytamzil/ip[master]","outputFolderName":"anthonytamzil_ip_master"},{"location":{"location":"https://github.com/ryantzr1/ip.git","repoName":"ip","organization":"ryantzr1","domainName":"github"},"branch":"master","displayName":"ryantzr1/ip[master]","outputFolderName":"ryantzr1_ip_master"},{"location":{"location":"https://github.com/shuyangk/ip.git","repoName":"ip","organization":"shuyangk","domainName":"github"},"branch":"master","displayName":"shuyangk/ip[master]","outputFolderName":"shuyangk_ip_master"},{"location":{"location":"https://github.com/seewhyjay/ip.git","repoName":"ip","organization":"seewhyjay","domainName":"github"},"branch":"master","displayName":"seewhyjay/ip[master]","outputFolderName":"seewhyjay_ip_master"},{"location":{"location":"https://github.com/waseemingly/ip.git","repoName":"ip","organization":"waseemingly","domainName":"github"},"branch":"master","displayName":"waseemingly/ip[master]","outputFolderName":"waseemingly_ip_master"},{"location":{"location":"https://github.com/DistractedCat/ip.git","repoName":"ip","organization":"DistractedCat","domainName":"github"},"branch":"master","displayName":"DistractedCat/ip[master]","outputFolderName":"DistractedCat_ip_master"},{"location":{"location":"https://github.com/geraldngjx/ip.git","repoName":"ip","organization":"geraldngjx","domainName":"github"},"branch":"master","displayName":"geraldngjx/ip[master]","outputFolderName":"geraldngjx_ip_master"},{"location":{"location":"https://github.com/tayian/ip.git","repoName":"ip","organization":"tayian","domainName":"github"},"branch":"master","displayName":"tayian/ip[master]","outputFolderName":"tayian_ip_master"},{"location":{"location":"https://github.com/AlfredBeNoel/ip.git","repoName":"ip","organization":"AlfredBeNoel","domainName":"github"},"branch":"master","displayName":"AlfredBeNoel/ip[master]","outputFolderName":"AlfredBeNoel_ip_master"},{"location":{"location":"https://github.com/Chen1x/ip.git","repoName":"ip","organization":"Chen1x","domainName":"github"},"branch":"master","displayName":"Chen1x/ip[master]","outputFolderName":"Chen1x_ip_master"},{"location":{"location":"https://github.com/juzzztinsoong/ip.git","repoName":"ip","organization":"juzzztinsoong","domainName":"github"},"branch":"master","displayName":"juzzztinsoong/ip[master]","outputFolderName":"juzzztinsoong_ip_master"},{"location":{"location":"https://github.com/lambraydon/ip.git","repoName":"ip","organization":"lambraydon","domainName":"github"},"branch":"master","displayName":"lambraydon/ip[master]","outputFolderName":"lambraydon_ip_master"},{"location":{"location":"https://github.com/lilozz2/ip.git","repoName":"ip","organization":"lilozz2","domainName":"github"},"branch":"master","displayName":"lilozz2/ip[master]","outputFolderName":"lilozz2_ip_master"},{"location":{"location":"https://github.com/tyouwei/ip.git","repoName":"ip","organization":"tyouwei","domainName":"github"},"branch":"master","displayName":"tyouwei/ip[master]","outputFolderName":"tyouwei_ip_master"},{"location":{"location":"https://github.com/Kailash201/ip.git","repoName":"ip","organization":"Kailash201","domainName":"github"},"branch":"master","displayName":"Kailash201/ip[master]","outputFolderName":"Kailash201_ip_master"},{"location":{"location":"https://github.com/tjingsheng/ip.git","repoName":"ip","organization":"tjingsheng","domainName":"github"},"branch":"master","displayName":"tjingsheng/ip[master]","outputFolderName":"tjingsheng_ip_master"},{"location":{"location":"https://github.com/pangyyen/ip.git","repoName":"ip","organization":"pangyyen","domainName":"github"},"branch":"master","displayName":"pangyyen/ip[master]","outputFolderName":"pangyyen_ip_master"},{"location":{"location":"https://github.com/Khaleelur-Rahman/ip.git","repoName":"ip","organization":"Khaleelur-Rahman","domainName":"github"},"branch":"master","displayName":"Khaleelur-Rahman/ip[master]","outputFolderName":"Khaleelur-Rahman_ip_master"},{"location":{"location":"https://github.com/erohsikivar/ip.git","repoName":"ip","organization":"erohsikivar","domainName":"github"},"branch":"master","displayName":"erohsikivar/ip[master]","outputFolderName":"erohsikivar_ip_master"},{"location":{"location":"https://github.com/shishirbychapur/ip.git","repoName":"ip","organization":"shishirbychapur","domainName":"github"},"branch":"master","displayName":"shishirbychapur/ip[master]","outputFolderName":"shishirbychapur_ip_master"},{"location":{"location":"https://github.com/Badatprogrammiing/ip.git","repoName":"ip","organization":"Badatprogrammiing","domainName":"github"},"branch":"master","displayName":"Badatprogrammiing/ip[master]","outputFolderName":"Badatprogrammiing_ip_master"},{"location":{"location":"https://github.com/ravern/ip.git","repoName":"ip","organization":"ravern","domainName":"github"},"branch":"master","displayName":"ravern/ip[master]","outputFolderName":"ravern_ip_master"},{"location":{"location":"https://github.com/B-enguin/ip.git","repoName":"ip","organization":"B-enguin","domainName":"github"},"branch":"master","displayName":"B-enguin/ip[master]","outputFolderName":"B-enguin_ip_master"},{"location":{"location":"https://github.com/AlyssaPng/ip.git","repoName":"ip","organization":"AlyssaPng","domainName":"github"},"branch":"master","displayName":"AlyssaPng/ip[master]","outputFolderName":"AlyssaPng_ip_master"},{"location":{"location":"https://github.com/flexibo/ip.git","repoName":"ip","organization":"flexibo","domainName":"github"},"branch":"master","displayName":"flexibo/ip[master]","outputFolderName":"flexibo_ip_master"},{"location":{"location":"https://github.com/lordidiot/ip.git","repoName":"ip","organization":"lordidiot","domainName":"github"},"branch":"master","displayName":"lordidiot/ip[master]","outputFolderName":"lordidiot_ip_master"},{"location":{"location":"https://github.com/vansh284/ip.git","repoName":"ip","organization":"vansh284","domainName":"github"},"branch":"master","displayName":"vansh284/ip[master]","outputFolderName":"vansh284_ip_master"},{"location":{"location":"https://github.com/samuelim01/ip.git","repoName":"ip","organization":"samuelim01","domainName":"github"},"branch":"master","displayName":"samuelim01/ip[master]","outputFolderName":"samuelim01_ip_master"},{"location":{"location":"https://github.com/WZWren/ip.git","repoName":"ip","organization":"WZWren","domainName":"github"},"branch":"master","displayName":"WZWren/ip[master]","outputFolderName":"WZWren_ip_master"},{"location":{"location":"https://github.com/cxo05/ip.git","repoName":"ip","organization":"cxo05","domainName":"github"},"branch":"master","displayName":"cxo05/ip[master]","outputFolderName":"cxo05_ip_master"},{"location":{"location":"https://github.com/sudarshan2401/ip.git","repoName":"ip","organization":"sudarshan2401","domainName":"github"},"branch":"master","displayName":"sudarshan2401/ip[master]","outputFolderName":"sudarshan2401_ip_master"},{"location":{"location":"https://github.com/jingyu987/ip.git","repoName":"ip","organization":"jingyu987","domainName":"github"},"branch":"master","displayName":"jingyu987/ip[master]","outputFolderName":"jingyu987_ip_master"},{"location":{"location":"https://github.com/H1410101/ip.git","repoName":"ip","organization":"H1410101","domainName":"github"},"branch":"master","displayName":"H1410101/ip[master]","outputFolderName":"H1410101_ip_master"},{"location":{"location":"https://github.com/MagnificentCreature/ip.git","repoName":"ip","organization":"MagnificentCreature","domainName":"github"},"branch":"master","displayName":"MagnificentCreature/ip[master]","outputFolderName":"MagnificentCreature_ip_master"},{"location":{"location":"https://github.com/shyanyong/ip.git","repoName":"ip","organization":"shyanyong","domainName":"github"},"branch":"master","displayName":"shyanyong/ip[master]","outputFolderName":"shyanyong_ip_master"},{"location":{"location":"https://github.com/peasantbird/ip.git","repoName":"ip","organization":"peasantbird","domainName":"github"},"branch":"master","displayName":"peasantbird/ip[master]","outputFolderName":"peasantbird_ip_master"},{"location":{"location":"https://github.com/tllshan/ip.git","repoName":"ip","organization":"tllshan","domainName":"github"},"branch":"master","displayName":"tllshan/ip[master]","outputFolderName":"tllshan_ip_master"},{"location":{"location":"https://github.com/sushiyade/ip.git","repoName":"ip","organization":"sushiyade","domainName":"github"},"branch":"master","displayName":"sushiyade/ip[master]","outputFolderName":"sushiyade_ip_master"},{"location":{"location":"https://github.com/iyioon/ip.git","repoName":"ip","organization":"iyioon","domainName":"github"},"branch":"master","displayName":"iyioon/ip[master]","outputFolderName":"iyioon_ip_master"},{"location":{"location":"https://github.com/shashahchk/ip.git","repoName":"ip","organization":"shashahchk","domainName":"github"},"branch":"master","displayName":"shashahchk/ip[master]","outputFolderName":"shashahchk_ip_master"},{"location":{"location":"https://github.com/Chandan8186/ip.git","repoName":"ip","organization":"Chandan8186","domainName":"github"},"branch":"master","displayName":"Chandan8186/ip[master]","outputFolderName":"Chandan8186_ip_master"},{"location":{"location":"https://github.com/wesho1107/ip.git","repoName":"ip","organization":"wesho1107","domainName":"github"},"branch":"master","displayName":"wesho1107/ip[master]","outputFolderName":"wesho1107_ip_master"},{"location":{"location":"https://github.com/tim-pipi/ip.git","repoName":"ip","organization":"tim-pipi","domainName":"github"},"branch":"master","displayName":"tim-pipi/ip[master]","outputFolderName":"tim-pipi_ip_master"},{"location":{"location":"https://github.com/emzm2023/ip.git","repoName":"ip","organization":"emzm2023","domainName":"github"},"branch":"master","displayName":"emzm2023/ip[master]","outputFolderName":"emzm2023_ip_master"},{"location":{"location":"https://github.com/dlathyun/ip.git","repoName":"ip","organization":"dlathyun","domainName":"github"},"branch":"master","displayName":"dlathyun/ip[master]","outputFolderName":"dlathyun_ip_master"},{"location":{"location":"https://github.com/tanboonkhong/ip.git","repoName":"ip","organization":"tanboonkhong","domainName":"github"},"branch":"master","displayName":"tanboonkhong/ip[master]","outputFolderName":"tanboonkhong_ip_master"},{"location":{"location":"https://github.com/joeng03/ip.git","repoName":"ip","organization":"joeng03","domainName":"github"},"branch":"master","displayName":"joeng03/ip[master]","outputFolderName":"joeng03_ip_master"},{"location":{"location":"https://github.com/VN-Hao/ip.git","repoName":"ip","organization":"VN-Hao","domainName":"github"},"branch":"master","displayName":"VN-Hao/ip[master]","outputFolderName":"VN-Hao_ip_master"},{"location":{"location":"https://github.com/NgChunMan/ip.git","repoName":"ip","organization":"NgChunMan","domainName":"github"},"branch":"master","displayName":"NgChunMan/ip[master]","outputFolderName":"NgChunMan_ip_master"},{"location":{"location":"https://github.com/TiwKangXu/ip.git","repoName":"ip","organization":"TiwKangXu","domainName":"github"},"branch":"master","displayName":"TiwKangXu/ip[master]","outputFolderName":"TiwKangXu_ip_master"},{"location":{"location":"https://github.com/josepholim/ip.git","repoName":"ip","organization":"josepholim","domainName":"github"},"branch":"master","displayName":"josepholim/ip[master]","outputFolderName":"josepholim_ip_master"},{"location":{"location":"https://github.com/dinde2004/ip.git","repoName":"ip","organization":"dinde2004","domainName":"github"},"branch":"master","displayName":"dinde2004/ip[master]","outputFolderName":"dinde2004_ip_master"},{"location":{"location":"https://github.com/yucongkoo/ip.git","repoName":"ip","organization":"yucongkoo","domainName":"github"},"branch":"master","displayName":"yucongkoo/ip[master]","outputFolderName":"yucongkoo_ip_master"},{"location":{"location":"https://github.com/TohLiYuan/ip.git","repoName":"ip","organization":"TohLiYuan","domainName":"github"},"branch":"master","displayName":"TohLiYuan/ip[master]","outputFolderName":"TohLiYuan_ip_master"},{"location":{"location":"https://github.com/NereusWB922/ip.git","repoName":"ip","organization":"NereusWB922","domainName":"github"},"branch":"master","displayName":"NereusWB922/ip[master]","outputFolderName":"NereusWB922_ip_master"},{"location":{"location":"https://github.com/ph-nathan/ip.git","repoName":"ip","organization":"ph-nathan","domainName":"github"},"branch":"master","displayName":"ph-nathan/ip[master]","outputFolderName":"ph-nathan_ip_master"},{"location":{"location":"https://github.com/antonTan96/ip.git","repoName":"ip","organization":"antonTan96","domainName":"github"},"branch":"master","displayName":"antonTan96/ip[master]","outputFolderName":"antonTan96_ip_master"},{"location":{"location":"https://github.com/WinstonLeonard/ip.git","repoName":"ip","organization":"WinstonLeonard","domainName":"github"},"branch":"master","displayName":"WinstonLeonard/ip[master]","outputFolderName":"WinstonLeonard_ip_master"},{"location":{"location":"https://github.com/TehOPanas/ip.git","repoName":"ip","organization":"TehOPanas","domainName":"github"},"branch":"master","displayName":"TehOPanas/ip[master]","outputFolderName":"TehOPanas_ip_master"},{"location":{"location":"https://github.com/marioalvaro/ip.git","repoName":"ip","organization":"marioalvaro","domainName":"github"},"branch":"master","displayName":"marioalvaro/ip[master]","outputFolderName":"marioalvaro_ip_master"},{"location":{"location":"https://github.com/LINCHENYU2030S/ip.git","repoName":"ip","organization":"LINCHENYU2030S","domainName":"github"},"branch":"master","displayName":"LINCHENYU2030S/ip[master]","outputFolderName":"LINCHENYU2030S_ip_master"},{"location":{"location":"https://github.com/LamJiuFong/ip.git","repoName":"ip","organization":"LamJiuFong","domainName":"github"},"branch":"master","displayName":"LamJiuFong/ip[master]","outputFolderName":"LamJiuFong_ip_master"},{"location":{"location":"https://github.com/AndrewJanong/ip.git","repoName":"ip","organization":"AndrewJanong","domainName":"github"},"branch":"master","displayName":"AndrewJanong/ip[master]","outputFolderName":"AndrewJanong_ip_master"},{"location":{"location":"https://github.com/songfangyl/ip.git","repoName":"ip","organization":"songfangyl","domainName":"github"},"branch":"master","displayName":"songfangyl/ip[master]","outputFolderName":"songfangyl_ip_master"},{"location":{"location":"https://github.com/AriellaCallista/ip.git","repoName":"ip","organization":"AriellaCallista","domainName":"github"},"branch":"master","displayName":"AriellaCallista/ip[master]","outputFolderName":"AriellaCallista_ip_master"},{"location":{"location":"https://github.com/KamJiaYue/ip.git","repoName":"ip","organization":"KamJiaYue","domainName":"github"},"branch":"master","displayName":"KamJiaYue/ip[master]","outputFolderName":"KamJiaYue_ip_master"},{"location":{"location":"https://github.com/feifeiraindrops/ip.git","repoName":"ip","organization":"feifeiraindrops","domainName":"github"},"branch":"master","displayName":"feifeiraindrops/ip[master]","outputFolderName":"feifeiraindrops_ip_master"},{"location":{"location":"https://github.com/czhiruo/ip.git","repoName":"ip","organization":"czhiruo","domainName":"github"},"branch":"master","displayName":"czhiruo/ip[master]","outputFolderName":"czhiruo_ip_master"},{"location":{"location":"https://github.com/butteredyakiimo/ip.git","repoName":"ip","organization":"butteredyakiimo","domainName":"github"},"branch":"master","displayName":"butteredyakiimo/ip[master]","outputFolderName":"butteredyakiimo_ip_master"},{"location":{"location":"https://github.com/RiyaMehta2211/ip.git","repoName":"ip","organization":"RiyaMehta2211","domainName":"github"},"branch":"master","displayName":"RiyaMehta2211/ip[master]","outputFolderName":"RiyaMehta2211_ip_master"},{"location":{"location":"https://github.com/beatricecst/ip.git","repoName":"ip","organization":"beatricecst","domainName":"github"},"branch":"master","displayName":"beatricecst/ip[master]","outputFolderName":"beatricecst_ip_master"},{"location":{"location":"https://github.com/maypfv/ip.git","repoName":"ip","organization":"maypfv","domainName":"github"},"branch":"master","displayName":"maypfv/ip[master]","outputFolderName":"maypfv_ip_master"},{"location":{"location":"https://github.com/pra-navi/ip.git","repoName":"ip","organization":"pra-navi","domainName":"github"},"branch":"master","displayName":"pra-navi/ip[master]","outputFolderName":"pra-navi_ip_master"},{"location":{"location":"https://github.com/xxiaoweii/ip.git","repoName":"ip","organization":"xxiaoweii","domainName":"github"},"branch":"master","displayName":"xxiaoweii/ip[master]","outputFolderName":"xxiaoweii_ip_master"},{"location":{"location":"https://github.com/qyaner/ip.git","repoName":"ip","organization":"qyaner","domainName":"github"},"branch":"master","displayName":"qyaner/ip[master]","outputFolderName":"qyaner_ip_master"},{"location":{"location":"https://github.com/qz1004/ip.git","repoName":"ip","organization":"qz1004","domainName":"github"},"branch":"master","displayName":"qz1004/ip[master]","outputFolderName":"qz1004_ip_master"},{"location":{"location":"https://github.com/miljyy/ip.git","repoName":"ip","organization":"miljyy","domainName":"github"},"branch":"master","displayName":"miljyy/ip[master]","outputFolderName":"miljyy_ip_master"},{"location":{"location":"https://github.com/yihfei/ip.git","repoName":"ip","organization":"yihfei","domainName":"github"},"branch":"master","displayName":"yihfei/ip[master]","outputFolderName":"yihfei_ip_master"},{"location":{"location":"https://github.com/Gabriel4357/ip.git","repoName":"ip","organization":"Gabriel4357","domainName":"github"},"branch":"master","displayName":"Gabriel4357/ip[master]","outputFolderName":"Gabriel4357_ip_master"},{"location":{"location":"https://github.com/saraozn/ip.git","repoName":"ip","organization":"saraozn","domainName":"github"},"branch":"master","displayName":"saraozn/ip[master]","outputFolderName":"saraozn_ip_master"},{"location":{"location":"https://github.com/JeremyYong128/ip.git","repoName":"ip","organization":"JeremyYong128","domainName":"github"},"branch":"master","displayName":"JeremyYong128/ip[master]","outputFolderName":"JeremyYong128_ip_master"},{"location":{"location":"https://github.com/samuelmui8/ip.git","repoName":"ip","organization":"samuelmui8","domainName":"github"},"branch":"master","displayName":"samuelmui8/ip[master]","outputFolderName":"samuelmui8_ip_master"},{"location":{"location":"https://github.com/elaineshijie/ip.git","repoName":"ip","organization":"elaineshijie","domainName":"github"},"branch":"master","displayName":"elaineshijie/ip[master]","outputFolderName":"elaineshijie_ip_master"},{"location":{"location":"https://github.com/zhengyup/ip.git","repoName":"ip","organization":"zhengyup","domainName":"github"},"branch":"master","displayName":"zhengyup/ip[master]","outputFolderName":"zhengyup_ip_master"},{"location":{"location":"https://github.com/ruishanteo/ip.git","repoName":"ip","organization":"ruishanteo","domainName":"github"},"branch":"master","displayName":"ruishanteo/ip[master]","outputFolderName":"ruishanteo_ip_master"},{"location":{"location":"https://github.com/lynnlow175/ip.git","repoName":"ip","organization":"lynnlow175","domainName":"github"},"branch":"master","displayName":"lynnlow175/ip[master]","outputFolderName":"lynnlow175_ip_master"},{"location":{"location":"https://github.com/kohkaijie/ip.git","repoName":"ip","organization":"kohkaijie","domainName":"github"},"branch":"master","displayName":"kohkaijie/ip[master]","outputFolderName":"kohkaijie_ip_master"},{"location":{"location":"https://github.com/CelestineTan03/ip.git","repoName":"ip","organization":"CelestineTan03","domainName":"github"},"branch":"master","displayName":"CelestineTan03/ip[master]","outputFolderName":"CelestineTan03_ip_master"},{"location":{"location":"https://github.com/PearlynnT/ip.git","repoName":"ip","organization":"PearlynnT","domainName":"github"},"branch":"master","displayName":"PearlynnT/ip[master]","outputFolderName":"PearlynnT_ip_master"},{"location":{"location":"https://github.com/Elijah5399/ip.git","repoName":"ip","organization":"Elijah5399","domainName":"github"},"branch":"master","displayName":"Elijah5399/ip[master]","outputFolderName":"Elijah5399_ip_master"},{"location":{"location":"https://github.com/nicleongyj/ip.git","repoName":"ip","organization":"nicleongyj","domainName":"github"},"branch":"master","displayName":"nicleongyj/ip[master]","outputFolderName":"nicleongyj_ip_master"},{"location":{"location":"https://github.com/AnnabelTing/ip.git","repoName":"ip","organization":"AnnabelTing","domainName":"github"},"branch":"master","displayName":"AnnabelTing/ip[master]","outputFolderName":"AnnabelTing_ip_master"},{"location":{"location":"https://github.com/jrchoo/ip.git","repoName":"ip","organization":"jrchoo","domainName":"github"},"branch":"master","displayName":"jrchoo/ip[master]","outputFolderName":"jrchoo_ip_master"},{"location":{"location":"https://github.com/wujy28/ip.git","repoName":"ip","organization":"wujy28","domainName":"github"},"branch":"master","displayName":"wujy28/ip[master]","outputFolderName":"wujy28_ip_master"},{"location":{"location":"https://github.com/Nauxe/ip.git","repoName":"ip","organization":"Nauxe","domainName":"github"},"branch":"master","displayName":"Nauxe/ip[master]","outputFolderName":"Nauxe_ip_master"},{"location":{"location":"https://github.com/yyyaohhh/ip.git","repoName":"ip","organization":"yyyaohhh","domainName":"github"},"branch":"master","displayName":"yyyaohhh/ip[master]","outputFolderName":"yyyaohhh_ip_master"},{"location":{"location":"https://github.com/xenosf/ip.git","repoName":"ip","organization":"xenosf","domainName":"github"},"branch":"master","displayName":"xenosf/ip[master]","outputFolderName":"xenosf_ip_master"},{"location":{"location":"https://github.com/WinSheng1/ip.git","repoName":"ip","organization":"WinSheng1","domainName":"github"},"branch":"master","displayName":"WinSheng1/ip[master]","outputFolderName":"WinSheng1_ip_master"},{"location":{"location":"https://github.com/nreHieW/ip.git","repoName":"ip","organization":"nreHieW","domainName":"github"},"branch":"master","displayName":"nreHieW/ip[master]","outputFolderName":"nreHieW_ip_master"},{"location":{"location":"https://github.com/peiran18/ip.git","repoName":"ip","organization":"peiran18","domainName":"github"},"branch":"master","displayName":"peiran18/ip[master]","outputFolderName":"peiran18_ip_master"},{"location":{"location":"https://github.com/cheeggered/ip.git","repoName":"ip","organization":"cheeggered","domainName":"github"},"branch":"master","displayName":"cheeggered/ip[master]","outputFolderName":"cheeggered_ip_master"},{"location":{"location":"https://github.com/GohTengFong/ip.git","repoName":"ip","organization":"GohTengFong","domainName":"github"},"branch":"master","displayName":"GohTengFong/ip[master]","outputFolderName":"GohTengFong_ip_master"},{"location":{"location":"https://github.com/jibtaf/ip.git","repoName":"ip","organization":"jibtaf","domainName":"github"},"branch":"master","displayName":"jibtaf/ip[master]","outputFolderName":"jibtaf_ip_master"},{"location":{"location":"https://github.com/bhnuka/ip.git","repoName":"ip","organization":"bhnuka","domainName":"github"},"branch":"master","displayName":"bhnuka/ip[master]","outputFolderName":"bhnuka_ip_master"},{"location":{"location":"https://github.com/laurenlim2112/ip.git","repoName":"ip","organization":"laurenlim2112","domainName":"github"},"branch":"master","displayName":"laurenlim2112/ip[master]","outputFolderName":"laurenlim2112_ip_master"},{"location":{"location":"https://github.com/howenc/ip.git","repoName":"ip","organization":"howenc","domainName":"github"},"branch":"master","displayName":"howenc/ip[master]","outputFolderName":"howenc_ip_master"},{"location":{"location":"https://github.com/Kokseng1/ip.git","repoName":"ip","organization":"Kokseng1","domainName":"github"},"branch":"master","displayName":"Kokseng1/ip[master]","outputFolderName":"Kokseng1_ip_master"},{"location":{"location":"https://github.com/yiwen101/ip.git","repoName":"ip","organization":"yiwen101","domainName":"github"},"branch":"master","displayName":"yiwen101/ip[master]","outputFolderName":"yiwen101_ip_master"},{"location":{"location":"https://github.com/Cikguseven/ip.git","repoName":"ip","organization":"Cikguseven","domainName":"github"},"branch":"master","displayName":"Cikguseven/ip[master]","outputFolderName":"Cikguseven_ip_master"},{"location":{"location":"https://github.com/javinchua/ip.git","repoName":"ip","organization":"javinchua","domainName":"github"},"branch":"master","displayName":"javinchua/ip[master]","outputFolderName":"javinchua_ip_master"},{"location":{"location":"https://github.com/frrrrry/ip.git","repoName":"ip","organization":"frrrrry","domainName":"github"},"branch":"master","displayName":"frrrrry/ip[master]","outputFolderName":"frrrrry_ip_master"},{"location":{"location":"https://github.com/YeoBohShin/ip.git","repoName":"ip","organization":"YeoBohShin","domainName":"github"},"branch":"master","displayName":"YeoBohShin/ip[master]","outputFolderName":"YeoBohShin_ip_master"},{"location":{"location":"https://github.com/yongning0310/ip.git","repoName":"ip","organization":"yongning0310","domainName":"github"},"branch":"master","displayName":"yongning0310/ip[master]","outputFolderName":"yongning0310_ip_master"},{"location":{"location":"https://github.com/SimWPEric/ip.git","repoName":"ip","organization":"SimWPEric","domainName":"github"},"branch":"master","displayName":"SimWPEric/ip[master]","outputFolderName":"SimWPEric_ip_master"},{"location":{"location":"https://github.com/sopa301/ip.git","repoName":"ip","organization":"sopa301","domainName":"github"},"branch":"master","displayName":"sopa301/ip[master]","outputFolderName":"sopa301_ip_master"},{"location":{"location":"https://github.com/nananakx-x/ip.git","repoName":"ip","organization":"nananakx-x","domainName":"github"},"branch":"master","displayName":"nananakx-x/ip[master]","outputFolderName":"nananakx-x_ip_master"},{"location":{"location":"https://github.com/LuoZYi/ip.git","repoName":"ip","organization":"LuoZYi","domainName":"github"},"branch":"master","displayName":"LuoZYi/ip[master]","outputFolderName":"LuoZYi_ip_master"},{"location":{"location":"https://github.com/LinWanLeii/ip.git","repoName":"ip","organization":"LinWanLeii","domainName":"github"},"branch":"master","displayName":"LinWanLeii/ip[master]","outputFolderName":"LinWanLeii_ip_master"},{"location":{"location":"https://github.com/mingyuanc/ip.git","repoName":"ip","organization":"mingyuanc","domainName":"github"},"branch":"master","displayName":"mingyuanc/ip[master]","outputFolderName":"mingyuanc_ip_master"},{"location":{"location":"https://github.com/chonguschonguschongus/ip.git","repoName":"ip","organization":"chonguschonguschongus","domainName":"github"},"branch":"master","displayName":"chonguschonguschongus/ip[master]","outputFolderName":"chonguschonguschongus_ip_master"},{"location":{"location":"https://github.com/yanghengtang/ip.git","repoName":"ip","organization":"yanghengtang","domainName":"github"},"branch":"master","displayName":"yanghengtang/ip[master]","outputFolderName":"yanghengtang_ip_master"},{"location":{"location":"https://github.com/victorpengmx/ip.git","repoName":"ip","organization":"victorpengmx","domainName":"github"},"branch":"master","displayName":"victorpengmx/ip[master]","outputFolderName":"victorpengmx_ip_master"},{"location":{"location":"https://github.com/kanna-1/ip.git","repoName":"ip","organization":"kanna-1","domainName":"github"},"branch":"master","displayName":"kanna-1/ip[master]","outputFolderName":"kanna-1_ip_master"},{"location":{"location":"https://github.com/ncduy0303/ip.git","repoName":"ip","organization":"ncduy0303","domainName":"github"},"branch":"master","displayName":"ncduy0303/ip[master]","outputFolderName":"ncduy0303_ip_master"},{"location":{"location":"https://github.com/jannnice/ip.git","repoName":"ip","organization":"jannnice","domainName":"github"},"branch":"master","displayName":"jannnice/ip[master]","outputFolderName":"jannnice_ip_master"},{"location":{"location":"https://github.com/itssisi/ip.git","repoName":"ip","organization":"itssisi","domainName":"github"},"branch":"master","displayName":"itssisi/ip[master]","outputFolderName":"itssisi_ip_master"},{"location":{"location":"https://github.com/freddychenyouren2/ip.git","repoName":"ip","organization":"freddychenyouren2","domainName":"github"},"branch":"master","displayName":"freddychenyouren2/ip[master]","outputFolderName":"freddychenyouren2_ip_master"},{"location":{"location":"https://github.com/Vanessamae23/ip.git","repoName":"ip","organization":"Vanessamae23","domainName":"github"},"branch":"master","displayName":"Vanessamae23/ip[master]","outputFolderName":"Vanessamae23_ip_master"},{"location":{"location":"https://github.com/cbj252/ip.git","repoName":"ip","organization":"cbj252","domainName":"github"},"branch":"master","displayName":"cbj252/ip[master]","outputFolderName":"cbj252_ip_master"},{"location":{"location":"https://github.com/freshcabbage123/ip.git","repoName":"ip","organization":"freshcabbage123","domainName":"github"},"branch":"master","displayName":"freshcabbage123/ip[master]","outputFolderName":"freshcabbage123_ip_master"},{"location":{"location":"https://github.com/thienmy0/ip.git","repoName":"ip","organization":"thienmy0","domainName":"github"},"branch":"master","displayName":"thienmy0/ip[master]","outputFolderName":"thienmy0_ip_master"},{"location":{"location":"https://github.com/glenngnng/ip.git","repoName":"ip","organization":"glenngnng","domainName":"github"},"branch":"master","displayName":"glenngnng/ip[master]","outputFolderName":"glenngnng_ip_master"},{"location":{"location":"https://github.com/Darren159/ip.git","repoName":"ip","organization":"Darren159","domainName":"github"},"branch":"master","displayName":"Darren159/ip[master]","outputFolderName":"Darren159_ip_master"},{"location":{"location":"https://github.com/J-hta-n/ip.git","repoName":"ip","organization":"J-hta-n","domainName":"github"},"branch":"master","displayName":"J-hta-n/ip[master]","outputFolderName":"J-hta-n_ip_master"},{"location":{"location":"https://github.com/evanyan13/ip.git","repoName":"ip","organization":"evanyan13","domainName":"github"},"branch":"master","displayName":"evanyan13/ip[master]","outputFolderName":"evanyan13_ip_master"},{"location":{"location":"https://github.com/tanveersingh10/ip.git","repoName":"ip","organization":"tanveersingh10","domainName":"github"},"branch":"master","displayName":"tanveersingh10/ip[master]","outputFolderName":"tanveersingh10_ip_master"},{"location":{"location":"https://github.com/neyapraveen/ip.git","repoName":"ip","organization":"neyapraveen","domainName":"github"},"branch":"master","displayName":"neyapraveen/ip[master]","outputFolderName":"neyapraveen_ip_master"},{"location":{"location":"https://github.com/weeweh/ip.git","repoName":"ip","organization":"weeweh","domainName":"github"},"branch":"master","displayName":"weeweh/ip[master]","outputFolderName":"weeweh_ip_master"},{"location":{"location":"https://github.com/HugeNoob/ip.git","repoName":"ip","organization":"HugeNoob","domainName":"github"},"branch":"master","displayName":"HugeNoob/ip[master]","outputFolderName":"HugeNoob_ip_master"},{"location":{"location":"https://github.com/wasjoe1/ip.git","repoName":"ip","organization":"wasjoe1","domainName":"github"},"branch":"master","displayName":"wasjoe1/ip[master]","outputFolderName":"wasjoe1_ip_master"},{"location":{"location":"https://github.com/s-kybound/ip.git","repoName":"ip","organization":"s-kybound","domainName":"github"},"branch":"master","displayName":"s-kybound/ip[master]","outputFolderName":"s-kybound_ip_master"},{"location":{"location":"https://github.com/Singa-pirate/ip.git","repoName":"ip","organization":"Singa-pirate","domainName":"github"},"branch":"master","displayName":"Singa-pirate/ip[master]","outputFolderName":"Singa-pirate_ip_master"},{"location":{"location":"https://github.com/wanghejin/ip.git","repoName":"ip","organization":"wanghejin","domainName":"github"},"branch":"master","displayName":"wanghejin/ip[master]","outputFolderName":"wanghejin_ip_master"},{"location":{"location":"https://github.com/yarnmengnus/ip.git","repoName":"ip","organization":"yarnmengnus","domainName":"github"},"branch":"master","displayName":"yarnmengnus/ip[master]","outputFolderName":"yarnmengnus_ip_master"},{"location":{"location":"https://github.com/Kurtyjlee/ip.git","repoName":"ip","organization":"Kurtyjlee","domainName":"github"},"branch":"master","displayName":"Kurtyjlee/ip[master]","outputFolderName":"Kurtyjlee_ip_master"},{"location":{"location":"https://github.com/jellywaiyan/ip.git","repoName":"ip","organization":"jellywaiyan","domainName":"github"},"branch":"master","displayName":"jellywaiyan/ip[master]","outputFolderName":"jellywaiyan_ip_master"},{"location":{"location":"https://github.com/ylyma/ip.git","repoName":"ip","organization":"ylyma","domainName":"github"},"branch":"master","displayName":"ylyma/ip[master]","outputFolderName":"ylyma_ip_master"},{"location":{"location":"https://github.com/revdrag/ip.git","repoName":"ip","organization":"revdrag","domainName":"github"},"branch":"master","displayName":"revdrag/ip[master]","outputFolderName":"revdrag_ip_master"},{"location":{"location":"https://github.com/vijay-shankaranand/ip.git","repoName":"ip","organization":"vijay-shankaranand","domainName":"github"},"branch":"master","displayName":"vijay-shankaranand/ip[master]","outputFolderName":"vijay-shankaranand_ip_master"},{"location":{"location":"https://github.com/lerxuann/ip.git","repoName":"ip","organization":"lerxuann","domainName":"github"},"branch":"master","displayName":"lerxuann/ip[master]","outputFolderName":"lerxuann_ip_master"},{"location":{"location":"https://github.com/yuxunn/ip.git","repoName":"ip","organization":"yuxunn","domainName":"github"},"branch":"master","displayName":"yuxunn/ip[master]","outputFolderName":"yuxunn_ip_master"},{"location":{"location":"https://github.com/zannloo/ip.git","repoName":"ip","organization":"zannloo","domainName":"github"},"branch":"master","displayName":"zannloo/ip[master]","outputFolderName":"zannloo_ip_master"},{"location":{"location":"https://github.com/AryanG01/ip.git","repoName":"ip","organization":"AryanG01","domainName":"github"},"branch":"master","displayName":"AryanG01/ip[master]","outputFolderName":"AryanG01_ip_master"},{"location":{"location":"https://github.com/oeggy03/ip.git","repoName":"ip","organization":"oeggy03","domainName":"github"},"branch":"master","displayName":"oeggy03/ip[master]","outputFolderName":"oeggy03_ip_master"},{"location":{"location":"https://github.com/jeffrey-jian/ip.git","repoName":"ip","organization":"jeffrey-jian","domainName":"github"},"branch":"master","displayName":"jeffrey-jian/ip[master]","outputFolderName":"jeffrey-jian_ip_master"},{"location":{"location":"https://github.com/nicholastng010601/ip.git","repoName":"ip","organization":"nicholastng010601","domainName":"github"},"branch":"master","displayName":"nicholastng010601/ip[master]","outputFolderName":"nicholastng010601_ip_master"},{"location":{"location":"https://github.com/Weiennn/ip.git","repoName":"ip","organization":"Weiennn","domainName":"github"},"branch":"master","displayName":"Weiennn/ip[master]","outputFolderName":"Weiennn_ip_master"},{"location":{"location":"https://github.com/tayruxin/ip.git","repoName":"ip","organization":"tayruxin","domainName":"github"},"branch":"master","displayName":"tayruxin/ip[master]","outputFolderName":"tayruxin_ip_master"},{"location":{"location":"https://github.com/xyT-T/ip.git","repoName":"ip","organization":"xyT-T","domainName":"github"},"branch":"master","displayName":"xyT-T/ip[master]","outputFolderName":"xyT-T_ip_master"},{"location":{"location":"https://github.com/lunaroddity/ip.git","repoName":"ip","organization":"lunaroddity","domainName":"github"},"branch":"master","displayName":"lunaroddity/ip[master]","outputFolderName":"lunaroddity_ip_master"},{"location":{"location":"https://github.com/nabonitasen/ip.git","repoName":"ip","organization":"nabonitasen","domainName":"github"},"branch":"master","displayName":"nabonitasen/ip[master]","outputFolderName":"nabonitasen_ip_master"},{"location":{"location":"https://github.com/inezkok/ip.git","repoName":"ip","organization":"inezkok","domainName":"github"},"branch":"master","displayName":"inezkok/ip[master]","outputFolderName":"inezkok_ip_master"},{"location":{"location":"https://github.com/nknguyenhc/ip.git","repoName":"ip","organization":"nknguyenhc","domainName":"github"},"branch":"master","displayName":"nknguyenhc/ip[master]","outputFolderName":"nknguyenhc_ip_master"},{"location":{"location":"https://github.com/keaganpzh/ip.git","repoName":"ip","organization":"keaganpzh","domainName":"github"},"branch":"master","displayName":"keaganpzh/ip[master]","outputFolderName":"keaganpzh_ip_master"},{"location":{"location":"https://github.com/lululwtv/ip.git","repoName":"ip","organization":"lululwtv","domainName":"github"},"branch":"master","displayName":"lululwtv/ip[master]","outputFolderName":"lululwtv_ip_master"},{"location":{"location":"https://github.com/hcs1203/ip.git","repoName":"ip","organization":"hcs1203","domainName":"github"},"branch":"master","displayName":"hcs1203/ip[master]","outputFolderName":"hcs1203_ip_master"},{"location":{"location":"https://github.com/migfoo02/ip.git","repoName":"ip","organization":"migfoo02","domainName":"github"},"branch":"master","displayName":"migfoo02/ip[master]","outputFolderName":"migfoo02_ip_master"},{"location":{"location":"https://github.com/papataco14/ip.git","repoName":"ip","organization":"papataco14","domainName":"github"},"branch":"master","displayName":"papataco14/ip[master]","outputFolderName":"papataco14_ip_master"},{"location":{"location":"https://github.com/coderhuang559/ip.git","repoName":"ip","organization":"coderhuang559","domainName":"github"},"branch":"master","displayName":"coderhuang559/ip[master]","outputFolderName":"coderhuang559_ip_master"},{"location":{"location":"https://github.com/craigtonlian/ip.git","repoName":"ip","organization":"craigtonlian","domainName":"github"},"branch":"master","displayName":"craigtonlian/ip[master]","outputFolderName":"craigtonlian_ip_master"},{"location":{"location":"https://github.com/adammangzijun/ip.git","repoName":"ip","organization":"adammangzijun","domainName":"github"},"branch":"master","displayName":"adammangzijun/ip[master]","outputFolderName":"adammangzijun_ip_master"},{"location":{"location":"https://github.com/AlainS87/ip.git","repoName":"ip","organization":"AlainS87","domainName":"github"},"branch":"master","displayName":"AlainS87/ip[master]","outputFolderName":"AlainS87_ip_master"},{"location":{"location":"https://github.com/tanyyyming/ip.git","repoName":"ip","organization":"tanyyyming","domainName":"github"},"branch":"master","displayName":"tanyyyming/ip[master]","outputFolderName":"tanyyyming_ip_master"},{"location":{"location":"https://github.com/Saezenn/ip.git","repoName":"ip","organization":"Saezenn","domainName":"github"},"branch":"master","displayName":"Saezenn/ip[master]","outputFolderName":"Saezenn_ip_master"},{"location":{"location":"https://github.com/kayabuttertoastt/ip.git","repoName":"ip","organization":"kayabuttertoastt","domainName":"github"},"branch":"master","displayName":"kayabuttertoastt/ip[master]","outputFolderName":"kayabuttertoastt_ip_master"},{"location":{"location":"https://github.com/limjunxian1/ip.git","repoName":"ip","organization":"limjunxian1","domainName":"github"},"branch":"master","displayName":"limjunxian1/ip[master]","outputFolderName":"limjunxian1_ip_master"},{"location":{"location":"https://github.com/andrechuakj/ip.git","repoName":"ip","organization":"andrechuakj","domainName":"github"},"branch":"master","displayName":"andrechuakj/ip[master]","outputFolderName":"andrechuakj_ip_master"},{"location":{"location":"https://github.com/kwangthiag/ip.git","repoName":"ip","organization":"kwangthiag","domainName":"github"},"branch":"master","displayName":"kwangthiag/ip[master]","outputFolderName":"kwangthiag_ip_master"},{"location":{"location":"https://github.com/ricketytoc/ip.git","repoName":"ip","organization":"ricketytoc","domainName":"github"},"branch":"master","displayName":"ricketytoc/ip[master]","outputFolderName":"ricketytoc_ip_master"},{"location":{"location":"https://github.com/applepiofmyeye/ip.git","repoName":"ip","organization":"applepiofmyeye","domainName":"github"},"branch":"master","displayName":"applepiofmyeye/ip[master]","outputFolderName":"applepiofmyeye_ip_master"},{"location":{"location":"https://github.com/nubnubyas/ip.git","repoName":"ip","organization":"nubnubyas","domainName":"github"},"branch":"master","displayName":"nubnubyas/ip[master]","outputFolderName":"nubnubyas_ip_master"},{"location":{"location":"https://github.com/WeeeHung/ip.git","repoName":"ip","organization":"WeeeHung","domainName":"github"},"branch":"master","displayName":"WeeeHung/ip[master]","outputFolderName":"WeeeHung_ip_master"},{"location":{"location":"https://github.com/Eola-Z/ip.git","repoName":"ip","organization":"Eola-Z","domainName":"github"},"branch":"master","displayName":"Eola-Z/ip[master]","outputFolderName":"Eola-Z_ip_master"},{"location":{"location":"https://github.com/jordankanghm/ip.git","repoName":"ip","organization":"jordankanghm","domainName":"github"},"branch":"master","displayName":"jordankanghm/ip[master]","outputFolderName":"jordankanghm_ip_master"},{"location":{"location":"https://github.com/zacwong2151/ip.git","repoName":"ip","organization":"zacwong2151","domainName":"github"},"branch":"master","displayName":"zacwong2151/ip[master]","outputFolderName":"zacwong2151_ip_master"},{"location":{"location":"https://github.com/m1oojv/ip.git","repoName":"ip","organization":"m1oojv","domainName":"github"},"branch":"master","displayName":"m1oojv/ip[master]","outputFolderName":"m1oojv_ip_master"},{"location":{"location":"https://github.com/JCSnap/ip.git","repoName":"ip","organization":"JCSnap","domainName":"github"},"branch":"master","displayName":"JCSnap/ip[master]","outputFolderName":"JCSnap_ip_master"},{"location":{"location":"https://github.com/Nid21cs/ip.git","repoName":"ip","organization":"Nid21cs","domainName":"github"},"branch":"master","displayName":"Nid21cs/ip[master]","outputFolderName":"Nid21cs_ip_master"},{"location":{"location":"https://github.com/mfjkri/ip.git","repoName":"ip","organization":"mfjkri","domainName":"github"},"branch":"master","displayName":"mfjkri/ip[master]","outputFolderName":"mfjkri_ip_master"},{"location":{"location":"https://github.com/Choonyan02/ip.git","repoName":"ip","organization":"Choonyan02","domainName":"github"},"branch":"master","displayName":"Choonyan02/ip[master]","outputFolderName":"Choonyan02_ip_master"},{"location":{"location":"https://github.com/rayyan35p/ip.git","repoName":"ip","organization":"rayyan35p","domainName":"github"},"branch":"master","displayName":"rayyan35p/ip[master]","outputFolderName":"rayyan35p_ip_master"},{"location":{"location":"https://github.com/dhruvir29/ip.git","repoName":"ip","organization":"dhruvir29","domainName":"github"},"branch":"master","displayName":"dhruvir29/ip[master]","outputFolderName":"dhruvir29_ip_master"},{"location":{"location":"https://github.com/Mohammed-Faizzzz/ip.git","repoName":"ip","organization":"Mohammed-Faizzzz","domainName":"github"},"branch":"master","displayName":"Mohammed-Faizzzz/ip[master]","outputFolderName":"Mohammed-Faizzzz_ip_master"},{"location":{"location":"https://github.com/ruo-x/ip.git","repoName":"ip","organization":"ruo-x","domainName":"github"},"branch":"master","displayName":"ruo-x/ip[master]","outputFolderName":"ruo-x_ip_master"},{"location":{"location":"https://github.com/DonovanJJ/ip.git","repoName":"ip","organization":"DonovanJJ","domainName":"github"},"branch":"master","displayName":"DonovanJJ/ip[master]","outputFolderName":"DonovanJJ_ip_master"},{"location":{"location":"https://github.com/kristayeo/ip.git","repoName":"ip","organization":"kristayeo","domainName":"github"},"branch":"master","displayName":"kristayeo/ip[master]","outputFolderName":"kristayeo_ip_master"},{"location":{"location":"https://github.com/ZD292/ip.git","repoName":"ip","organization":"ZD292","domainName":"github"},"branch":"master","displayName":"ZD292/ip[master]","outputFolderName":"ZD292_ip_master"},{"location":{"location":"https://github.com/jingjie88/ip.git","repoName":"ip","organization":"jingjie88","domainName":"github"},"branch":"master","displayName":"jingjie88/ip[master]","outputFolderName":"jingjie88_ip_master"},{"location":{"location":"https://github.com/iantsaii/ip.git","repoName":"ip","organization":"iantsaii","domainName":"github"},"branch":"master","displayName":"iantsaii/ip[master]","outputFolderName":"iantsaii_ip_master"},{"location":{"location":"https://github.com/jingting1412/ip.git","repoName":"ip","organization":"jingting1412","domainName":"github"},"branch":"master","displayName":"jingting1412/ip[master]","outputFolderName":"jingting1412_ip_master"},{"location":{"location":"https://github.com/wnchan/ip.git","repoName":"ip","organization":"wnchan","domainName":"github"},"branch":"master","displayName":"wnchan/ip[master]","outputFolderName":"wnchan_ip_master"},{"location":{"location":"https://github.com/jack1e0/ip.git","repoName":"ip","organization":"jack1e0","domainName":"github"},"branch":"master","displayName":"jack1e0/ip[master]","outputFolderName":"jack1e0_ip_master"},{"location":{"location":"https://github.com/mingyu-wan/ip.git","repoName":"ip","organization":"mingyu-wan","domainName":"github"},"branch":"master","displayName":"mingyu-wan/ip[master]","outputFolderName":"mingyu-wan_ip_master"},{"location":{"location":"https://github.com/nicolengk/ip.git","repoName":"ip","organization":"nicolengk","domainName":"github"},"branch":"master","displayName":"nicolengk/ip[master]","outputFolderName":"nicolengk_ip_master"},{"location":{"location":"https://github.com/cyaoxuan/ip.git","repoName":"ip","organization":"cyaoxuan","domainName":"github"},"branch":"master","displayName":"cyaoxuan/ip[master]","outputFolderName":"cyaoxuan_ip_master"},{"location":{"location":"https://github.com/sunzihan23/ip.git","repoName":"ip","organization":"sunzihan23","domainName":"github"},"branch":"master","displayName":"sunzihan23/ip[master]","outputFolderName":"sunzihan23_ip_master"},{"location":{"location":"https://github.com/Goh-Li-Ting/ip.git","repoName":"ip","organization":"Goh-Li-Ting","domainName":"github"},"branch":"master","displayName":"Goh-Li-Ting/ip[master]","outputFolderName":"Goh-Li-Ting_ip_master"},{"location":{"location":"https://github.com/wjayee/ip.git","repoName":"ip","organization":"wjayee","domainName":"github"},"branch":"master","displayName":"wjayee/ip[master]","outputFolderName":"wjayee_ip_master"},{"location":{"location":"https://github.com/fuyiqiao/ip.git","repoName":"ip","organization":"fuyiqiao","domainName":"github"},"branch":"master","displayName":"fuyiqiao/ip[master]","outputFolderName":"fuyiqiao_ip_master"},{"location":{"location":"https://github.com/GlendaChong/ip.git","repoName":"ip","organization":"GlendaChong","domainName":"github"},"branch":"master","displayName":"GlendaChong/ip[master]","outputFolderName":"GlendaChong_ip_master"},{"location":{"location":"https://github.com/hyc17003/ip.git","repoName":"ip","organization":"hyc17003","domainName":"github"},"branch":"master","displayName":"hyc17003/ip[master]","outputFolderName":"hyc17003_ip_master"},{"location":{"location":"https://github.com/spatuly/ip.git","repoName":"ip","organization":"spatuly","domainName":"github"},"branch":"master","displayName":"spatuly/ip[master]","outputFolderName":"spatuly_ip_master"},{"location":{"location":"https://github.com/tanteckfang/ip.git","repoName":"ip","organization":"tanteckfang","domainName":"github"},"branch":"master","displayName":"tanteckfang/ip[master]","outputFolderName":"tanteckfang_ip_master"},{"location":{"location":"https://github.com/Clin-lyx/ip.git","repoName":"ip","organization":"Clin-lyx","domainName":"github"},"branch":"master","displayName":"Clin-lyx/ip[master]","outputFolderName":"Clin-lyx_ip_master"},{"location":{"location":"https://github.com/lyuanww/ip.git","repoName":"ip","organization":"lyuanww","domainName":"github"},"branch":"master","displayName":"lyuanww/ip[master]","outputFolderName":"lyuanww_ip_master"},{"location":{"location":"https://github.com/LimJH2002/ip.git","repoName":"ip","organization":"LimJH2002","domainName":"github"},"branch":"master","displayName":"LimJH2002/ip[master]","outputFolderName":"LimJH2002_ip_master"},{"location":{"location":"https://github.com/LWZ19/ip.git","repoName":"ip","organization":"LWZ19","domainName":"github"},"branch":"master","displayName":"LWZ19/ip[master]","outputFolderName":"LWZ19_ip_master"},{"location":{"location":"https://github.com/Gavino3o/ip.git","repoName":"ip","organization":"Gavino3o","domainName":"github"},"branch":"master","displayName":"Gavino3o/ip[master]","outputFolderName":"Gavino3o_ip_master"},{"location":{"location":"https://github.com/suryanshkushwaha/ip.git","repoName":"ip","organization":"suryanshkushwaha","domainName":"github"},"branch":"master","displayName":"suryanshkushwaha/ip[master]","outputFolderName":"suryanshkushwaha_ip_master"},{"location":{"location":"https://github.com/JasonRay168/ip.git","repoName":"ip","organization":"JasonRay168","domainName":"github"},"branch":"master","displayName":"JasonRay168/ip[master]","outputFolderName":"JasonRay168_ip_master"},{"location":{"location":"https://github.com/jovkusuma/ip.git","repoName":"ip","organization":"jovkusuma","domainName":"github"},"branch":"master","displayName":"jovkusuma/ip[master]","outputFolderName":"jovkusuma_ip_master"},{"location":{"location":"https://github.com/Chrainx/ip.git","repoName":"ip","organization":"Chrainx","domainName":"github"},"branch":"master","displayName":"Chrainx/ip[master]","outputFolderName":"Chrainx_ip_master"},{"location":{"location":"https://github.com/Propene-Dan/ip.git","repoName":"ip","organization":"Propene-Dan","domainName":"github"},"branch":"master","displayName":"Propene-Dan/ip[master]","outputFolderName":"Propene-Dan_ip_master"},{"location":{"location":"https://github.com/Daphne789/ip.git","repoName":"ip","organization":"Daphne789","domainName":"github"},"branch":"master","displayName":"Daphne789/ip[master]","outputFolderName":"Daphne789_ip_master"},{"location":{"location":"https://github.com/ChuanXinNg/ip.git","repoName":"ip","organization":"ChuanXinNg","domainName":"github"},"branch":"master","displayName":"ChuanXinNg/ip[master]","outputFolderName":"ChuanXinNg_ip_master"},{"location":{"location":"https://github.com/LHeng1/ip.git","repoName":"ip","organization":"LHeng1","domainName":"github"},"branch":"master","displayName":"LHeng1/ip[master]","outputFolderName":"LHeng1_ip_master"},{"location":{"location":"https://github.com/wr1159/ip.git","repoName":"ip","organization":"wr1159","domainName":"github"},"branch":"master","displayName":"wr1159/ip[master]","outputFolderName":"wr1159_ip_master"},{"location":{"location":"https://github.com/wjacobw/ip.git","repoName":"ip","organization":"wjacobw","domainName":"github"},"branch":"master","displayName":"wjacobw/ip[master]","outputFolderName":"wjacobw_ip_master"},{"location":{"location":"https://github.com/tiongjjyi/ip.git","repoName":"ip","organization":"tiongjjyi","domainName":"github"},"branch":"master","displayName":"tiongjjyi/ip[master]","outputFolderName":"tiongjjyi_ip_master"},{"location":{"location":"https://github.com/longnguyentan/ip.git","repoName":"ip","organization":"longnguyentan","domainName":"github"},"branch":"master","displayName":"longnguyentan/ip[master]","outputFolderName":"longnguyentan_ip_master"},{"location":{"location":"https://github.com/proto-aiken-13/ip.git","repoName":"ip","organization":"proto-aiken-13","domainName":"github"},"branch":"master","displayName":"proto-aiken-13/ip[master]","outputFolderName":"proto-aiken-13_ip_master"},{"location":{"location":"https://github.com/junnengsoo/ip.git","repoName":"ip","organization":"junnengsoo","domainName":"github"},"branch":"master","displayName":"junnengsoo/ip[master]","outputFolderName":"junnengsoo_ip_master"},{"location":{"location":"https://github.com/yezkez10/ip.git","repoName":"ip","organization":"yezkez10","domainName":"github"},"branch":"master","displayName":"yezkez10/ip[master]","outputFolderName":"yezkez10_ip_master"},{"location":{"location":"https://github.com/jamesebond/ip.git","repoName":"ip","organization":"jamesebond","domainName":"github"},"branch":"master","displayName":"jamesebond/ip[master]","outputFolderName":"jamesebond_ip_master"},{"location":{"location":"https://github.com/alyssaongyx/ip.git","repoName":"ip","organization":"alyssaongyx","domainName":"github"},"branch":"master","displayName":"alyssaongyx/ip[master]","outputFolderName":"alyssaongyx_ip_master"},{"location":{"location":"https://github.com/Carlintyj/ip.git","repoName":"ip","organization":"Carlintyj","domainName":"github"},"branch":"master","displayName":"Carlintyj/ip[master]","outputFolderName":"Carlintyj_ip_master"},{"location":{"location":"https://github.com/ruth-lim/ip.git","repoName":"ip","organization":"ruth-lim","domainName":"github"},"branch":"master","displayName":"ruth-lim/ip[master]","outputFolderName":"ruth-lim_ip_master"},{"location":{"location":"https://github.com/licongshen12/ip.git","repoName":"ip","organization":"licongshen12","domainName":"github"},"branch":"master","displayName":"licongshen12/ip[master]","outputFolderName":"licongshen12_ip_master"},{"location":{"location":"https://github.com/thaddeusong/ip.git","repoName":"ip","organization":"thaddeusong","domainName":"github"},"branch":"master","displayName":"thaddeusong/ip[master]","outputFolderName":"thaddeusong_ip_master"},{"location":{"location":"https://github.com/LordSaumya/ip.git","repoName":"ip","organization":"LordSaumya","domainName":"github"},"branch":"master","displayName":"LordSaumya/ip[master]","outputFolderName":"LordSaumya_ip_master"},{"location":{"location":"https://github.com/Kevin-Liusx/ip.git","repoName":"ip","organization":"Kevin-Liusx","domainName":"github"},"branch":"master","displayName":"Kevin-Liusx/ip[master]","outputFolderName":"Kevin-Liusx_ip_master"},{"location":{"location":"https://github.com/Ken-Lai/ip.git","repoName":"ip","organization":"Ken-Lai","domainName":"github"},"branch":"master","displayName":"Ken-Lai/ip[master]","outputFolderName":"Ken-Lai_ip_master"},{"location":{"location":"https://github.com/KumChaiYin/ip.git","repoName":"ip","organization":"KumChaiYin","domainName":"github"},"branch":"master","displayName":"KumChaiYin/ip[master]","outputFolderName":"KumChaiYin_ip_master"},{"location":{"location":"https://github.com/pzl111/ip.git","repoName":"ip","organization":"pzl111","domainName":"github"},"branch":"master","displayName":"pzl111/ip[master]","outputFolderName":"pzl111_ip_master"},{"location":{"location":"https://github.com/alientian/ip.git","repoName":"ip","organization":"alientian","domainName":"github"},"branch":"master","displayName":"alientian/ip[master]","outputFolderName":"alientian_ip_master"},{"location":{"location":"https://github.com/eyelessrhyme7/ip.git","repoName":"ip","organization":"eyelessrhyme7","domainName":"github"},"branch":"master","displayName":"eyelessrhyme7/ip[master]","outputFolderName":"eyelessrhyme7_ip_master"},{"location":{"location":"https://github.com/AprupKale/ip.git","repoName":"ip","organization":"AprupKale","domainName":"github"},"branch":"master","displayName":"AprupKale/ip[master]","outputFolderName":"AprupKale_ip_master"},{"location":{"location":"https://github.com/kimshitong/ip.git","repoName":"ip","organization":"kimshitong","domainName":"github"},"branch":"master","displayName":"kimshitong/ip[master]","outputFolderName":"kimshitong_ip_master"},{"location":{"location":"https://github.com/Bryan-Goh/ip.git","repoName":"ip","organization":"Bryan-Goh","domainName":"github"},"branch":"master","displayName":"Bryan-Goh/ip[master]","outputFolderName":"Bryan-Goh_ip_master"},{"location":{"location":"https://github.com/tiif/ip.git","repoName":"ip","organization":"tiif","domainName":"github"},"branch":"master","displayName":"tiif/ip[master]","outputFolderName":"tiif_ip_master"},{"location":{"location":"https://github.com/angkyakdifp/ip.git","repoName":"ip","organization":"angkyakdifp","domainName":"github"},"branch":"master","displayName":"angkyakdifp/ip[master]","outputFolderName":"angkyakdifp_ip_master"},{"location":{"location":"https://github.com/Chen-Kuei/ip.git","repoName":"ip","organization":"Chen-Kuei","domainName":"github"},"branch":"master","displayName":"Chen-Kuei/ip[master]","outputFolderName":"Chen-Kuei_ip_master"},{"location":{"location":"https://github.com/SinhaVedant/ip.git","repoName":"ip","organization":"SinhaVedant","domainName":"github"},"branch":"master","displayName":"SinhaVedant/ip[master]","outputFolderName":"SinhaVedant_ip_master"},{"location":{"location":"https://github.com/D-Limiter/ip.git","repoName":"ip","organization":"D-Limiter","domainName":"github"},"branch":"master","displayName":"D-Limiter/ip[master]","outputFolderName":"D-Limiter_ip_master"},{"location":{"location":"https://github.com/larrywang0701/ip.git","repoName":"ip","organization":"larrywang0701","domainName":"github"},"branch":"master","displayName":"larrywang0701/ip[master]","outputFolderName":"larrywang0701_ip_master"},{"location":{"location":"https://github.com/Song-Mengfei/ip.git","repoName":"ip","organization":"Song-Mengfei","domainName":"github"},"branch":"master","displayName":"Song-Mengfei/ip[master]","outputFolderName":"Song-Mengfei_ip_master"},{"location":{"location":"https://github.com/ChangruHenryQian/ip.git","repoName":"ip","organization":"ChangruHenryQian","domainName":"github"},"branch":"master","displayName":"ChangruHenryQian/ip[master]","outputFolderName":"ChangruHenryQian_ip_master"},{"location":{"location":"https://github.com/ketweeen/ip.git","repoName":"ip","organization":"ketweeen","domainName":"github"},"branch":"master","displayName":"ketweeen/ip[master]","outputFolderName":"ketweeen_ip_master"},{"location":{"location":"https://github.com/RSXIX/ip.git","repoName":"ip","organization":"RSXIX","domainName":"github"},"branch":"master","displayName":"RSXIX/ip[master]","outputFolderName":"RSXIX_ip_master"},{"location":{"location":"https://github.com/songgthu/ip.git","repoName":"ip","organization":"songgthu","domainName":"github"},"branch":"master","displayName":"songgthu/ip[master]","outputFolderName":"songgthu_ip_master"},{"location":{"location":"https://github.com/maj0-0/ip.git","repoName":"ip","organization":"maj0-0","domainName":"github"},"branch":"master","displayName":"maj0-0/ip[master]","outputFolderName":"maj0-0_ip_master"},{"location":{"location":"https://github.com/tiongMax/ip.git","repoName":"ip","organization":"tiongMax","domainName":"github"},"branch":"master","displayName":"tiongMax/ip[master]","outputFolderName":"tiongMax_ip_master"},{"location":{"location":"https://github.com/A1WAYSD/ip.git","repoName":"ip","organization":"A1WAYSD","domainName":"github"},"branch":"master","displayName":"A1WAYSD/ip[master]","outputFolderName":"A1WAYSD_ip_master"},{"location":{"location":"https://github.com/hjoneweek/ip.git","repoName":"ip","organization":"hjoneweek","domainName":"github"},"branch":"master","displayName":"hjoneweek/ip[master]","outputFolderName":"hjoneweek_ip_master"},{"location":{"location":"https://github.com/itsNatTan/ip.git","repoName":"ip","organization":"itsNatTan","domainName":"github"},"branch":"master","displayName":"itsNatTan/ip[master]","outputFolderName":"itsNatTan_ip_master"},{"location":{"location":"https://github.com/AustinHuang1203/ip.git","repoName":"ip","organization":"AustinHuang1203","domainName":"github"},"branch":"master","displayName":"AustinHuang1203/ip[master]","outputFolderName":"AustinHuang1203_ip_master"},{"location":{"location":"https://github.com/WangCheng0116/ip.git","repoName":"ip","organization":"WangCheng0116","domainName":"github"},"branch":"master","displayName":"WangCheng0116/ip[master]","outputFolderName":"WangCheng0116_ip_master"},{"location":{"location":"https://github.com/Tim-Siu/ip.git","repoName":"ip","organization":"Tim-Siu","domainName":"github"},"branch":"master","displayName":"Tim-Siu/ip[master]","outputFolderName":"Tim-Siu_ip_master"},{"location":{"location":"https://github.com/newway1814/ip.git","repoName":"ip","organization":"newway1814","domainName":"github"},"branch":"master","displayName":"newway1814/ip[master]","outputFolderName":"newway1814_ip_master"},{"location":{"location":"https://github.com/li-rongzhi/ip.git","repoName":"ip","organization":"li-rongzhi","domainName":"github"},"branch":"master","displayName":"li-rongzhi/ip[master]","outputFolderName":"li-rongzhi_ip_master"},{"location":{"location":"https://github.com/adhigop13/ip.git","repoName":"ip","organization":"adhigop13","domainName":"github"},"branch":"master","displayName":"adhigop13/ip[master]","outputFolderName":"adhigop13_ip_master"},{"location":{"location":"https://github.com/MadLamprey/ip.git","repoName":"ip","organization":"MadLamprey","domainName":"github"},"branch":"master","displayName":"MadLamprey/ip[master]","outputFolderName":"MadLamprey_ip_master"}],"errorSet":[],"sinceDate":"2023-08-18","untilDate":"2023-09-04","isSinceDateProvided":true,"isUntilDateProvided":false,"supportedDomainUrlMap":{"NOT_RECOGNIZED":{"BRANCH":"","REPO_URL":"UNSUPPORTED","BASE_URL":"UNSUPPORTED","HISTORY_PATH":"","COMMIT_PATH":"","BLAME_PATH":""},"github":{"BRANCH":"tree/$BRANCH","REPO_URL":"https://github.com/$ORGANIZATION/$REPO_NAME/","BASE_URL":"https://github.com/","HISTORY_PATH":"commits/$BRANCH/$FILE_PATH","COMMIT_PATH":"commit/$COMMIT_HASH","BLAME_PATH":"blame/$BRANCH/$FILE_PATH"}}} +{"repoSenseVersion":"3bad16bb3d","reportGeneratedTime":"Tue Sep 5 09:11:52 2023 UTC+08:00","reportGenerationTime":" 1 minute(s) 45.79 second(s)","zoneId":"UTC+08:00","reportTitle":"CS2103 iP Code Dashboard","repos":[{"location":{"location":"https://github.com/remuslum/ip.git","repoName":"ip","organization":"remuslum","domainName":"github"},"branch":"master","displayName":"remuslum/ip[master]","outputFolderName":"remuslum_ip_master"},{"location":{"location":"https://github.com/elhy1999/ip.git","repoName":"ip","organization":"elhy1999","domainName":"github"},"branch":"master","displayName":"elhy1999/ip[master]","outputFolderName":"elhy1999_ip_master"},{"location":{"location":"https://github.com/XihuaZ/ip.git","repoName":"ip","organization":"XihuaZ","domainName":"github"},"branch":"master","displayName":"XihuaZ/ip[master]","outputFolderName":"XihuaZ_ip_master"},{"location":{"location":"https://github.com/bwangpj/ip.git","repoName":"ip","organization":"bwangpj","domainName":"github"},"branch":"master","displayName":"bwangpj/ip[master]","outputFolderName":"bwangpj_ip_master"},{"location":{"location":"https://github.com/shuenj/ip.git","repoName":"ip","organization":"shuenj","domainName":"github"},"branch":"master","displayName":"shuenj/ip[master]","outputFolderName":"shuenj_ip_master"},{"location":{"location":"https://github.com/SungMatt/ip.git","repoName":"ip","organization":"SungMatt","domainName":"github"},"branch":"master","displayName":"SungMatt/ip[master]","outputFolderName":"SungMatt_ip_master"},{"location":{"location":"https://github.com/junhonglow/ip.git","repoName":"ip","organization":"junhonglow","domainName":"github"},"branch":"master","displayName":"junhonglow/ip[master]","outputFolderName":"junhonglow_ip_master"},{"location":{"location":"https://github.com/xavierpok/ip.git","repoName":"ip","organization":"xavierpok","domainName":"github"},"branch":"master","displayName":"xavierpok/ip[master]","outputFolderName":"xavierpok_ip_master"},{"location":{"location":"https://github.com/marcellaantania/ip.git","repoName":"ip","organization":"marcellaantania","domainName":"github"},"branch":"master","displayName":"marcellaantania/ip[master]","outputFolderName":"marcellaantania_ip_master"},{"location":{"location":"https://github.com/felibunnyy/ip.git","repoName":"ip","organization":"felibunnyy","domainName":"github"},"branch":"master","displayName":"felibunnyy/ip[master]","outputFolderName":"felibunnyy_ip_master"},{"location":{"location":"https://github.com/starrylight99/ip.git","repoName":"ip","organization":"starrylight99","domainName":"github"},"branch":"master","displayName":"starrylight99/ip[master]","outputFolderName":"starrylight99_ip_master"},{"location":{"location":"https://github.com/leezhanpeng/ip.git","repoName":"ip","organization":"leezhanpeng","domainName":"github"},"branch":"master","displayName":"leezhanpeng/ip[master]","outputFolderName":"leezhanpeng_ip_master"},{"location":{"location":"https://github.com/sheryew/ip.git","repoName":"ip","organization":"sheryew","domainName":"github"},"branch":"master","displayName":"sheryew/ip[master]","outputFolderName":"sheryew_ip_master"},{"location":{"location":"https://github.com/lihongguang00/ip.git","repoName":"ip","organization":"lihongguang00","domainName":"github"},"branch":"master","displayName":"lihongguang00/ip[master]","outputFolderName":"lihongguang00_ip_master"},{"location":{"location":"https://github.com/nicrandomlee/ip.git","repoName":"ip","organization":"nicrandomlee","domainName":"github"},"branch":"master","displayName":"nicrandomlee/ip[master]","outputFolderName":"nicrandomlee_ip_master"},{"location":{"location":"https://github.com/LuahJunYang/ip.git","repoName":"ip","organization":"LuahJunYang","domainName":"github"},"branch":"master","displayName":"LuahJunYang/ip[master]","outputFolderName":"LuahJunYang_ip_master"},{"location":{"location":"https://github.com/s-peiran/ip.git","repoName":"ip","organization":"s-peiran","domainName":"github"},"branch":"master","displayName":"s-peiran/ip[master]","outputFolderName":"s-peiran_ip_master"},{"location":{"location":"https://github.com/aarontxz/ip.git","repoName":"ip","organization":"aarontxz","domainName":"github"},"branch":"master","displayName":"aarontxz/ip[master]","outputFolderName":"aarontxz_ip_master"},{"location":{"location":"https://github.com/chiayunrong/ip.git","repoName":"ip","organization":"chiayunrong","domainName":"github"},"branch":"master","displayName":"chiayunrong/ip[master]","outputFolderName":"chiayunrong_ip_master"},{"location":{"location":"https://github.com/nixonwidjaja/ip.git","repoName":"ip","organization":"nixonwidjaja","domainName":"github"},"branch":"master","displayName":"nixonwidjaja/ip[master]","outputFolderName":"nixonwidjaja_ip_master"},{"location":{"location":"https://github.com/imkwokyong/ip.git","repoName":"ip","organization":"imkwokyong","domainName":"github"},"branch":"master","displayName":"imkwokyong/ip[master]","outputFolderName":"imkwokyong_ip_master"},{"location":{"location":"https://github.com/mamayuan/ip.git","repoName":"ip","organization":"mamayuan","domainName":"github"},"branch":"master","displayName":"mamayuan/ip[master]","outputFolderName":"mamayuan_ip_master"},{"location":{"location":"https://github.com/geoffong11/ip.git","repoName":"ip","organization":"geoffong11","domainName":"github"},"branch":"master","displayName":"geoffong11/ip[master]","outputFolderName":"geoffong11_ip_master"},{"location":{"location":"https://github.com/vivienherq/ip.git","repoName":"ip","organization":"vivienherq","domainName":"github"},"branch":"master","displayName":"vivienherq/ip[master]","outputFolderName":"vivienherq_ip_master"},{"location":{"location":"https://github.com/johnnythesnake12/ip.git","repoName":"ip","organization":"johnnythesnake12","domainName":"github"},"branch":"master","displayName":"johnnythesnake12/ip[master]","outputFolderName":"johnnythesnake12_ip_master"},{"location":{"location":"https://github.com/Cloud7050/ip.git","repoName":"ip","organization":"Cloud7050","domainName":"github"},"branch":"master","displayName":"Cloud7050/ip[master]","outputFolderName":"Cloud7050_ip_master"},{"location":{"location":"https://github.com/jonyeokj/ip.git","repoName":"ip","organization":"jonyeokj","domainName":"github"},"branch":"master","displayName":"jonyeokj/ip[master]","outputFolderName":"jonyeokj_ip_master"},{"location":{"location":"https://github.com/lipwei1808/ip.git","repoName":"ip","organization":"lipwei1808","domainName":"github"},"branch":"master","displayName":"lipwei1808/ip[master]","outputFolderName":"lipwei1808_ip_master"},{"location":{"location":"https://github.com/zhanyang01/ip.git","repoName":"ip","organization":"zhanyang01","domainName":"github"},"branch":"master","displayName":"zhanyang01/ip[master]","outputFolderName":"zhanyang01_ip_master"},{"location":{"location":"https://github.com/EricXiong420/ip.git","repoName":"ip","organization":"EricXiong420","domainName":"github"},"branch":"master","displayName":"EricXiong420/ip[master]","outputFolderName":"EricXiong420_ip_master"},{"location":{"location":"https://github.com/sp4ce-cowboy/ip.git","repoName":"ip","organization":"sp4ce-cowboy","domainName":"github"},"branch":"master","displayName":"sp4ce-cowboy/ip[master]","outputFolderName":"sp4ce-cowboy_ip_master"},{"location":{"location":"https://github.com/ktzy0305/ip.git","repoName":"ip","organization":"ktzy0305","domainName":"github"},"branch":"master","displayName":"ktzy0305/ip[master]","outputFolderName":"ktzy0305_ip_master"},{"location":{"location":"https://github.com/dom-buri/ip.git","repoName":"ip","organization":"dom-buri","domainName":"github"},"branch":"master","displayName":"dom-buri/ip[master]","outputFolderName":"dom-buri_ip_master"},{"location":{"location":"https://github.com/rayshawntan/ip.git","repoName":"ip","organization":"rayshawntan","domainName":"github"},"branch":"master","displayName":"rayshawntan/ip[master]","outputFolderName":"rayshawntan_ip_master"},{"location":{"location":"https://github.com/Seonlo99/ip.git","repoName":"ip","organization":"Seonlo99","domainName":"github"},"branch":"master","displayName":"Seonlo99/ip[master]","outputFolderName":"Seonlo99_ip_master"},{"location":{"location":"https://github.com/woojiahao/ip.git","repoName":"ip","organization":"woojiahao","domainName":"github"},"branch":"master","displayName":"woojiahao/ip[master]","outputFolderName":"woojiahao_ip_master"},{"location":{"location":"https://github.com/Angelyxx/ip.git","repoName":"ip","organization":"Angelyxx","domainName":"github"},"branch":"master","displayName":"Angelyxx/ip[master]","outputFolderName":"Angelyxx_ip_master"},{"location":{"location":"https://github.com/jamz903/ip.git","repoName":"ip","organization":"jamz903","domainName":"github"},"branch":"master","displayName":"jamz903/ip[master]","outputFolderName":"jamz903_ip_master"},{"location":{"location":"https://github.com/Fallman2/ip.git","repoName":"ip","organization":"Fallman2","domainName":"github"},"branch":"master","displayName":"Fallman2/ip[master]","outputFolderName":"Fallman2_ip_master"},{"location":{"location":"https://github.com/jacobcuison/ip.git","repoName":"ip","organization":"jacobcuison","domainName":"github"},"branch":"master","displayName":"jacobcuison/ip[master]","outputFolderName":"jacobcuison_ip_master"},{"location":{"location":"https://github.com/kenvynKwek/ip.git","repoName":"ip","organization":"kenvynKwek","domainName":"github"},"branch":"master","displayName":"kenvynKwek/ip[master]","outputFolderName":"kenvynKwek_ip_master"},{"location":{"location":"https://github.com/kokrui/ip.git","repoName":"ip","organization":"kokrui","domainName":"github"},"branch":"master","displayName":"kokrui/ip[master]","outputFolderName":"kokrui_ip_master"},{"location":{"location":"https://github.com/ncmathan/ip.git","repoName":"ip","organization":"ncmathan","domainName":"github"},"branch":"master","displayName":"ncmathan/ip[master]","outputFolderName":"ncmathan_ip_master"},{"location":{"location":"https://github.com/xCOLOURx/ip.git","repoName":"ip","organization":"xCOLOURx","domainName":"github"},"branch":"master","displayName":"xCOLOURx/ip[master]","outputFolderName":"xCOLOURx_ip_master"},{"location":{"location":"https://github.com/zhyuhan/ip.git","repoName":"ip","organization":"zhyuhan","domainName":"github"},"branch":"master","displayName":"zhyuhan/ip[master]","outputFolderName":"zhyuhan_ip_master"},{"location":{"location":"https://github.com/ceilingFan456/ip.git","repoName":"ip","organization":"ceilingFan456","domainName":"github"},"branch":"master","displayName":"ceilingFan456/ip[master]","outputFolderName":"ceilingFan456_ip_master"},{"location":{"location":"https://github.com/chuababyy/ip.git","repoName":"ip","organization":"chuababyy","domainName":"github"},"branch":"master","displayName":"chuababyy/ip[master]","outputFolderName":"chuababyy_ip_master"},{"location":{"location":"https://github.com/rocketninja7/ip.git","repoName":"ip","organization":"rocketninja7","domainName":"github"},"branch":"master","displayName":"rocketninja7/ip[master]","outputFolderName":"rocketninja7_ip_master"},{"location":{"location":"https://github.com/marquestye/ip.git","repoName":"ip","organization":"marquestye","domainName":"github"},"branch":"master","displayName":"marquestye/ip[master]","outputFolderName":"marquestye_ip_master"},{"location":{"location":"https://github.com/ruiyangzh/ip.git","repoName":"ip","organization":"ruiyangzh","domainName":"github"},"branch":"master","displayName":"ruiyangzh/ip[master]","outputFolderName":"ruiyangzh_ip_master"},{"location":{"location":"https://github.com/derekjxtan/ip.git","repoName":"ip","organization":"derekjxtan","domainName":"github"},"branch":"master","displayName":"derekjxtan/ip[master]","outputFolderName":"derekjxtan_ip_master"},{"location":{"location":"https://github.com/mounilsankar/ip.git","repoName":"ip","organization":"mounilsankar","domainName":"github"},"branch":"master","displayName":"mounilsankar/ip[master]","outputFolderName":"mounilsankar_ip_master"},{"location":{"location":"https://github.com/wj331/ip.git","repoName":"ip","organization":"wj331","domainName":"github"},"branch":"master","displayName":"wj331/ip[master]","outputFolderName":"wj331_ip_master"},{"location":{"location":"https://github.com/JasonLCY-Temp/ip.git","repoName":"ip","organization":"JasonLCY-Temp","domainName":"github"},"branch":"master","displayName":"JasonLCY-Temp/ip[master]","outputFolderName":"JasonLCY-Temp_ip_master"},{"location":{"location":"https://github.com/lawruixi/ip.git","repoName":"ip","organization":"lawruixi","domainName":"github"},"branch":"master","displayName":"lawruixi/ip[master]","outputFolderName":"lawruixi_ip_master"},{"location":{"location":"https://github.com/wxwern/ip.git","repoName":"ip","organization":"wxwern","domainName":"github"},"branch":"master","displayName":"wxwern/ip[master]","outputFolderName":"wxwern_ip_master"},{"location":{"location":"https://github.com/zekone/ip.git","repoName":"ip","organization":"zekone","domainName":"github"},"branch":"master","displayName":"zekone/ip[master]","outputFolderName":"zekone_ip_master"},{"location":{"location":"https://github.com/wamps-jp/ip.git","repoName":"ip","organization":"wamps-jp","domainName":"github"},"branch":"master","displayName":"wamps-jp/ip[master]","outputFolderName":"wamps-jp_ip_master"},{"location":{"location":"https://github.com/saltedfishxx/ip.git","repoName":"ip","organization":"saltedfishxx","domainName":"github"},"branch":"master","displayName":"saltedfishxx/ip[master]","outputFolderName":"saltedfishxx_ip_master"},{"location":{"location":"https://github.com/winson8222/ip.git","repoName":"ip","organization":"winson8222","domainName":"github"},"branch":"master","displayName":"winson8222/ip[master]","outputFolderName":"winson8222_ip_master"},{"location":{"location":"https://github.com/brandon-nam/ip.git","repoName":"ip","organization":"brandon-nam","domainName":"github"},"branch":"master","displayName":"brandon-nam/ip[master]","outputFolderName":"brandon-nam_ip_master"},{"location":{"location":"https://github.com/p-xp/ip.git","repoName":"ip","organization":"p-xp","domainName":"github"},"branch":"master","displayName":"p-xp/ip[master]","outputFolderName":"p-xp_ip_master"},{"location":{"location":"https://github.com/WeeMingQing/ip.git","repoName":"ip","organization":"WeeMingQing","domainName":"github"},"branch":"master","displayName":"WeeMingQing/ip[master]","outputFolderName":"WeeMingQing_ip_master"},{"location":{"location":"https://github.com/ScarletBlanks/ip.git","repoName":"ip","organization":"ScarletBlanks","domainName":"github"},"branch":"master","displayName":"ScarletBlanks/ip[master]","outputFolderName":"ScarletBlanks_ip_master"},{"location":{"location":"https://github.com/seraphimstreets/ip.git","repoName":"ip","organization":"seraphimstreets","domainName":"github"},"branch":"master","displayName":"seraphimstreets/ip[master]","outputFolderName":"seraphimstreets_ip_master"},{"location":{"location":"https://github.com/devanshubisht/ip.git","repoName":"ip","organization":"devanshubisht","domainName":"github"},"branch":"master","displayName":"devanshubisht/ip[master]","outputFolderName":"devanshubisht_ip_master"},{"location":{"location":"https://github.com/Zjinnnn/ip.git","repoName":"ip","organization":"Zjinnnn","domainName":"github"},"branch":"master","displayName":"Zjinnnn/ip[master]","outputFolderName":"Zjinnnn_ip_master"},{"location":{"location":"https://github.com/brendanneojw/ip.git","repoName":"ip","organization":"brendanneojw","domainName":"github"},"branch":"master","displayName":"brendanneojw/ip[master]","outputFolderName":"brendanneojw_ip_master"},{"location":{"location":"https://github.com/aexolate/ip.git","repoName":"ip","organization":"aexolate","domainName":"github"},"branch":"master","displayName":"aexolate/ip[master]","outputFolderName":"aexolate_ip_master"},{"location":{"location":"https://github.com/techjay-c/ip.git","repoName":"ip","organization":"techjay-c","domainName":"github"},"branch":"master","displayName":"techjay-c/ip[master]","outputFolderName":"techjay-c_ip_master"},{"location":{"location":"https://github.com/SynapseProgramming/ip.git","repoName":"ip","organization":"SynapseProgramming","domainName":"github"},"branch":"master","displayName":"SynapseProgramming/ip[master]","outputFolderName":"SynapseProgramming_ip_master"},{"location":{"location":"https://github.com/TyrusLye/ip.git","repoName":"ip","organization":"TyrusLye","domainName":"github"},"branch":"master","displayName":"TyrusLye/ip[master]","outputFolderName":"TyrusLye_ip_master"},{"location":{"location":"https://github.com/RB9823/ip.git","repoName":"ip","organization":"RB9823","domainName":"github"},"branch":"master","displayName":"RB9823/ip[master]","outputFolderName":"RB9823_ip_master"},{"location":{"location":"https://github.com/jean-cq/ip.git","repoName":"ip","organization":"jean-cq","domainName":"github"},"branch":"master","displayName":"jean-cq/ip[master]","outputFolderName":"jean-cq_ip_master"},{"location":{"location":"https://github.com/Bearypop/ip.git","repoName":"ip","organization":"Bearypop","domainName":"github"},"branch":"master","displayName":"Bearypop/ip[master]","outputFolderName":"Bearypop_ip_master"},{"location":{"location":"https://github.com/andytoh1/ip.git","repoName":"ip","organization":"andytoh1","domainName":"github"},"branch":"master","displayName":"andytoh1/ip[master]","outputFolderName":"andytoh1_ip_master"},{"location":{"location":"https://github.com/siqirua/ip.git","repoName":"ip","organization":"siqirua","domainName":"github"},"branch":"master","displayName":"siqirua/ip[master]","outputFolderName":"siqirua_ip_master"},{"location":{"location":"https://github.com/amosting/ip.git","repoName":"ip","organization":"amosting","domainName":"github"},"branch":"master","displayName":"amosting/ip[master]","outputFolderName":"amosting_ip_master"},{"location":{"location":"https://github.com/JizhuoChen/ip.git","repoName":"ip","organization":"JizhuoChen","domainName":"github"},"branch":"master","displayName":"JizhuoChen/ip[master]","outputFolderName":"JizhuoChen_ip_master"},{"location":{"location":"https://github.com/Tang-Moyan/ip.git","repoName":"ip","organization":"Tang-Moyan","domainName":"github"},"branch":"master","displayName":"Tang-Moyan/ip[master]","outputFolderName":"Tang-Moyan_ip_master"},{"location":{"location":"https://github.com/aliciamichellew/ip.git","repoName":"ip","organization":"aliciamichellew","domainName":"github"},"branch":"master","displayName":"aliciamichellew/ip[master]","outputFolderName":"aliciamichellew_ip_master"},{"location":{"location":"https://github.com/KamiliArsyad/ip.git","repoName":"ip","organization":"KamiliArsyad","domainName":"github"},"branch":"master","displayName":"KamiliArsyad/ip[master]","outputFolderName":"KamiliArsyad_ip_master"},{"location":{"location":"https://github.com/dishenggg/ip.git","repoName":"ip","organization":"dishenggg","domainName":"github"},"branch":"master","displayName":"dishenggg/ip[master]","outputFolderName":"dishenggg_ip_master"},{"location":{"location":"https://github.com/Nixx162/ip.git","repoName":"ip","organization":"Nixx162","domainName":"github"},"branch":"master","displayName":"Nixx162/ip[master]","outputFolderName":"Nixx162_ip_master"},{"location":{"location":"https://github.com/Leb14/ip.git","repoName":"ip","organization":"Leb14","domainName":"github"},"branch":"master","displayName":"Leb14/ip[master]","outputFolderName":"Leb14_ip_master"},{"location":{"location":"https://github.com/Heran9/ip.git","repoName":"ip","organization":"Heran9","domainName":"github"},"branch":"master","displayName":"Heran9/ip[master]","outputFolderName":"Heran9_ip_master"},{"location":{"location":"https://github.com/FerdiHS/ip.git","repoName":"ip","organization":"FerdiHS","domainName":"github"},"branch":"master","displayName":"FerdiHS/ip[master]","outputFolderName":"FerdiHS_ip_master"},{"location":{"location":"https://github.com/StevenLiudw/ip.git","repoName":"ip","organization":"StevenLiudw","domainName":"github"},"branch":"master","displayName":"StevenLiudw/ip[master]","outputFolderName":"StevenLiudw_ip_master"},{"location":{"location":"https://github.com/InfiBeyond/ip.git","repoName":"ip","organization":"InfiBeyond","domainName":"github"},"branch":"master","displayName":"InfiBeyond/ip[master]","outputFolderName":"InfiBeyond_ip_master"},{"location":{"location":"https://github.com/s0ngyang/ip.git","repoName":"ip","organization":"s0ngyang","domainName":"github"},"branch":"master","displayName":"s0ngyang/ip[master]","outputFolderName":"s0ngyang_ip_master"},{"location":{"location":"https://github.com/ivyy-poison/ip.git","repoName":"ip","organization":"ivyy-poison","domainName":"github"},"branch":"master","displayName":"ivyy-poison/ip[master]","outputFolderName":"ivyy-poison_ip_master"},{"location":{"location":"https://github.com/yytan25/ip.git","repoName":"ip","organization":"yytan25","domainName":"github"},"branch":"master","displayName":"yytan25/ip[master]","outputFolderName":"yytan25_ip_master"},{"location":{"location":"https://github.com/tjch-o/ip.git","repoName":"ip","organization":"tjch-o","domainName":"github"},"branch":"master","displayName":"tjch-o/ip[master]","outputFolderName":"tjch-o_ip_master"},{"location":{"location":"https://github.com/jedkohjk/ip.git","repoName":"ip","organization":"jedkohjk","domainName":"github"},"branch":"master","displayName":"jedkohjk/ip[master]","outputFolderName":"jedkohjk_ip_master"},{"location":{"location":"https://github.com/raynertjx/ip.git","repoName":"ip","organization":"raynertjx","domainName":"github"},"branch":"master","displayName":"raynertjx/ip[master]","outputFolderName":"raynertjx_ip_master"},{"location":{"location":"https://github.com/cmHuang777/ip.git","repoName":"ip","organization":"cmHuang777","domainName":"github"},"branch":"master","displayName":"cmHuang777/ip[master]","outputFolderName":"cmHuang777_ip_master"},{"location":{"location":"https://github.com/wui-hong/ip.git","repoName":"ip","organization":"wui-hong","domainName":"github"},"branch":"master","displayName":"wui-hong/ip[master]","outputFolderName":"wui-hong_ip_master"},{"location":{"location":"https://github.com/PohSayKeong/ip.git","repoName":"ip","organization":"PohSayKeong","domainName":"github"},"branch":"master","displayName":"PohSayKeong/ip[master]","outputFolderName":"PohSayKeong_ip_master"},{"location":{"location":"https://github.com/lsyurea/ip.git","repoName":"ip","organization":"lsyurea","domainName":"github"},"branch":"master","displayName":"lsyurea/ip[master]","outputFolderName":"lsyurea_ip_master"},{"location":{"location":"https://github.com/ong-wei-hong/ip.git","repoName":"ip","organization":"ong-wei-hong","domainName":"github"},"branch":"master","displayName":"ong-wei-hong/ip[master]","outputFolderName":"ong-wei-hong_ip_master"},{"location":{"location":"https://github.com/asdfghjkxd/ip.git","repoName":"ip","organization":"asdfghjkxd","domainName":"github"},"branch":"master","displayName":"asdfghjkxd/ip[master]","outputFolderName":"asdfghjkxd_ip_master"},{"location":{"location":"https://github.com/GSgiansen/ip.git","repoName":"ip","organization":"GSgiansen","domainName":"github"},"branch":"master","displayName":"GSgiansen/ip[master]","outputFolderName":"GSgiansen_ip_master"},{"location":{"location":"https://github.com/syamfarh/ip.git","repoName":"ip","organization":"syamfarh","domainName":"github"},"branch":"master","displayName":"syamfarh/ip[master]","outputFolderName":"syamfarh_ip_master"},{"location":{"location":"https://github.com/PetrichorPrecipice/ip.git","repoName":"ip","organization":"PetrichorPrecipice","domainName":"github"},"branch":"master","displayName":"PetrichorPrecipice/ip[master]","outputFolderName":"PetrichorPrecipice_ip_master"},{"location":{"location":"https://github.com/ngeeyonglim/ip.git","repoName":"ip","organization":"ngeeyonglim","domainName":"github"},"branch":"master","displayName":"ngeeyonglim/ip[master]","outputFolderName":"ngeeyonglim_ip_master"},{"location":{"location":"https://github.com/ivanleekk/ip.git","repoName":"ip","organization":"ivanleekk","domainName":"github"},"branch":"master","displayName":"ivanleekk/ip[master]","outputFolderName":"ivanleekk_ip_master"},{"location":{"location":"https://github.com/ryanozx/ip.git","repoName":"ip","organization":"ryanozx","domainName":"github"},"branch":"master","displayName":"ryanozx/ip[master]","outputFolderName":"ryanozx_ip_master"},{"location":{"location":"https://github.com/Jweewee/ip.git","repoName":"ip","organization":"Jweewee","domainName":"github"},"branch":"master","displayName":"Jweewee/ip[master]","outputFolderName":"Jweewee_ip_master"},{"location":{"location":"https://github.com/supermii2/ip.git","repoName":"ip","organization":"supermii2","domainName":"github"},"branch":"master","displayName":"supermii2/ip[master]","outputFolderName":"supermii2_ip_master"},{"location":{"location":"https://github.com/bkjwjason/ip.git","repoName":"ip","organization":"bkjwjason","domainName":"github"},"branch":"master","displayName":"bkjwjason/ip[master]","outputFolderName":"bkjwjason_ip_master"},{"location":{"location":"https://github.com/Sasmik23/ip.git","repoName":"ip","organization":"Sasmik23","domainName":"github"},"branch":"master","displayName":"Sasmik23/ip[master]","outputFolderName":"Sasmik23_ip_master"},{"location":{"location":"https://github.com/nathanielcalimag/ip.git","repoName":"ip","organization":"nathanielcalimag","domainName":"github"},"branch":"master","displayName":"nathanielcalimag/ip[master]","outputFolderName":"nathanielcalimag_ip_master"},{"location":{"location":"https://github.com/AlagappanRa/ip.git","repoName":"ip","organization":"AlagappanRa","domainName":"github"},"branch":"master","displayName":"AlagappanRa/ip[master]","outputFolderName":"AlagappanRa_ip_master"},{"location":{"location":"https://github.com/McNaBry/ip.git","repoName":"ip","organization":"McNaBry","domainName":"github"},"branch":"master","displayName":"McNaBry/ip[master]","outputFolderName":"McNaBry_ip_master"},{"location":{"location":"https://github.com/phiphi-tan/ip.git","repoName":"ip","organization":"phiphi-tan","domainName":"github"},"branch":"master","displayName":"phiphi-tan/ip[master]","outputFolderName":"phiphi-tan_ip_master"},{"location":{"location":"https://github.com/LicongHuang/ip.git","repoName":"ip","organization":"LicongHuang","domainName":"github"},"branch":"master","displayName":"LicongHuang/ip[master]","outputFolderName":"LicongHuang_ip_master"},{"location":{"location":"https://github.com/tanshiyu1999/ip.git","repoName":"ip","organization":"tanshiyu1999","domainName":"github"},"branch":"master","displayName":"tanshiyu1999/ip[master]","outputFolderName":"tanshiyu1999_ip_master"},{"location":{"location":"https://github.com/raydenlim/ip.git","repoName":"ip","organization":"raydenlim","domainName":"github"},"branch":"master","displayName":"raydenlim/ip[master]","outputFolderName":"raydenlim_ip_master"},{"location":{"location":"https://github.com/jianyangg/ip.git","repoName":"ip","organization":"jianyangg","domainName":"github"},"branch":"master","displayName":"jianyangg/ip[master]","outputFolderName":"jianyangg_ip_master"},{"location":{"location":"https://github.com/rionshocker/ip.git","repoName":"ip","organization":"rionshocker","domainName":"github"},"branch":"master","displayName":"rionshocker/ip[master]","outputFolderName":"rionshocker_ip_master"},{"location":{"location":"https://github.com/conradsoon/ip.git","repoName":"ip","organization":"conradsoon","domainName":"github"},"branch":"master","displayName":"conradsoon/ip[master]","outputFolderName":"conradsoon_ip_master"},{"location":{"location":"https://github.com/Jonyxzx/ip.git","repoName":"ip","organization":"Jonyxzx","domainName":"github"},"branch":"master","displayName":"Jonyxzx/ip[master]","outputFolderName":"Jonyxzx_ip_master"},{"location":{"location":"https://github.com/euchangxian/ip.git","repoName":"ip","organization":"euchangxian","domainName":"github"},"branch":"master","displayName":"euchangxian/ip[master]","outputFolderName":"euchangxian_ip_master"},{"location":{"location":"https://github.com/teoks0199/ip.git","repoName":"ip","organization":"teoks0199","domainName":"github"},"branch":"master","displayName":"teoks0199/ip[master]","outputFolderName":"teoks0199_ip_master"},{"location":{"location":"https://github.com/HollaG/ip.git","repoName":"ip","organization":"HollaG","domainName":"github"},"branch":"master","displayName":"HollaG/ip[master]","outputFolderName":"HollaG_ip_master"},{"location":{"location":"https://github.com/leezhengjing/ip.git","repoName":"ip","organization":"leezhengjing","domainName":"github"},"branch":"master","displayName":"leezhengjing/ip[master]","outputFolderName":"leezhengjing_ip_master"},{"location":{"location":"https://github.com/timleow/ip.git","repoName":"ip","organization":"timleow","domainName":"github"},"branch":"master","displayName":"timleow/ip[master]","outputFolderName":"timleow_ip_master"},{"location":{"location":"https://github.com/jacksonyuan256/ip.git","repoName":"ip","organization":"jacksonyuan256","domainName":"github"},"branch":"master","displayName":"jacksonyuan256/ip[master]","outputFolderName":"jacksonyuan256_ip_master"},{"location":{"location":"https://github.com/victorlaiyeeteng/ip.git","repoName":"ip","organization":"victorlaiyeeteng","domainName":"github"},"branch":"master","displayName":"victorlaiyeeteng/ip[master]","outputFolderName":"victorlaiyeeteng_ip_master"},{"location":{"location":"https://github.com/prawnzyy/ip.git","repoName":"ip","organization":"prawnzyy","domainName":"github"},"branch":"master","displayName":"prawnzyy/ip[master]","outputFolderName":"prawnzyy_ip_master"},{"location":{"location":"https://github.com/ryanongwx/ip.git","repoName":"ip","organization":"ryanongwx","domainName":"github"},"branch":"master","displayName":"ryanongwx/ip[master]","outputFolderName":"ryanongwx_ip_master"},{"location":{"location":"https://github.com/tohpinren/ip.git","repoName":"ip","organization":"tohpinren","domainName":"github"},"branch":"master","displayName":"tohpinren/ip[master]","outputFolderName":"tohpinren_ip_master"},{"location":{"location":"https://github.com/DeltonCheng/ip.git","repoName":"ip","organization":"DeltonCheng","domainName":"github"},"branch":"master","displayName":"DeltonCheng/ip[master]","outputFolderName":"DeltonCheng_ip_master"},{"location":{"location":"https://github.com/leontan2/ip.git","repoName":"ip","organization":"leontan2","domainName":"github"},"branch":"master","displayName":"leontan2/ip[master]","outputFolderName":"leontan2_ip_master"},{"location":{"location":"https://github.com/alvinlim277/ip.git","repoName":"ip","organization":"alvinlim277","domainName":"github"},"branch":"master","displayName":"alvinlim277/ip[master]","outputFolderName":"alvinlim277_ip_master"},{"location":{"location":"https://github.com/lshaoqin/ip.git","repoName":"ip","organization":"lshaoqin","domainName":"github"},"branch":"master","displayName":"lshaoqin/ip[master]","outputFolderName":"lshaoqin_ip_master"},{"location":{"location":"https://github.com/ChongWeiJie29/ip.git","repoName":"ip","organization":"ChongWeiJie29","domainName":"github"},"branch":"master","displayName":"ChongWeiJie29/ip[master]","outputFolderName":"ChongWeiJie29_ip_master"},{"location":{"location":"https://github.com/zhonghan721/ip.git","repoName":"ip","organization":"zhonghan721","domainName":"github"},"branch":"master","displayName":"zhonghan721/ip[master]","outputFolderName":"zhonghan721_ip_master"},{"location":{"location":"https://github.com/teozhengyang/ip.git","repoName":"ip","organization":"teozhengyang","domainName":"github"},"branch":"master","displayName":"teozhengyang/ip[master]","outputFolderName":"teozhengyang_ip_master"},{"location":{"location":"https://github.com/garylow2001/ip.git","repoName":"ip","organization":"garylow2001","domainName":"github"},"branch":"master","displayName":"garylow2001/ip[master]","outputFolderName":"garylow2001_ip_master"},{"location":{"location":"https://github.com/Cleon2/ip.git","repoName":"ip","organization":"Cleon2","domainName":"github"},"branch":"master","displayName":"Cleon2/ip[master]","outputFolderName":"Cleon2_ip_master"},{"location":{"location":"https://github.com/limzhenwy/ip.git","repoName":"ip","organization":"limzhenwy","domainName":"github"},"branch":"master","displayName":"limzhenwy/ip[master]","outputFolderName":"limzhenwy_ip_master"},{"location":{"location":"https://github.com/ItsTYtan/ip.git","repoName":"ip","organization":"ItsTYtan","domainName":"github"},"branch":"master","displayName":"ItsTYtan/ip[master]","outputFolderName":"ItsTYtan_ip_master"},{"location":{"location":"https://github.com/owenyeo/ip.git","repoName":"ip","organization":"owenyeo","domainName":"github"},"branch":"master","displayName":"owenyeo/ip[master]","outputFolderName":"owenyeo_ip_master"},{"location":{"location":"https://github.com/jonasongg/ip.git","repoName":"ip","organization":"jonasongg","domainName":"github"},"branch":"master","displayName":"jonasongg/ip[master]","outputFolderName":"jonasongg_ip_master"},{"location":{"location":"https://github.com/Ruizhi2001/ip.git","repoName":"ip","organization":"Ruizhi2001","domainName":"github"},"branch":"master","displayName":"Ruizhi2001/ip[master]","outputFolderName":"Ruizhi2001_ip_master"},{"location":{"location":"https://github.com/Dioclei/ip.git","repoName":"ip","organization":"Dioclei","domainName":"github"},"branch":"master","displayName":"Dioclei/ip[master]","outputFolderName":"Dioclei_ip_master"},{"location":{"location":"https://github.com/bobscodedump/ip.git","repoName":"ip","organization":"bobscodedump","domainName":"github"},"branch":"master","displayName":"bobscodedump/ip[master]","outputFolderName":"bobscodedump_ip_master"},{"location":{"location":"https://github.com/andrefoo/ip.git","repoName":"ip","organization":"andrefoo","domainName":"github"},"branch":"master","displayName":"andrefoo/ip[master]","outputFolderName":"andrefoo_ip_master"},{"location":{"location":"https://github.com/Bombbird2001/ip.git","repoName":"ip","organization":"Bombbird2001","domainName":"github"},"branch":"master","displayName":"Bombbird2001/ip[master]","outputFolderName":"Bombbird2001_ip_master"},{"location":{"location":"https://github.com/chewjh1234/ip.git","repoName":"ip","organization":"chewjh1234","domainName":"github"},"branch":"master","displayName":"chewjh1234/ip[master]","outputFolderName":"chewjh1234_ip_master"},{"location":{"location":"https://github.com/dloh2236/ip.git","repoName":"ip","organization":"dloh2236","domainName":"github"},"branch":"master","displayName":"dloh2236/ip[master]","outputFolderName":"dloh2236_ip_master"},{"location":{"location":"https://github.com/chew01/ip.git","repoName":"ip","organization":"chew01","domainName":"github"},"branch":"master","displayName":"chew01/ip[master]","outputFolderName":"chew01_ip_master"},{"location":{"location":"https://github.com/trgao/ip.git","repoName":"ip","organization":"trgao","domainName":"github"},"branch":"master","displayName":"trgao/ip[master]","outputFolderName":"trgao_ip_master"},{"location":{"location":"https://github.com/richiehx/ip.git","repoName":"ip","organization":"richiehx","domainName":"github"},"branch":"master","displayName":"richiehx/ip[master]","outputFolderName":"richiehx_ip_master"},{"location":{"location":"https://github.com/LoMaply/ip.git","repoName":"ip","organization":"LoMaply","domainName":"github"},"branch":"master","displayName":"LoMaply/ip[master]","outputFolderName":"LoMaply_ip_master"},{"location":{"location":"https://github.com/Originalidk/ip.git","repoName":"ip","organization":"Originalidk","domainName":"github"},"branch":"master","displayName":"Originalidk/ip[master]","outputFolderName":"Originalidk_ip_master"},{"location":{"location":"https://github.com/kiatkat/ip.git","repoName":"ip","organization":"kiatkat","domainName":"github"},"branch":"master","displayName":"kiatkat/ip[master]","outputFolderName":"kiatkat_ip_master"},{"location":{"location":"https://github.com/juliusgambe/ip.git","repoName":"ip","organization":"juliusgambe","domainName":"github"},"branch":"master","displayName":"juliusgambe/ip[master]","outputFolderName":"juliusgambe_ip_master"},{"location":{"location":"https://github.com/jiakai-17/ip.git","repoName":"ip","organization":"jiakai-17","domainName":"github"},"branch":"master","displayName":"jiakai-17/ip[master]","outputFolderName":"jiakai-17_ip_master"},{"location":{"location":"https://github.com/nikele2001/ip.git","repoName":"ip","organization":"nikele2001","domainName":"github"},"branch":"master","displayName":"nikele2001/ip[master]","outputFolderName":"nikele2001_ip_master"},{"location":{"location":"https://github.com/jylow/ip.git","repoName":"ip","organization":"jylow","domainName":"github"},"branch":"master","displayName":"jylow/ip[master]","outputFolderName":"jylow_ip_master"},{"location":{"location":"https://github.com/jx124/ip.git","repoName":"ip","organization":"jx124","domainName":"github"},"branch":"master","displayName":"jx124/ip[master]","outputFolderName":"jx124_ip_master"},{"location":{"location":"https://github.com/Kb-Tay/ip.git","repoName":"ip","organization":"Kb-Tay","domainName":"github"},"branch":"master","displayName":"Kb-Tay/ip[master]","outputFolderName":"Kb-Tay_ip_master"},{"location":{"location":"https://github.com/jinyuan0425/ip.git","repoName":"ip","organization":"jinyuan0425","domainName":"github"},"branch":"master","displayName":"jinyuan0425/ip[master]","outputFolderName":"jinyuan0425_ip_master"},{"location":{"location":"https://github.com/darrentfy/ip.git","repoName":"ip","organization":"darrentfy","domainName":"github"},"branch":"master","displayName":"darrentfy/ip[master]","outputFolderName":"darrentfy_ip_master"},{"location":{"location":"https://github.com/HEEaZ/ip.git","repoName":"ip","organization":"HEEaZ","domainName":"github"},"branch":"master","displayName":"HEEaZ/ip[master]","outputFolderName":"HEEaZ_ip_master"},{"location":{"location":"https://github.com/ji-just-ji/ip.git","repoName":"ip","organization":"ji-just-ji","domainName":"github"},"branch":"master","displayName":"ji-just-ji/ip[master]","outputFolderName":"ji-just-ji_ip_master"},{"location":{"location":"https://github.com/simbayippy/ip.git","repoName":"ip","organization":"simbayippy","domainName":"github"},"branch":"master","displayName":"simbayippy/ip[master]","outputFolderName":"simbayippy_ip_master"},{"location":{"location":"https://github.com/teozern1/ip.git","repoName":"ip","organization":"teozern1","domainName":"github"},"branch":"master","displayName":"teozern1/ip[master]","outputFolderName":"teozern1_ip_master"},{"location":{"location":"https://github.com/brein62/ip.git","repoName":"ip","organization":"brein62","domainName":"github"},"branch":"master","displayName":"brein62/ip[master]","outputFolderName":"brein62_ip_master"},{"location":{"location":"https://github.com/awhb/ip.git","repoName":"ip","organization":"awhb","domainName":"github"},"branch":"master","displayName":"awhb/ip[master]","outputFolderName":"awhb_ip_master"},{"location":{"location":"https://github.com/Mahidharah/ip.git","repoName":"ip","organization":"Mahidharah","domainName":"github"},"branch":"master","displayName":"Mahidharah/ip[master]","outputFolderName":"Mahidharah_ip_master"},{"location":{"location":"https://github.com/timetraveller-123/ip.git","repoName":"ip","organization":"timetraveller-123","domainName":"github"},"branch":"master","displayName":"timetraveller-123/ip[master]","outputFolderName":"timetraveller-123_ip_master"},{"location":{"location":"https://github.com/ElginTZM/ip.git","repoName":"ip","organization":"ElginTZM","domainName":"github"},"branch":"master","displayName":"ElginTZM/ip[master]","outputFolderName":"ElginTZM_ip_master"},{"location":{"location":"https://github.com/ryamgoh/ip.git","repoName":"ip","organization":"ryamgoh","domainName":"github"},"branch":"master","displayName":"ryamgoh/ip[master]","outputFolderName":"ryamgoh_ip_master"},{"location":{"location":"https://github.com/Blizzeracz/ip.git","repoName":"ip","organization":"Blizzeracz","domainName":"github"},"branch":"master","displayName":"Blizzeracz/ip[master]","outputFolderName":"Blizzeracz_ip_master"},{"location":{"location":"https://github.com/kiwibang/ip.git","repoName":"ip","organization":"kiwibang","domainName":"github"},"branch":"master","displayName":"kiwibang/ip[master]","outputFolderName":"kiwibang_ip_master"},{"location":{"location":"https://github.com/redtailedfox/ip.git","repoName":"ip","organization":"redtailedfox","domainName":"github"},"branch":"master","displayName":"redtailedfox/ip[master]","outputFolderName":"redtailedfox_ip_master"},{"location":{"location":"https://github.com/lamchenghou/ip.git","repoName":"ip","organization":"lamchenghou","domainName":"github"},"branch":"master","displayName":"lamchenghou/ip[master]","outputFolderName":"lamchenghou_ip_master"},{"location":{"location":"https://github.com/gongg21/ip.git","repoName":"ip","organization":"gongg21","domainName":"github"},"branch":"master","displayName":"gongg21/ip[master]","outputFolderName":"gongg21_ip_master"},{"location":{"location":"https://github.com/CJ-Lee01/ip.git","repoName":"ip","organization":"CJ-Lee01","domainName":"github"},"branch":"master","displayName":"CJ-Lee01/ip[master]","outputFolderName":"CJ-Lee01_ip_master"},{"location":{"location":"https://github.com/Sheeepen/ip.git","repoName":"ip","organization":"Sheeepen","domainName":"github"},"branch":"master","displayName":"Sheeepen/ip[master]","outputFolderName":"Sheeepen_ip_master"},{"location":{"location":"https://github.com/AaronJT1/ip.git","repoName":"ip","organization":"AaronJT1","domainName":"github"},"branch":"master","displayName":"AaronJT1/ip[master]","outputFolderName":"AaronJT1_ip_master"},{"location":{"location":"https://github.com/Respirayson/ip.git","repoName":"ip","organization":"Respirayson","domainName":"github"},"branch":"master","displayName":"Respirayson/ip[master]","outputFolderName":"Respirayson_ip_master"},{"location":{"location":"https://github.com/dickongwd/ip.git","repoName":"ip","organization":"dickongwd","domainName":"github"},"branch":"master","displayName":"dickongwd/ip[master]","outputFolderName":"dickongwd_ip_master"},{"location":{"location":"https://github.com/nicholascher/ip.git","repoName":"ip","organization":"nicholascher","domainName":"github"},"branch":"master","displayName":"nicholascher/ip[master]","outputFolderName":"nicholascher_ip_master"},{"location":{"location":"https://github.com/et-irl/ip.git","repoName":"ip","organization":"et-irl","domainName":"github"},"branch":"master","displayName":"et-irl/ip[master]","outputFolderName":"et-irl_ip_master"},{"location":{"location":"https://github.com/aslam341/ip.git","repoName":"ip","organization":"aslam341","domainName":"github"},"branch":"master","displayName":"aslam341/ip[master]","outputFolderName":"aslam341_ip_master"},{"location":{"location":"https://github.com/seantehds/ip.git","repoName":"ip","organization":"seantehds","domainName":"github"},"branch":"master","displayName":"seantehds/ip[master]","outputFolderName":"seantehds_ip_master"},{"location":{"location":"https://github.com/jianrong7/ip.git","repoName":"ip","organization":"jianrong7","domainName":"github"},"branch":"master","displayName":"jianrong7/ip[master]","outputFolderName":"jianrong7_ip_master"},{"location":{"location":"https://github.com/TeeRenJing/ip.git","repoName":"ip","organization":"TeeRenJing","domainName":"github"},"branch":"master","displayName":"TeeRenJing/ip[master]","outputFolderName":"TeeRenJing_ip_master"},{"location":{"location":"https://github.com/RoeReRe/ip.git","repoName":"ip","organization":"RoeReRe","domainName":"github"},"branch":"master","displayName":"RoeReRe/ip[master]","outputFolderName":"RoeReRe_ip_master"},{"location":{"location":"https://github.com/zsh-eng/ip.git","repoName":"ip","organization":"zsh-eng","domainName":"github"},"branch":"master","displayName":"zsh-eng/ip[master]","outputFolderName":"zsh-eng_ip_master"},{"location":{"location":"https://github.com/seanpzk/ip.git","repoName":"ip","organization":"seanpzk","domainName":"github"},"branch":"master","displayName":"seanpzk/ip[master]","outputFolderName":"seanpzk_ip_master"},{"location":{"location":"https://github.com/quzhetao01/ip.git","repoName":"ip","organization":"quzhetao01","domainName":"github"},"branch":"master","displayName":"quzhetao01/ip[master]","outputFolderName":"quzhetao01_ip_master"},{"location":{"location":"https://github.com/joel-foo/ip.git","repoName":"ip","organization":"joel-foo","domainName":"github"},"branch":"master","displayName":"joel-foo/ip[master]","outputFolderName":"joel-foo_ip_master"},{"location":{"location":"https://github.com/markgcera/ip.git","repoName":"ip","organization":"markgcera","domainName":"github"},"branch":"master","displayName":"markgcera/ip[master]","outputFolderName":"markgcera_ip_master"},{"location":{"location":"https://github.com/dylkaw/ip.git","repoName":"ip","organization":"dylkaw","domainName":"github"},"branch":"master","displayName":"dylkaw/ip[master]","outputFolderName":"dylkaw_ip_master"},{"location":{"location":"https://github.com/SelwynAng/ip.git","repoName":"ip","organization":"SelwynAng","domainName":"github"},"branch":"master","displayName":"SelwynAng/ip[master]","outputFolderName":"SelwynAng_ip_master"},{"location":{"location":"https://github.com/jinyang628/ip.git","repoName":"ip","organization":"jinyang628","domainName":"github"},"branch":"master","displayName":"jinyang628/ip[master]","outputFolderName":"jinyang628_ip_master"},{"location":{"location":"https://github.com/matochichap/ip.git","repoName":"ip","organization":"matochichap","domainName":"github"},"branch":"master","displayName":"matochichap/ip[master]","outputFolderName":"matochichap_ip_master"},{"location":{"location":"https://github.com/sk2001git/ip.git","repoName":"ip","organization":"sk2001git","domainName":"github"},"branch":"master","displayName":"sk2001git/ip[master]","outputFolderName":"sk2001git_ip_master"},{"location":{"location":"https://github.com/jason-raiin/ip.git","repoName":"ip","organization":"jason-raiin","domainName":"github"},"branch":"master","displayName":"jason-raiin/ip[master]","outputFolderName":"jason-raiin_ip_master"},{"location":{"location":"https://github.com/Sebtey/ip.git","repoName":"ip","organization":"Sebtey","domainName":"github"},"branch":"master","displayName":"Sebtey/ip[master]","outputFolderName":"Sebtey_ip_master"},{"location":{"location":"https://github.com/Jweng88/ip.git","repoName":"ip","organization":"Jweng88","domainName":"github"},"branch":"master","displayName":"Jweng88/ip[master]","outputFolderName":"Jweng88_ip_master"},{"location":{"location":"https://github.com/billieboy7/ip.git","repoName":"ip","organization":"billieboy7","domainName":"github"},"branch":"master","displayName":"billieboy7/ip[master]","outputFolderName":"billieboy7_ip_master"},{"location":{"location":"https://github.com/ldinghan/ip.git","repoName":"ip","organization":"ldinghan","domainName":"github"},"branch":"master","displayName":"ldinghan/ip[master]","outputFolderName":"ldinghan_ip_master"},{"location":{"location":"https://github.com/anthonytamzil/ip.git","repoName":"ip","organization":"anthonytamzil","domainName":"github"},"branch":"master","displayName":"anthonytamzil/ip[master]","outputFolderName":"anthonytamzil_ip_master"},{"location":{"location":"https://github.com/ryantzr1/ip.git","repoName":"ip","organization":"ryantzr1","domainName":"github"},"branch":"master","displayName":"ryantzr1/ip[master]","outputFolderName":"ryantzr1_ip_master"},{"location":{"location":"https://github.com/shuyangk/ip.git","repoName":"ip","organization":"shuyangk","domainName":"github"},"branch":"master","displayName":"shuyangk/ip[master]","outputFolderName":"shuyangk_ip_master"},{"location":{"location":"https://github.com/seewhyjay/ip.git","repoName":"ip","organization":"seewhyjay","domainName":"github"},"branch":"master","displayName":"seewhyjay/ip[master]","outputFolderName":"seewhyjay_ip_master"},{"location":{"location":"https://github.com/waseemingly/ip.git","repoName":"ip","organization":"waseemingly","domainName":"github"},"branch":"master","displayName":"waseemingly/ip[master]","outputFolderName":"waseemingly_ip_master"},{"location":{"location":"https://github.com/DistractedCat/ip.git","repoName":"ip","organization":"DistractedCat","domainName":"github"},"branch":"master","displayName":"DistractedCat/ip[master]","outputFolderName":"DistractedCat_ip_master"},{"location":{"location":"https://github.com/geraldngjx/ip.git","repoName":"ip","organization":"geraldngjx","domainName":"github"},"branch":"master","displayName":"geraldngjx/ip[master]","outputFolderName":"geraldngjx_ip_master"},{"location":{"location":"https://github.com/tayian/ip.git","repoName":"ip","organization":"tayian","domainName":"github"},"branch":"master","displayName":"tayian/ip[master]","outputFolderName":"tayian_ip_master"},{"location":{"location":"https://github.com/AlfredBeNoel/ip.git","repoName":"ip","organization":"AlfredBeNoel","domainName":"github"},"branch":"master","displayName":"AlfredBeNoel/ip[master]","outputFolderName":"AlfredBeNoel_ip_master"},{"location":{"location":"https://github.com/Chen1x/ip.git","repoName":"ip","organization":"Chen1x","domainName":"github"},"branch":"master","displayName":"Chen1x/ip[master]","outputFolderName":"Chen1x_ip_master"},{"location":{"location":"https://github.com/juzzztinsoong/ip.git","repoName":"ip","organization":"juzzztinsoong","domainName":"github"},"branch":"master","displayName":"juzzztinsoong/ip[master]","outputFolderName":"juzzztinsoong_ip_master"},{"location":{"location":"https://github.com/lambraydon/ip.git","repoName":"ip","organization":"lambraydon","domainName":"github"},"branch":"master","displayName":"lambraydon/ip[master]","outputFolderName":"lambraydon_ip_master"},{"location":{"location":"https://github.com/lilozz2/ip.git","repoName":"ip","organization":"lilozz2","domainName":"github"},"branch":"master","displayName":"lilozz2/ip[master]","outputFolderName":"lilozz2_ip_master"},{"location":{"location":"https://github.com/tyouwei/ip.git","repoName":"ip","organization":"tyouwei","domainName":"github"},"branch":"master","displayName":"tyouwei/ip[master]","outputFolderName":"tyouwei_ip_master"},{"location":{"location":"https://github.com/Kailash201/ip.git","repoName":"ip","organization":"Kailash201","domainName":"github"},"branch":"master","displayName":"Kailash201/ip[master]","outputFolderName":"Kailash201_ip_master"},{"location":{"location":"https://github.com/tjingsheng/ip.git","repoName":"ip","organization":"tjingsheng","domainName":"github"},"branch":"master","displayName":"tjingsheng/ip[master]","outputFolderName":"tjingsheng_ip_master"},{"location":{"location":"https://github.com/pangyyen/ip.git","repoName":"ip","organization":"pangyyen","domainName":"github"},"branch":"master","displayName":"pangyyen/ip[master]","outputFolderName":"pangyyen_ip_master"},{"location":{"location":"https://github.com/Khaleelur-Rahman/ip.git","repoName":"ip","organization":"Khaleelur-Rahman","domainName":"github"},"branch":"master","displayName":"Khaleelur-Rahman/ip[master]","outputFolderName":"Khaleelur-Rahman_ip_master"},{"location":{"location":"https://github.com/erohsikivar/ip.git","repoName":"ip","organization":"erohsikivar","domainName":"github"},"branch":"master","displayName":"erohsikivar/ip[master]","outputFolderName":"erohsikivar_ip_master"},{"location":{"location":"https://github.com/shishirbychapur/ip.git","repoName":"ip","organization":"shishirbychapur","domainName":"github"},"branch":"master","displayName":"shishirbychapur/ip[master]","outputFolderName":"shishirbychapur_ip_master"},{"location":{"location":"https://github.com/Badatprogrammiing/ip.git","repoName":"ip","organization":"Badatprogrammiing","domainName":"github"},"branch":"master","displayName":"Badatprogrammiing/ip[master]","outputFolderName":"Badatprogrammiing_ip_master"},{"location":{"location":"https://github.com/ravern/ip.git","repoName":"ip","organization":"ravern","domainName":"github"},"branch":"master","displayName":"ravern/ip[master]","outputFolderName":"ravern_ip_master"},{"location":{"location":"https://github.com/B-enguin/ip.git","repoName":"ip","organization":"B-enguin","domainName":"github"},"branch":"master","displayName":"B-enguin/ip[master]","outputFolderName":"B-enguin_ip_master"},{"location":{"location":"https://github.com/AlyssaPng/ip.git","repoName":"ip","organization":"AlyssaPng","domainName":"github"},"branch":"master","displayName":"AlyssaPng/ip[master]","outputFolderName":"AlyssaPng_ip_master"},{"location":{"location":"https://github.com/flexibo/ip.git","repoName":"ip","organization":"flexibo","domainName":"github"},"branch":"master","displayName":"flexibo/ip[master]","outputFolderName":"flexibo_ip_master"},{"location":{"location":"https://github.com/lordidiot/ip.git","repoName":"ip","organization":"lordidiot","domainName":"github"},"branch":"master","displayName":"lordidiot/ip[master]","outputFolderName":"lordidiot_ip_master"},{"location":{"location":"https://github.com/vansh284/ip.git","repoName":"ip","organization":"vansh284","domainName":"github"},"branch":"master","displayName":"vansh284/ip[master]","outputFolderName":"vansh284_ip_master"},{"location":{"location":"https://github.com/samuelim01/ip.git","repoName":"ip","organization":"samuelim01","domainName":"github"},"branch":"master","displayName":"samuelim01/ip[master]","outputFolderName":"samuelim01_ip_master"},{"location":{"location":"https://github.com/WZWren/ip.git","repoName":"ip","organization":"WZWren","domainName":"github"},"branch":"master","displayName":"WZWren/ip[master]","outputFolderName":"WZWren_ip_master"},{"location":{"location":"https://github.com/cxo05/ip.git","repoName":"ip","organization":"cxo05","domainName":"github"},"branch":"master","displayName":"cxo05/ip[master]","outputFolderName":"cxo05_ip_master"},{"location":{"location":"https://github.com/sudarshan2401/ip.git","repoName":"ip","organization":"sudarshan2401","domainName":"github"},"branch":"master","displayName":"sudarshan2401/ip[master]","outputFolderName":"sudarshan2401_ip_master"},{"location":{"location":"https://github.com/jingyu987/ip.git","repoName":"ip","organization":"jingyu987","domainName":"github"},"branch":"master","displayName":"jingyu987/ip[master]","outputFolderName":"jingyu987_ip_master"},{"location":{"location":"https://github.com/H1410101/ip.git","repoName":"ip","organization":"H1410101","domainName":"github"},"branch":"master","displayName":"H1410101/ip[master]","outputFolderName":"H1410101_ip_master"},{"location":{"location":"https://github.com/MagnificentCreature/ip.git","repoName":"ip","organization":"MagnificentCreature","domainName":"github"},"branch":"master","displayName":"MagnificentCreature/ip[master]","outputFolderName":"MagnificentCreature_ip_master"},{"location":{"location":"https://github.com/shyanyong/ip.git","repoName":"ip","organization":"shyanyong","domainName":"github"},"branch":"master","displayName":"shyanyong/ip[master]","outputFolderName":"shyanyong_ip_master"},{"location":{"location":"https://github.com/peasantbird/ip.git","repoName":"ip","organization":"peasantbird","domainName":"github"},"branch":"master","displayName":"peasantbird/ip[master]","outputFolderName":"peasantbird_ip_master"},{"location":{"location":"https://github.com/tllshan/ip.git","repoName":"ip","organization":"tllshan","domainName":"github"},"branch":"master","displayName":"tllshan/ip[master]","outputFolderName":"tllshan_ip_master"},{"location":{"location":"https://github.com/sushiyade/ip.git","repoName":"ip","organization":"sushiyade","domainName":"github"},"branch":"master","displayName":"sushiyade/ip[master]","outputFolderName":"sushiyade_ip_master"},{"location":{"location":"https://github.com/iyioon/ip.git","repoName":"ip","organization":"iyioon","domainName":"github"},"branch":"master","displayName":"iyioon/ip[master]","outputFolderName":"iyioon_ip_master"},{"location":{"location":"https://github.com/shashahchk/ip.git","repoName":"ip","organization":"shashahchk","domainName":"github"},"branch":"master","displayName":"shashahchk/ip[master]","outputFolderName":"shashahchk_ip_master"},{"location":{"location":"https://github.com/Chandan8186/ip.git","repoName":"ip","organization":"Chandan8186","domainName":"github"},"branch":"master","displayName":"Chandan8186/ip[master]","outputFolderName":"Chandan8186_ip_master"},{"location":{"location":"https://github.com/wesho1107/ip.git","repoName":"ip","organization":"wesho1107","domainName":"github"},"branch":"master","displayName":"wesho1107/ip[master]","outputFolderName":"wesho1107_ip_master"},{"location":{"location":"https://github.com/tim-pipi/ip.git","repoName":"ip","organization":"tim-pipi","domainName":"github"},"branch":"master","displayName":"tim-pipi/ip[master]","outputFolderName":"tim-pipi_ip_master"},{"location":{"location":"https://github.com/emzm2023/ip.git","repoName":"ip","organization":"emzm2023","domainName":"github"},"branch":"master","displayName":"emzm2023/ip[master]","outputFolderName":"emzm2023_ip_master"},{"location":{"location":"https://github.com/dlathyun/ip.git","repoName":"ip","organization":"dlathyun","domainName":"github"},"branch":"master","displayName":"dlathyun/ip[master]","outputFolderName":"dlathyun_ip_master"},{"location":{"location":"https://github.com/tanboonkhong/ip.git","repoName":"ip","organization":"tanboonkhong","domainName":"github"},"branch":"master","displayName":"tanboonkhong/ip[master]","outputFolderName":"tanboonkhong_ip_master"},{"location":{"location":"https://github.com/joeng03/ip.git","repoName":"ip","organization":"joeng03","domainName":"github"},"branch":"master","displayName":"joeng03/ip[master]","outputFolderName":"joeng03_ip_master"},{"location":{"location":"https://github.com/VN-Hao/ip.git","repoName":"ip","organization":"VN-Hao","domainName":"github"},"branch":"master","displayName":"VN-Hao/ip[master]","outputFolderName":"VN-Hao_ip_master"},{"location":{"location":"https://github.com/NgChunMan/ip.git","repoName":"ip","organization":"NgChunMan","domainName":"github"},"branch":"master","displayName":"NgChunMan/ip[master]","outputFolderName":"NgChunMan_ip_master"},{"location":{"location":"https://github.com/TiwKangXu/ip.git","repoName":"ip","organization":"TiwKangXu","domainName":"github"},"branch":"master","displayName":"TiwKangXu/ip[master]","outputFolderName":"TiwKangXu_ip_master"},{"location":{"location":"https://github.com/josepholim/ip.git","repoName":"ip","organization":"josepholim","domainName":"github"},"branch":"master","displayName":"josepholim/ip[master]","outputFolderName":"josepholim_ip_master"},{"location":{"location":"https://github.com/dinde2004/ip.git","repoName":"ip","organization":"dinde2004","domainName":"github"},"branch":"master","displayName":"dinde2004/ip[master]","outputFolderName":"dinde2004_ip_master"},{"location":{"location":"https://github.com/yucongkoo/ip.git","repoName":"ip","organization":"yucongkoo","domainName":"github"},"branch":"master","displayName":"yucongkoo/ip[master]","outputFolderName":"yucongkoo_ip_master"},{"location":{"location":"https://github.com/TohLiYuan/ip.git","repoName":"ip","organization":"TohLiYuan","domainName":"github"},"branch":"master","displayName":"TohLiYuan/ip[master]","outputFolderName":"TohLiYuan_ip_master"},{"location":{"location":"https://github.com/NereusWB922/ip.git","repoName":"ip","organization":"NereusWB922","domainName":"github"},"branch":"master","displayName":"NereusWB922/ip[master]","outputFolderName":"NereusWB922_ip_master"},{"location":{"location":"https://github.com/ph-nathan/ip.git","repoName":"ip","organization":"ph-nathan","domainName":"github"},"branch":"master","displayName":"ph-nathan/ip[master]","outputFolderName":"ph-nathan_ip_master"},{"location":{"location":"https://github.com/antonTan96/ip.git","repoName":"ip","organization":"antonTan96","domainName":"github"},"branch":"master","displayName":"antonTan96/ip[master]","outputFolderName":"antonTan96_ip_master"},{"location":{"location":"https://github.com/WinstonLeonard/ip.git","repoName":"ip","organization":"WinstonLeonard","domainName":"github"},"branch":"master","displayName":"WinstonLeonard/ip[master]","outputFolderName":"WinstonLeonard_ip_master"},{"location":{"location":"https://github.com/TehOPanas/ip.git","repoName":"ip","organization":"TehOPanas","domainName":"github"},"branch":"master","displayName":"TehOPanas/ip[master]","outputFolderName":"TehOPanas_ip_master"},{"location":{"location":"https://github.com/marioalvaro/ip.git","repoName":"ip","organization":"marioalvaro","domainName":"github"},"branch":"master","displayName":"marioalvaro/ip[master]","outputFolderName":"marioalvaro_ip_master"},{"location":{"location":"https://github.com/LINCHENYU2030S/ip.git","repoName":"ip","organization":"LINCHENYU2030S","domainName":"github"},"branch":"master","displayName":"LINCHENYU2030S/ip[master]","outputFolderName":"LINCHENYU2030S_ip_master"},{"location":{"location":"https://github.com/LamJiuFong/ip.git","repoName":"ip","organization":"LamJiuFong","domainName":"github"},"branch":"master","displayName":"LamJiuFong/ip[master]","outputFolderName":"LamJiuFong_ip_master"},{"location":{"location":"https://github.com/AndrewJanong/ip.git","repoName":"ip","organization":"AndrewJanong","domainName":"github"},"branch":"master","displayName":"AndrewJanong/ip[master]","outputFolderName":"AndrewJanong_ip_master"},{"location":{"location":"https://github.com/songfangyl/ip.git","repoName":"ip","organization":"songfangyl","domainName":"github"},"branch":"master","displayName":"songfangyl/ip[master]","outputFolderName":"songfangyl_ip_master"},{"location":{"location":"https://github.com/AriellaCallista/ip.git","repoName":"ip","organization":"AriellaCallista","domainName":"github"},"branch":"master","displayName":"AriellaCallista/ip[master]","outputFolderName":"AriellaCallista_ip_master"},{"location":{"location":"https://github.com/KamJiaYue/ip.git","repoName":"ip","organization":"KamJiaYue","domainName":"github"},"branch":"master","displayName":"KamJiaYue/ip[master]","outputFolderName":"KamJiaYue_ip_master"},{"location":{"location":"https://github.com/feifeiraindrops/ip.git","repoName":"ip","organization":"feifeiraindrops","domainName":"github"},"branch":"master","displayName":"feifeiraindrops/ip[master]","outputFolderName":"feifeiraindrops_ip_master"},{"location":{"location":"https://github.com/czhiruo/ip.git","repoName":"ip","organization":"czhiruo","domainName":"github"},"branch":"master","displayName":"czhiruo/ip[master]","outputFolderName":"czhiruo_ip_master"},{"location":{"location":"https://github.com/butteredyakiimo/ip.git","repoName":"ip","organization":"butteredyakiimo","domainName":"github"},"branch":"master","displayName":"butteredyakiimo/ip[master]","outputFolderName":"butteredyakiimo_ip_master"},{"location":{"location":"https://github.com/RiyaMehta2211/ip.git","repoName":"ip","organization":"RiyaMehta2211","domainName":"github"},"branch":"master","displayName":"RiyaMehta2211/ip[master]","outputFolderName":"RiyaMehta2211_ip_master"},{"location":{"location":"https://github.com/beatricecst/ip.git","repoName":"ip","organization":"beatricecst","domainName":"github"},"branch":"master","displayName":"beatricecst/ip[master]","outputFolderName":"beatricecst_ip_master"},{"location":{"location":"https://github.com/maypfv/ip.git","repoName":"ip","organization":"maypfv","domainName":"github"},"branch":"master","displayName":"maypfv/ip[master]","outputFolderName":"maypfv_ip_master"},{"location":{"location":"https://github.com/pra-navi/ip.git","repoName":"ip","organization":"pra-navi","domainName":"github"},"branch":"master","displayName":"pra-navi/ip[master]","outputFolderName":"pra-navi_ip_master"},{"location":{"location":"https://github.com/xxiaoweii/ip.git","repoName":"ip","organization":"xxiaoweii","domainName":"github"},"branch":"master","displayName":"xxiaoweii/ip[master]","outputFolderName":"xxiaoweii_ip_master"},{"location":{"location":"https://github.com/qyaner/ip.git","repoName":"ip","organization":"qyaner","domainName":"github"},"branch":"master","displayName":"qyaner/ip[master]","outputFolderName":"qyaner_ip_master"},{"location":{"location":"https://github.com/qz1004/ip.git","repoName":"ip","organization":"qz1004","domainName":"github"},"branch":"master","displayName":"qz1004/ip[master]","outputFolderName":"qz1004_ip_master"},{"location":{"location":"https://github.com/miljyy/ip.git","repoName":"ip","organization":"miljyy","domainName":"github"},"branch":"master","displayName":"miljyy/ip[master]","outputFolderName":"miljyy_ip_master"},{"location":{"location":"https://github.com/yihfei/ip.git","repoName":"ip","organization":"yihfei","domainName":"github"},"branch":"master","displayName":"yihfei/ip[master]","outputFolderName":"yihfei_ip_master"},{"location":{"location":"https://github.com/Gabriel4357/ip.git","repoName":"ip","organization":"Gabriel4357","domainName":"github"},"branch":"master","displayName":"Gabriel4357/ip[master]","outputFolderName":"Gabriel4357_ip_master"},{"location":{"location":"https://github.com/saraozn/ip.git","repoName":"ip","organization":"saraozn","domainName":"github"},"branch":"master","displayName":"saraozn/ip[master]","outputFolderName":"saraozn_ip_master"},{"location":{"location":"https://github.com/JeremyYong128/ip.git","repoName":"ip","organization":"JeremyYong128","domainName":"github"},"branch":"master","displayName":"JeremyYong128/ip[master]","outputFolderName":"JeremyYong128_ip_master"},{"location":{"location":"https://github.com/samuelmui8/ip.git","repoName":"ip","organization":"samuelmui8","domainName":"github"},"branch":"master","displayName":"samuelmui8/ip[master]","outputFolderName":"samuelmui8_ip_master"},{"location":{"location":"https://github.com/elaineshijie/ip.git","repoName":"ip","organization":"elaineshijie","domainName":"github"},"branch":"master","displayName":"elaineshijie/ip[master]","outputFolderName":"elaineshijie_ip_master"},{"location":{"location":"https://github.com/zhengyup/ip.git","repoName":"ip","organization":"zhengyup","domainName":"github"},"branch":"master","displayName":"zhengyup/ip[master]","outputFolderName":"zhengyup_ip_master"},{"location":{"location":"https://github.com/ruishanteo/ip.git","repoName":"ip","organization":"ruishanteo","domainName":"github"},"branch":"master","displayName":"ruishanteo/ip[master]","outputFolderName":"ruishanteo_ip_master"},{"location":{"location":"https://github.com/lynnlow175/ip.git","repoName":"ip","organization":"lynnlow175","domainName":"github"},"branch":"master","displayName":"lynnlow175/ip[master]","outputFolderName":"lynnlow175_ip_master"},{"location":{"location":"https://github.com/kohkaijie/ip.git","repoName":"ip","organization":"kohkaijie","domainName":"github"},"branch":"master","displayName":"kohkaijie/ip[master]","outputFolderName":"kohkaijie_ip_master"},{"location":{"location":"https://github.com/CelestineTan03/ip.git","repoName":"ip","organization":"CelestineTan03","domainName":"github"},"branch":"master","displayName":"CelestineTan03/ip[master]","outputFolderName":"CelestineTan03_ip_master"},{"location":{"location":"https://github.com/PearlynnT/ip.git","repoName":"ip","organization":"PearlynnT","domainName":"github"},"branch":"master","displayName":"PearlynnT/ip[master]","outputFolderName":"PearlynnT_ip_master"},{"location":{"location":"https://github.com/Elijah5399/ip.git","repoName":"ip","organization":"Elijah5399","domainName":"github"},"branch":"master","displayName":"Elijah5399/ip[master]","outputFolderName":"Elijah5399_ip_master"},{"location":{"location":"https://github.com/nicleongyj/ip.git","repoName":"ip","organization":"nicleongyj","domainName":"github"},"branch":"master","displayName":"nicleongyj/ip[master]","outputFolderName":"nicleongyj_ip_master"},{"location":{"location":"https://github.com/AnnabelTing/ip.git","repoName":"ip","organization":"AnnabelTing","domainName":"github"},"branch":"master","displayName":"AnnabelTing/ip[master]","outputFolderName":"AnnabelTing_ip_master"},{"location":{"location":"https://github.com/jrchoo/ip.git","repoName":"ip","organization":"jrchoo","domainName":"github"},"branch":"master","displayName":"jrchoo/ip[master]","outputFolderName":"jrchoo_ip_master"},{"location":{"location":"https://github.com/wujy28/ip.git","repoName":"ip","organization":"wujy28","domainName":"github"},"branch":"master","displayName":"wujy28/ip[master]","outputFolderName":"wujy28_ip_master"},{"location":{"location":"https://github.com/Nauxe/ip.git","repoName":"ip","organization":"Nauxe","domainName":"github"},"branch":"master","displayName":"Nauxe/ip[master]","outputFolderName":"Nauxe_ip_master"},{"location":{"location":"https://github.com/yyyaohhh/ip.git","repoName":"ip","organization":"yyyaohhh","domainName":"github"},"branch":"master","displayName":"yyyaohhh/ip[master]","outputFolderName":"yyyaohhh_ip_master"},{"location":{"location":"https://github.com/xenosf/ip.git","repoName":"ip","organization":"xenosf","domainName":"github"},"branch":"master","displayName":"xenosf/ip[master]","outputFolderName":"xenosf_ip_master"},{"location":{"location":"https://github.com/WinSheng1/ip.git","repoName":"ip","organization":"WinSheng1","domainName":"github"},"branch":"master","displayName":"WinSheng1/ip[master]","outputFolderName":"WinSheng1_ip_master"},{"location":{"location":"https://github.com/nreHieW/ip.git","repoName":"ip","organization":"nreHieW","domainName":"github"},"branch":"master","displayName":"nreHieW/ip[master]","outputFolderName":"nreHieW_ip_master"},{"location":{"location":"https://github.com/peiran18/ip.git","repoName":"ip","organization":"peiran18","domainName":"github"},"branch":"master","displayName":"peiran18/ip[master]","outputFolderName":"peiran18_ip_master"},{"location":{"location":"https://github.com/cheeggered/ip.git","repoName":"ip","organization":"cheeggered","domainName":"github"},"branch":"master","displayName":"cheeggered/ip[master]","outputFolderName":"cheeggered_ip_master"},{"location":{"location":"https://github.com/GohTengFong/ip.git","repoName":"ip","organization":"GohTengFong","domainName":"github"},"branch":"master","displayName":"GohTengFong/ip[master]","outputFolderName":"GohTengFong_ip_master"},{"location":{"location":"https://github.com/jibtaf/ip.git","repoName":"ip","organization":"jibtaf","domainName":"github"},"branch":"master","displayName":"jibtaf/ip[master]","outputFolderName":"jibtaf_ip_master"},{"location":{"location":"https://github.com/bhnuka/ip.git","repoName":"ip","organization":"bhnuka","domainName":"github"},"branch":"master","displayName":"bhnuka/ip[master]","outputFolderName":"bhnuka_ip_master"},{"location":{"location":"https://github.com/laurenlim2112/ip.git","repoName":"ip","organization":"laurenlim2112","domainName":"github"},"branch":"master","displayName":"laurenlim2112/ip[master]","outputFolderName":"laurenlim2112_ip_master"},{"location":{"location":"https://github.com/howenc/ip.git","repoName":"ip","organization":"howenc","domainName":"github"},"branch":"master","displayName":"howenc/ip[master]","outputFolderName":"howenc_ip_master"},{"location":{"location":"https://github.com/Kokseng1/ip.git","repoName":"ip","organization":"Kokseng1","domainName":"github"},"branch":"master","displayName":"Kokseng1/ip[master]","outputFolderName":"Kokseng1_ip_master"},{"location":{"location":"https://github.com/yiwen101/ip.git","repoName":"ip","organization":"yiwen101","domainName":"github"},"branch":"master","displayName":"yiwen101/ip[master]","outputFolderName":"yiwen101_ip_master"},{"location":{"location":"https://github.com/Cikguseven/ip.git","repoName":"ip","organization":"Cikguseven","domainName":"github"},"branch":"master","displayName":"Cikguseven/ip[master]","outputFolderName":"Cikguseven_ip_master"},{"location":{"location":"https://github.com/javinchua/ip.git","repoName":"ip","organization":"javinchua","domainName":"github"},"branch":"master","displayName":"javinchua/ip[master]","outputFolderName":"javinchua_ip_master"},{"location":{"location":"https://github.com/frrrrry/ip.git","repoName":"ip","organization":"frrrrry","domainName":"github"},"branch":"master","displayName":"frrrrry/ip[master]","outputFolderName":"frrrrry_ip_master"},{"location":{"location":"https://github.com/YeoBohShin/ip.git","repoName":"ip","organization":"YeoBohShin","domainName":"github"},"branch":"master","displayName":"YeoBohShin/ip[master]","outputFolderName":"YeoBohShin_ip_master"},{"location":{"location":"https://github.com/yongning0310/ip.git","repoName":"ip","organization":"yongning0310","domainName":"github"},"branch":"master","displayName":"yongning0310/ip[master]","outputFolderName":"yongning0310_ip_master"},{"location":{"location":"https://github.com/SimWPEric/ip.git","repoName":"ip","organization":"SimWPEric","domainName":"github"},"branch":"master","displayName":"SimWPEric/ip[master]","outputFolderName":"SimWPEric_ip_master"},{"location":{"location":"https://github.com/sopa301/ip.git","repoName":"ip","organization":"sopa301","domainName":"github"},"branch":"master","displayName":"sopa301/ip[master]","outputFolderName":"sopa301_ip_master"},{"location":{"location":"https://github.com/nananakx-x/ip.git","repoName":"ip","organization":"nananakx-x","domainName":"github"},"branch":"master","displayName":"nananakx-x/ip[master]","outputFolderName":"nananakx-x_ip_master"},{"location":{"location":"https://github.com/LuoZYi/ip.git","repoName":"ip","organization":"LuoZYi","domainName":"github"},"branch":"master","displayName":"LuoZYi/ip[master]","outputFolderName":"LuoZYi_ip_master"},{"location":{"location":"https://github.com/LinWanLeii/ip.git","repoName":"ip","organization":"LinWanLeii","domainName":"github"},"branch":"master","displayName":"LinWanLeii/ip[master]","outputFolderName":"LinWanLeii_ip_master"},{"location":{"location":"https://github.com/mingyuanc/ip.git","repoName":"ip","organization":"mingyuanc","domainName":"github"},"branch":"master","displayName":"mingyuanc/ip[master]","outputFolderName":"mingyuanc_ip_master"},{"location":{"location":"https://github.com/chonguschonguschongus/ip.git","repoName":"ip","organization":"chonguschonguschongus","domainName":"github"},"branch":"master","displayName":"chonguschonguschongus/ip[master]","outputFolderName":"chonguschonguschongus_ip_master"},{"location":{"location":"https://github.com/yanghengtang/ip.git","repoName":"ip","organization":"yanghengtang","domainName":"github"},"branch":"master","displayName":"yanghengtang/ip[master]","outputFolderName":"yanghengtang_ip_master"},{"location":{"location":"https://github.com/victorpengmx/ip.git","repoName":"ip","organization":"victorpengmx","domainName":"github"},"branch":"master","displayName":"victorpengmx/ip[master]","outputFolderName":"victorpengmx_ip_master"},{"location":{"location":"https://github.com/kanna-1/ip.git","repoName":"ip","organization":"kanna-1","domainName":"github"},"branch":"master","displayName":"kanna-1/ip[master]","outputFolderName":"kanna-1_ip_master"},{"location":{"location":"https://github.com/ncduy0303/ip.git","repoName":"ip","organization":"ncduy0303","domainName":"github"},"branch":"master","displayName":"ncduy0303/ip[master]","outputFolderName":"ncduy0303_ip_master"},{"location":{"location":"https://github.com/jannnice/ip.git","repoName":"ip","organization":"jannnice","domainName":"github"},"branch":"master","displayName":"jannnice/ip[master]","outputFolderName":"jannnice_ip_master"},{"location":{"location":"https://github.com/itssisi/ip.git","repoName":"ip","organization":"itssisi","domainName":"github"},"branch":"master","displayName":"itssisi/ip[master]","outputFolderName":"itssisi_ip_master"},{"location":{"location":"https://github.com/freddychenyouren2/ip.git","repoName":"ip","organization":"freddychenyouren2","domainName":"github"},"branch":"master","displayName":"freddychenyouren2/ip[master]","outputFolderName":"freddychenyouren2_ip_master"},{"location":{"location":"https://github.com/Vanessamae23/ip.git","repoName":"ip","organization":"Vanessamae23","domainName":"github"},"branch":"master","displayName":"Vanessamae23/ip[master]","outputFolderName":"Vanessamae23_ip_master"},{"location":{"location":"https://github.com/cbj252/ip.git","repoName":"ip","organization":"cbj252","domainName":"github"},"branch":"master","displayName":"cbj252/ip[master]","outputFolderName":"cbj252_ip_master"},{"location":{"location":"https://github.com/freshcabbage123/ip.git","repoName":"ip","organization":"freshcabbage123","domainName":"github"},"branch":"master","displayName":"freshcabbage123/ip[master]","outputFolderName":"freshcabbage123_ip_master"},{"location":{"location":"https://github.com/thienmy0/ip.git","repoName":"ip","organization":"thienmy0","domainName":"github"},"branch":"master","displayName":"thienmy0/ip[master]","outputFolderName":"thienmy0_ip_master"},{"location":{"location":"https://github.com/glenngnng/ip.git","repoName":"ip","organization":"glenngnng","domainName":"github"},"branch":"master","displayName":"glenngnng/ip[master]","outputFolderName":"glenngnng_ip_master"},{"location":{"location":"https://github.com/Darren159/ip.git","repoName":"ip","organization":"Darren159","domainName":"github"},"branch":"master","displayName":"Darren159/ip[master]","outputFolderName":"Darren159_ip_master"},{"location":{"location":"https://github.com/J-hta-n/ip.git","repoName":"ip","organization":"J-hta-n","domainName":"github"},"branch":"master","displayName":"J-hta-n/ip[master]","outputFolderName":"J-hta-n_ip_master"},{"location":{"location":"https://github.com/evanyan13/ip.git","repoName":"ip","organization":"evanyan13","domainName":"github"},"branch":"master","displayName":"evanyan13/ip[master]","outputFolderName":"evanyan13_ip_master"},{"location":{"location":"https://github.com/tanveersingh10/ip.git","repoName":"ip","organization":"tanveersingh10","domainName":"github"},"branch":"master","displayName":"tanveersingh10/ip[master]","outputFolderName":"tanveersingh10_ip_master"},{"location":{"location":"https://github.com/neyapraveen/ip.git","repoName":"ip","organization":"neyapraveen","domainName":"github"},"branch":"master","displayName":"neyapraveen/ip[master]","outputFolderName":"neyapraveen_ip_master"},{"location":{"location":"https://github.com/weeweh/ip.git","repoName":"ip","organization":"weeweh","domainName":"github"},"branch":"master","displayName":"weeweh/ip[master]","outputFolderName":"weeweh_ip_master"},{"location":{"location":"https://github.com/HugeNoob/ip.git","repoName":"ip","organization":"HugeNoob","domainName":"github"},"branch":"master","displayName":"HugeNoob/ip[master]","outputFolderName":"HugeNoob_ip_master"},{"location":{"location":"https://github.com/wasjoe1/ip.git","repoName":"ip","organization":"wasjoe1","domainName":"github"},"branch":"master","displayName":"wasjoe1/ip[master]","outputFolderName":"wasjoe1_ip_master"},{"location":{"location":"https://github.com/s-kybound/ip.git","repoName":"ip","organization":"s-kybound","domainName":"github"},"branch":"master","displayName":"s-kybound/ip[master]","outputFolderName":"s-kybound_ip_master"},{"location":{"location":"https://github.com/Singa-pirate/ip.git","repoName":"ip","organization":"Singa-pirate","domainName":"github"},"branch":"master","displayName":"Singa-pirate/ip[master]","outputFolderName":"Singa-pirate_ip_master"},{"location":{"location":"https://github.com/wanghejin/ip.git","repoName":"ip","organization":"wanghejin","domainName":"github"},"branch":"master","displayName":"wanghejin/ip[master]","outputFolderName":"wanghejin_ip_master"},{"location":{"location":"https://github.com/yarnmengnus/ip.git","repoName":"ip","organization":"yarnmengnus","domainName":"github"},"branch":"master","displayName":"yarnmengnus/ip[master]","outputFolderName":"yarnmengnus_ip_master"},{"location":{"location":"https://github.com/Kurtyjlee/ip.git","repoName":"ip","organization":"Kurtyjlee","domainName":"github"},"branch":"master","displayName":"Kurtyjlee/ip[master]","outputFolderName":"Kurtyjlee_ip_master"},{"location":{"location":"https://github.com/jellywaiyan/ip.git","repoName":"ip","organization":"jellywaiyan","domainName":"github"},"branch":"master","displayName":"jellywaiyan/ip[master]","outputFolderName":"jellywaiyan_ip_master"},{"location":{"location":"https://github.com/ylyma/ip.git","repoName":"ip","organization":"ylyma","domainName":"github"},"branch":"master","displayName":"ylyma/ip[master]","outputFolderName":"ylyma_ip_master"},{"location":{"location":"https://github.com/revdrag/ip.git","repoName":"ip","organization":"revdrag","domainName":"github"},"branch":"master","displayName":"revdrag/ip[master]","outputFolderName":"revdrag_ip_master"},{"location":{"location":"https://github.com/vijay-shankaranand/ip.git","repoName":"ip","organization":"vijay-shankaranand","domainName":"github"},"branch":"master","displayName":"vijay-shankaranand/ip[master]","outputFolderName":"vijay-shankaranand_ip_master"},{"location":{"location":"https://github.com/lerxuann/ip.git","repoName":"ip","organization":"lerxuann","domainName":"github"},"branch":"master","displayName":"lerxuann/ip[master]","outputFolderName":"lerxuann_ip_master"},{"location":{"location":"https://github.com/yuxunn/ip.git","repoName":"ip","organization":"yuxunn","domainName":"github"},"branch":"master","displayName":"yuxunn/ip[master]","outputFolderName":"yuxunn_ip_master"},{"location":{"location":"https://github.com/zannloo/ip.git","repoName":"ip","organization":"zannloo","domainName":"github"},"branch":"master","displayName":"zannloo/ip[master]","outputFolderName":"zannloo_ip_master"},{"location":{"location":"https://github.com/AryanG01/ip.git","repoName":"ip","organization":"AryanG01","domainName":"github"},"branch":"master","displayName":"AryanG01/ip[master]","outputFolderName":"AryanG01_ip_master"},{"location":{"location":"https://github.com/oeggy03/ip.git","repoName":"ip","organization":"oeggy03","domainName":"github"},"branch":"master","displayName":"oeggy03/ip[master]","outputFolderName":"oeggy03_ip_master"},{"location":{"location":"https://github.com/jeffrey-jian/ip.git","repoName":"ip","organization":"jeffrey-jian","domainName":"github"},"branch":"master","displayName":"jeffrey-jian/ip[master]","outputFolderName":"jeffrey-jian_ip_master"},{"location":{"location":"https://github.com/nicholastng010601/ip.git","repoName":"ip","organization":"nicholastng010601","domainName":"github"},"branch":"master","displayName":"nicholastng010601/ip[master]","outputFolderName":"nicholastng010601_ip_master"},{"location":{"location":"https://github.com/Weiennn/ip.git","repoName":"ip","organization":"Weiennn","domainName":"github"},"branch":"master","displayName":"Weiennn/ip[master]","outputFolderName":"Weiennn_ip_master"},{"location":{"location":"https://github.com/tayruxin/ip.git","repoName":"ip","organization":"tayruxin","domainName":"github"},"branch":"master","displayName":"tayruxin/ip[master]","outputFolderName":"tayruxin_ip_master"},{"location":{"location":"https://github.com/xyT-T/ip.git","repoName":"ip","organization":"xyT-T","domainName":"github"},"branch":"master","displayName":"xyT-T/ip[master]","outputFolderName":"xyT-T_ip_master"},{"location":{"location":"https://github.com/lunaroddity/ip.git","repoName":"ip","organization":"lunaroddity","domainName":"github"},"branch":"master","displayName":"lunaroddity/ip[master]","outputFolderName":"lunaroddity_ip_master"},{"location":{"location":"https://github.com/nabonitasen/ip.git","repoName":"ip","organization":"nabonitasen","domainName":"github"},"branch":"master","displayName":"nabonitasen/ip[master]","outputFolderName":"nabonitasen_ip_master"},{"location":{"location":"https://github.com/inezkok/ip.git","repoName":"ip","organization":"inezkok","domainName":"github"},"branch":"master","displayName":"inezkok/ip[master]","outputFolderName":"inezkok_ip_master"},{"location":{"location":"https://github.com/nknguyenhc/ip.git","repoName":"ip","organization":"nknguyenhc","domainName":"github"},"branch":"master","displayName":"nknguyenhc/ip[master]","outputFolderName":"nknguyenhc_ip_master"},{"location":{"location":"https://github.com/keaganpzh/ip.git","repoName":"ip","organization":"keaganpzh","domainName":"github"},"branch":"master","displayName":"keaganpzh/ip[master]","outputFolderName":"keaganpzh_ip_master"},{"location":{"location":"https://github.com/lululwtv/ip.git","repoName":"ip","organization":"lululwtv","domainName":"github"},"branch":"master","displayName":"lululwtv/ip[master]","outputFolderName":"lululwtv_ip_master"},{"location":{"location":"https://github.com/hcs1203/ip.git","repoName":"ip","organization":"hcs1203","domainName":"github"},"branch":"master","displayName":"hcs1203/ip[master]","outputFolderName":"hcs1203_ip_master"},{"location":{"location":"https://github.com/migfoo02/ip.git","repoName":"ip","organization":"migfoo02","domainName":"github"},"branch":"master","displayName":"migfoo02/ip[master]","outputFolderName":"migfoo02_ip_master"},{"location":{"location":"https://github.com/papataco14/ip.git","repoName":"ip","organization":"papataco14","domainName":"github"},"branch":"master","displayName":"papataco14/ip[master]","outputFolderName":"papataco14_ip_master"},{"location":{"location":"https://github.com/coderhuang559/ip.git","repoName":"ip","organization":"coderhuang559","domainName":"github"},"branch":"master","displayName":"coderhuang559/ip[master]","outputFolderName":"coderhuang559_ip_master"},{"location":{"location":"https://github.com/craigtonlian/ip.git","repoName":"ip","organization":"craigtonlian","domainName":"github"},"branch":"master","displayName":"craigtonlian/ip[master]","outputFolderName":"craigtonlian_ip_master"},{"location":{"location":"https://github.com/adammangzijun/ip.git","repoName":"ip","organization":"adammangzijun","domainName":"github"},"branch":"master","displayName":"adammangzijun/ip[master]","outputFolderName":"adammangzijun_ip_master"},{"location":{"location":"https://github.com/AlainS87/ip.git","repoName":"ip","organization":"AlainS87","domainName":"github"},"branch":"master","displayName":"AlainS87/ip[master]","outputFolderName":"AlainS87_ip_master"},{"location":{"location":"https://github.com/tanyyyming/ip.git","repoName":"ip","organization":"tanyyyming","domainName":"github"},"branch":"master","displayName":"tanyyyming/ip[master]","outputFolderName":"tanyyyming_ip_master"},{"location":{"location":"https://github.com/Saezenn/ip.git","repoName":"ip","organization":"Saezenn","domainName":"github"},"branch":"master","displayName":"Saezenn/ip[master]","outputFolderName":"Saezenn_ip_master"},{"location":{"location":"https://github.com/kayabuttertoastt/ip.git","repoName":"ip","organization":"kayabuttertoastt","domainName":"github"},"branch":"master","displayName":"kayabuttertoastt/ip[master]","outputFolderName":"kayabuttertoastt_ip_master"},{"location":{"location":"https://github.com/limjunxian1/ip.git","repoName":"ip","organization":"limjunxian1","domainName":"github"},"branch":"master","displayName":"limjunxian1/ip[master]","outputFolderName":"limjunxian1_ip_master"},{"location":{"location":"https://github.com/andrechuakj/ip.git","repoName":"ip","organization":"andrechuakj","domainName":"github"},"branch":"master","displayName":"andrechuakj/ip[master]","outputFolderName":"andrechuakj_ip_master"},{"location":{"location":"https://github.com/kwangthiag/ip.git","repoName":"ip","organization":"kwangthiag","domainName":"github"},"branch":"master","displayName":"kwangthiag/ip[master]","outputFolderName":"kwangthiag_ip_master"},{"location":{"location":"https://github.com/ricketytoc/ip.git","repoName":"ip","organization":"ricketytoc","domainName":"github"},"branch":"master","displayName":"ricketytoc/ip[master]","outputFolderName":"ricketytoc_ip_master"},{"location":{"location":"https://github.com/applepiofmyeye/ip.git","repoName":"ip","organization":"applepiofmyeye","domainName":"github"},"branch":"master","displayName":"applepiofmyeye/ip[master]","outputFolderName":"applepiofmyeye_ip_master"},{"location":{"location":"https://github.com/nubnubyas/ip.git","repoName":"ip","organization":"nubnubyas","domainName":"github"},"branch":"master","displayName":"nubnubyas/ip[master]","outputFolderName":"nubnubyas_ip_master"},{"location":{"location":"https://github.com/WeeeHung/ip.git","repoName":"ip","organization":"WeeeHung","domainName":"github"},"branch":"master","displayName":"WeeeHung/ip[master]","outputFolderName":"WeeeHung_ip_master"},{"location":{"location":"https://github.com/Eola-Z/ip.git","repoName":"ip","organization":"Eola-Z","domainName":"github"},"branch":"master","displayName":"Eola-Z/ip[master]","outputFolderName":"Eola-Z_ip_master"},{"location":{"location":"https://github.com/jordankanghm/ip.git","repoName":"ip","organization":"jordankanghm","domainName":"github"},"branch":"master","displayName":"jordankanghm/ip[master]","outputFolderName":"jordankanghm_ip_master"},{"location":{"location":"https://github.com/zacwong2151/ip.git","repoName":"ip","organization":"zacwong2151","domainName":"github"},"branch":"master","displayName":"zacwong2151/ip[master]","outputFolderName":"zacwong2151_ip_master"},{"location":{"location":"https://github.com/m1oojv/ip.git","repoName":"ip","organization":"m1oojv","domainName":"github"},"branch":"master","displayName":"m1oojv/ip[master]","outputFolderName":"m1oojv_ip_master"},{"location":{"location":"https://github.com/JCSnap/ip.git","repoName":"ip","organization":"JCSnap","domainName":"github"},"branch":"master","displayName":"JCSnap/ip[master]","outputFolderName":"JCSnap_ip_master"},{"location":{"location":"https://github.com/Nid21cs/ip.git","repoName":"ip","organization":"Nid21cs","domainName":"github"},"branch":"master","displayName":"Nid21cs/ip[master]","outputFolderName":"Nid21cs_ip_master"},{"location":{"location":"https://github.com/mfjkri/ip.git","repoName":"ip","organization":"mfjkri","domainName":"github"},"branch":"master","displayName":"mfjkri/ip[master]","outputFolderName":"mfjkri_ip_master"},{"location":{"location":"https://github.com/Choonyan02/ip.git","repoName":"ip","organization":"Choonyan02","domainName":"github"},"branch":"master","displayName":"Choonyan02/ip[master]","outputFolderName":"Choonyan02_ip_master"},{"location":{"location":"https://github.com/rayyan35p/ip.git","repoName":"ip","organization":"rayyan35p","domainName":"github"},"branch":"master","displayName":"rayyan35p/ip[master]","outputFolderName":"rayyan35p_ip_master"},{"location":{"location":"https://github.com/dhruvir29/ip.git","repoName":"ip","organization":"dhruvir29","domainName":"github"},"branch":"master","displayName":"dhruvir29/ip[master]","outputFolderName":"dhruvir29_ip_master"},{"location":{"location":"https://github.com/Mohammed-Faizzzz/ip.git","repoName":"ip","organization":"Mohammed-Faizzzz","domainName":"github"},"branch":"master","displayName":"Mohammed-Faizzzz/ip[master]","outputFolderName":"Mohammed-Faizzzz_ip_master"},{"location":{"location":"https://github.com/ruo-x/ip.git","repoName":"ip","organization":"ruo-x","domainName":"github"},"branch":"master","displayName":"ruo-x/ip[master]","outputFolderName":"ruo-x_ip_master"},{"location":{"location":"https://github.com/DonovanJJ/ip.git","repoName":"ip","organization":"DonovanJJ","domainName":"github"},"branch":"master","displayName":"DonovanJJ/ip[master]","outputFolderName":"DonovanJJ_ip_master"},{"location":{"location":"https://github.com/kristayeo/ip.git","repoName":"ip","organization":"kristayeo","domainName":"github"},"branch":"master","displayName":"kristayeo/ip[master]","outputFolderName":"kristayeo_ip_master"},{"location":{"location":"https://github.com/ZD292/ip.git","repoName":"ip","organization":"ZD292","domainName":"github"},"branch":"master","displayName":"ZD292/ip[master]","outputFolderName":"ZD292_ip_master"},{"location":{"location":"https://github.com/jingjie88/ip.git","repoName":"ip","organization":"jingjie88","domainName":"github"},"branch":"master","displayName":"jingjie88/ip[master]","outputFolderName":"jingjie88_ip_master"},{"location":{"location":"https://github.com/iantsaii/ip.git","repoName":"ip","organization":"iantsaii","domainName":"github"},"branch":"master","displayName":"iantsaii/ip[master]","outputFolderName":"iantsaii_ip_master"},{"location":{"location":"https://github.com/jingting1412/ip.git","repoName":"ip","organization":"jingting1412","domainName":"github"},"branch":"master","displayName":"jingting1412/ip[master]","outputFolderName":"jingting1412_ip_master"},{"location":{"location":"https://github.com/wnchan/ip.git","repoName":"ip","organization":"wnchan","domainName":"github"},"branch":"master","displayName":"wnchan/ip[master]","outputFolderName":"wnchan_ip_master"},{"location":{"location":"https://github.com/jack1e0/ip.git","repoName":"ip","organization":"jack1e0","domainName":"github"},"branch":"master","displayName":"jack1e0/ip[master]","outputFolderName":"jack1e0_ip_master"},{"location":{"location":"https://github.com/mingyu-wan/ip.git","repoName":"ip","organization":"mingyu-wan","domainName":"github"},"branch":"master","displayName":"mingyu-wan/ip[master]","outputFolderName":"mingyu-wan_ip_master"},{"location":{"location":"https://github.com/nicolengk/ip.git","repoName":"ip","organization":"nicolengk","domainName":"github"},"branch":"master","displayName":"nicolengk/ip[master]","outputFolderName":"nicolengk_ip_master"},{"location":{"location":"https://github.com/cyaoxuan/ip.git","repoName":"ip","organization":"cyaoxuan","domainName":"github"},"branch":"master","displayName":"cyaoxuan/ip[master]","outputFolderName":"cyaoxuan_ip_master"},{"location":{"location":"https://github.com/sunzihan23/ip.git","repoName":"ip","organization":"sunzihan23","domainName":"github"},"branch":"master","displayName":"sunzihan23/ip[master]","outputFolderName":"sunzihan23_ip_master"},{"location":{"location":"https://github.com/Goh-Li-Ting/ip.git","repoName":"ip","organization":"Goh-Li-Ting","domainName":"github"},"branch":"master","displayName":"Goh-Li-Ting/ip[master]","outputFolderName":"Goh-Li-Ting_ip_master"},{"location":{"location":"https://github.com/wjayee/ip.git","repoName":"ip","organization":"wjayee","domainName":"github"},"branch":"master","displayName":"wjayee/ip[master]","outputFolderName":"wjayee_ip_master"},{"location":{"location":"https://github.com/fuyiqiao/ip.git","repoName":"ip","organization":"fuyiqiao","domainName":"github"},"branch":"master","displayName":"fuyiqiao/ip[master]","outputFolderName":"fuyiqiao_ip_master"},{"location":{"location":"https://github.com/GlendaChong/ip.git","repoName":"ip","organization":"GlendaChong","domainName":"github"},"branch":"master","displayName":"GlendaChong/ip[master]","outputFolderName":"GlendaChong_ip_master"},{"location":{"location":"https://github.com/hyc17003/ip.git","repoName":"ip","organization":"hyc17003","domainName":"github"},"branch":"master","displayName":"hyc17003/ip[master]","outputFolderName":"hyc17003_ip_master"},{"location":{"location":"https://github.com/spatuly/ip.git","repoName":"ip","organization":"spatuly","domainName":"github"},"branch":"master","displayName":"spatuly/ip[master]","outputFolderName":"spatuly_ip_master"},{"location":{"location":"https://github.com/tanteckfang/ip.git","repoName":"ip","organization":"tanteckfang","domainName":"github"},"branch":"master","displayName":"tanteckfang/ip[master]","outputFolderName":"tanteckfang_ip_master"},{"location":{"location":"https://github.com/Clin-lyx/ip.git","repoName":"ip","organization":"Clin-lyx","domainName":"github"},"branch":"master","displayName":"Clin-lyx/ip[master]","outputFolderName":"Clin-lyx_ip_master"},{"location":{"location":"https://github.com/lyuanww/ip.git","repoName":"ip","organization":"lyuanww","domainName":"github"},"branch":"master","displayName":"lyuanww/ip[master]","outputFolderName":"lyuanww_ip_master"},{"location":{"location":"https://github.com/LimJH2002/ip.git","repoName":"ip","organization":"LimJH2002","domainName":"github"},"branch":"master","displayName":"LimJH2002/ip[master]","outputFolderName":"LimJH2002_ip_master"},{"location":{"location":"https://github.com/LWZ19/ip.git","repoName":"ip","organization":"LWZ19","domainName":"github"},"branch":"master","displayName":"LWZ19/ip[master]","outputFolderName":"LWZ19_ip_master"},{"location":{"location":"https://github.com/Gavino3o/ip.git","repoName":"ip","organization":"Gavino3o","domainName":"github"},"branch":"master","displayName":"Gavino3o/ip[master]","outputFolderName":"Gavino3o_ip_master"},{"location":{"location":"https://github.com/suryanshkushwaha/ip.git","repoName":"ip","organization":"suryanshkushwaha","domainName":"github"},"branch":"master","displayName":"suryanshkushwaha/ip[master]","outputFolderName":"suryanshkushwaha_ip_master"},{"location":{"location":"https://github.com/JasonRay168/ip.git","repoName":"ip","organization":"JasonRay168","domainName":"github"},"branch":"master","displayName":"JasonRay168/ip[master]","outputFolderName":"JasonRay168_ip_master"},{"location":{"location":"https://github.com/jovkusuma/ip.git","repoName":"ip","organization":"jovkusuma","domainName":"github"},"branch":"master","displayName":"jovkusuma/ip[master]","outputFolderName":"jovkusuma_ip_master"},{"location":{"location":"https://github.com/Chrainx/ip.git","repoName":"ip","organization":"Chrainx","domainName":"github"},"branch":"master","displayName":"Chrainx/ip[master]","outputFolderName":"Chrainx_ip_master"},{"location":{"location":"https://github.com/Propene-Dan/ip.git","repoName":"ip","organization":"Propene-Dan","domainName":"github"},"branch":"master","displayName":"Propene-Dan/ip[master]","outputFolderName":"Propene-Dan_ip_master"},{"location":{"location":"https://github.com/Daphne789/ip.git","repoName":"ip","organization":"Daphne789","domainName":"github"},"branch":"master","displayName":"Daphne789/ip[master]","outputFolderName":"Daphne789_ip_master"},{"location":{"location":"https://github.com/ChuanXinNg/ip.git","repoName":"ip","organization":"ChuanXinNg","domainName":"github"},"branch":"master","displayName":"ChuanXinNg/ip[master]","outputFolderName":"ChuanXinNg_ip_master"},{"location":{"location":"https://github.com/LHeng1/ip.git","repoName":"ip","organization":"LHeng1","domainName":"github"},"branch":"master","displayName":"LHeng1/ip[master]","outputFolderName":"LHeng1_ip_master"},{"location":{"location":"https://github.com/wr1159/ip.git","repoName":"ip","organization":"wr1159","domainName":"github"},"branch":"master","displayName":"wr1159/ip[master]","outputFolderName":"wr1159_ip_master"},{"location":{"location":"https://github.com/wjacobw/ip.git","repoName":"ip","organization":"wjacobw","domainName":"github"},"branch":"master","displayName":"wjacobw/ip[master]","outputFolderName":"wjacobw_ip_master"},{"location":{"location":"https://github.com/tiongjjyi/ip.git","repoName":"ip","organization":"tiongjjyi","domainName":"github"},"branch":"master","displayName":"tiongjjyi/ip[master]","outputFolderName":"tiongjjyi_ip_master"},{"location":{"location":"https://github.com/longnguyentan/ip.git","repoName":"ip","organization":"longnguyentan","domainName":"github"},"branch":"master","displayName":"longnguyentan/ip[master]","outputFolderName":"longnguyentan_ip_master"},{"location":{"location":"https://github.com/proto-aiken-13/ip.git","repoName":"ip","organization":"proto-aiken-13","domainName":"github"},"branch":"master","displayName":"proto-aiken-13/ip[master]","outputFolderName":"proto-aiken-13_ip_master"},{"location":{"location":"https://github.com/junnengsoo/ip.git","repoName":"ip","organization":"junnengsoo","domainName":"github"},"branch":"master","displayName":"junnengsoo/ip[master]","outputFolderName":"junnengsoo_ip_master"},{"location":{"location":"https://github.com/yezkez10/ip.git","repoName":"ip","organization":"yezkez10","domainName":"github"},"branch":"master","displayName":"yezkez10/ip[master]","outputFolderName":"yezkez10_ip_master"},{"location":{"location":"https://github.com/jamesebond/ip.git","repoName":"ip","organization":"jamesebond","domainName":"github"},"branch":"master","displayName":"jamesebond/ip[master]","outputFolderName":"jamesebond_ip_master"},{"location":{"location":"https://github.com/alyssaongyx/ip.git","repoName":"ip","organization":"alyssaongyx","domainName":"github"},"branch":"master","displayName":"alyssaongyx/ip[master]","outputFolderName":"alyssaongyx_ip_master"},{"location":{"location":"https://github.com/Carlintyj/ip.git","repoName":"ip","organization":"Carlintyj","domainName":"github"},"branch":"master","displayName":"Carlintyj/ip[master]","outputFolderName":"Carlintyj_ip_master"},{"location":{"location":"https://github.com/ruth-lim/ip.git","repoName":"ip","organization":"ruth-lim","domainName":"github"},"branch":"master","displayName":"ruth-lim/ip[master]","outputFolderName":"ruth-lim_ip_master"},{"location":{"location":"https://github.com/licongshen12/ip.git","repoName":"ip","organization":"licongshen12","domainName":"github"},"branch":"master","displayName":"licongshen12/ip[master]","outputFolderName":"licongshen12_ip_master"},{"location":{"location":"https://github.com/thaddeusong/ip.git","repoName":"ip","organization":"thaddeusong","domainName":"github"},"branch":"master","displayName":"thaddeusong/ip[master]","outputFolderName":"thaddeusong_ip_master"},{"location":{"location":"https://github.com/LordSaumya/ip.git","repoName":"ip","organization":"LordSaumya","domainName":"github"},"branch":"master","displayName":"LordSaumya/ip[master]","outputFolderName":"LordSaumya_ip_master"},{"location":{"location":"https://github.com/Kevin-Liusx/ip.git","repoName":"ip","organization":"Kevin-Liusx","domainName":"github"},"branch":"master","displayName":"Kevin-Liusx/ip[master]","outputFolderName":"Kevin-Liusx_ip_master"},{"location":{"location":"https://github.com/Ken-Lai/ip.git","repoName":"ip","organization":"Ken-Lai","domainName":"github"},"branch":"master","displayName":"Ken-Lai/ip[master]","outputFolderName":"Ken-Lai_ip_master"},{"location":{"location":"https://github.com/KumChaiYin/ip.git","repoName":"ip","organization":"KumChaiYin","domainName":"github"},"branch":"master","displayName":"KumChaiYin/ip[master]","outputFolderName":"KumChaiYin_ip_master"},{"location":{"location":"https://github.com/pzl111/ip.git","repoName":"ip","organization":"pzl111","domainName":"github"},"branch":"master","displayName":"pzl111/ip[master]","outputFolderName":"pzl111_ip_master"},{"location":{"location":"https://github.com/alientian/ip.git","repoName":"ip","organization":"alientian","domainName":"github"},"branch":"master","displayName":"alientian/ip[master]","outputFolderName":"alientian_ip_master"},{"location":{"location":"https://github.com/eyelessrhyme7/ip.git","repoName":"ip","organization":"eyelessrhyme7","domainName":"github"},"branch":"master","displayName":"eyelessrhyme7/ip[master]","outputFolderName":"eyelessrhyme7_ip_master"},{"location":{"location":"https://github.com/AprupKale/ip.git","repoName":"ip","organization":"AprupKale","domainName":"github"},"branch":"master","displayName":"AprupKale/ip[master]","outputFolderName":"AprupKale_ip_master"},{"location":{"location":"https://github.com/kimshitong/ip.git","repoName":"ip","organization":"kimshitong","domainName":"github"},"branch":"master","displayName":"kimshitong/ip[master]","outputFolderName":"kimshitong_ip_master"},{"location":{"location":"https://github.com/Bryan-Goh/ip.git","repoName":"ip","organization":"Bryan-Goh","domainName":"github"},"branch":"master","displayName":"Bryan-Goh/ip[master]","outputFolderName":"Bryan-Goh_ip_master"},{"location":{"location":"https://github.com/tiif/ip.git","repoName":"ip","organization":"tiif","domainName":"github"},"branch":"master","displayName":"tiif/ip[master]","outputFolderName":"tiif_ip_master"},{"location":{"location":"https://github.com/angkyakdifp/ip.git","repoName":"ip","organization":"angkyakdifp","domainName":"github"},"branch":"master","displayName":"angkyakdifp/ip[master]","outputFolderName":"angkyakdifp_ip_master"},{"location":{"location":"https://github.com/Chen-Kuei/ip.git","repoName":"ip","organization":"Chen-Kuei","domainName":"github"},"branch":"master","displayName":"Chen-Kuei/ip[master]","outputFolderName":"Chen-Kuei_ip_master"},{"location":{"location":"https://github.com/SinhaVedant/ip.git","repoName":"ip","organization":"SinhaVedant","domainName":"github"},"branch":"master","displayName":"SinhaVedant/ip[master]","outputFolderName":"SinhaVedant_ip_master"},{"location":{"location":"https://github.com/D-Limiter/ip.git","repoName":"ip","organization":"D-Limiter","domainName":"github"},"branch":"master","displayName":"D-Limiter/ip[master]","outputFolderName":"D-Limiter_ip_master"},{"location":{"location":"https://github.com/larrywang0701/ip.git","repoName":"ip","organization":"larrywang0701","domainName":"github"},"branch":"master","displayName":"larrywang0701/ip[master]","outputFolderName":"larrywang0701_ip_master"},{"location":{"location":"https://github.com/Song-Mengfei/ip.git","repoName":"ip","organization":"Song-Mengfei","domainName":"github"},"branch":"master","displayName":"Song-Mengfei/ip[master]","outputFolderName":"Song-Mengfei_ip_master"},{"location":{"location":"https://github.com/ChangruHenryQian/ip.git","repoName":"ip","organization":"ChangruHenryQian","domainName":"github"},"branch":"master","displayName":"ChangruHenryQian/ip[master]","outputFolderName":"ChangruHenryQian_ip_master"},{"location":{"location":"https://github.com/ketweeen/ip.git","repoName":"ip","organization":"ketweeen","domainName":"github"},"branch":"master","displayName":"ketweeen/ip[master]","outputFolderName":"ketweeen_ip_master"},{"location":{"location":"https://github.com/RSXIX/ip.git","repoName":"ip","organization":"RSXIX","domainName":"github"},"branch":"master","displayName":"RSXIX/ip[master]","outputFolderName":"RSXIX_ip_master"},{"location":{"location":"https://github.com/songgthu/ip.git","repoName":"ip","organization":"songgthu","domainName":"github"},"branch":"master","displayName":"songgthu/ip[master]","outputFolderName":"songgthu_ip_master"},{"location":{"location":"https://github.com/maj0-0/ip.git","repoName":"ip","organization":"maj0-0","domainName":"github"},"branch":"master","displayName":"maj0-0/ip[master]","outputFolderName":"maj0-0_ip_master"},{"location":{"location":"https://github.com/tiongMax/ip.git","repoName":"ip","organization":"tiongMax","domainName":"github"},"branch":"master","displayName":"tiongMax/ip[master]","outputFolderName":"tiongMax_ip_master"},{"location":{"location":"https://github.com/A1WAYSD/ip.git","repoName":"ip","organization":"A1WAYSD","domainName":"github"},"branch":"master","displayName":"A1WAYSD/ip[master]","outputFolderName":"A1WAYSD_ip_master"},{"location":{"location":"https://github.com/hjoneweek/ip.git","repoName":"ip","organization":"hjoneweek","domainName":"github"},"branch":"master","displayName":"hjoneweek/ip[master]","outputFolderName":"hjoneweek_ip_master"},{"location":{"location":"https://github.com/itsNatTan/ip.git","repoName":"ip","organization":"itsNatTan","domainName":"github"},"branch":"master","displayName":"itsNatTan/ip[master]","outputFolderName":"itsNatTan_ip_master"},{"location":{"location":"https://github.com/AustinHuang1203/ip.git","repoName":"ip","organization":"AustinHuang1203","domainName":"github"},"branch":"master","displayName":"AustinHuang1203/ip[master]","outputFolderName":"AustinHuang1203_ip_master"},{"location":{"location":"https://github.com/WangCheng0116/ip.git","repoName":"ip","organization":"WangCheng0116","domainName":"github"},"branch":"master","displayName":"WangCheng0116/ip[master]","outputFolderName":"WangCheng0116_ip_master"},{"location":{"location":"https://github.com/Tim-Siu/ip.git","repoName":"ip","organization":"Tim-Siu","domainName":"github"},"branch":"master","displayName":"Tim-Siu/ip[master]","outputFolderName":"Tim-Siu_ip_master"},{"location":{"location":"https://github.com/newway1814/ip.git","repoName":"ip","organization":"newway1814","domainName":"github"},"branch":"master","displayName":"newway1814/ip[master]","outputFolderName":"newway1814_ip_master"},{"location":{"location":"https://github.com/li-rongzhi/ip.git","repoName":"ip","organization":"li-rongzhi","domainName":"github"},"branch":"master","displayName":"li-rongzhi/ip[master]","outputFolderName":"li-rongzhi_ip_master"},{"location":{"location":"https://github.com/adhigop13/ip.git","repoName":"ip","organization":"adhigop13","domainName":"github"},"branch":"master","displayName":"adhigop13/ip[master]","outputFolderName":"adhigop13_ip_master"},{"location":{"location":"https://github.com/MadLamprey/ip.git","repoName":"ip","organization":"MadLamprey","domainName":"github"},"branch":"master","displayName":"MadLamprey/ip[master]","outputFolderName":"MadLamprey_ip_master"}],"errorSet":[],"sinceDate":"2023-08-18","untilDate":"2023-09-05","isSinceDateProvided":true,"isUntilDateProvided":false,"supportedDomainUrlMap":{"NOT_RECOGNIZED":{"BRANCH":"","REPO_URL":"UNSUPPORTED","BASE_URL":"UNSUPPORTED","HISTORY_PATH":"","COMMIT_PATH":"","BLAME_PATH":""},"github":{"BRANCH":"tree/$BRANCH","REPO_URL":"https://github.com/$ORGANIZATION/$REPO_NAME/","BASE_URL":"https://github.com/","HISTORY_PATH":"commits/$BRANCH/$FILE_PATH","COMMIT_PATH":"commit/$COMMIT_HASH","BLAME_PATH":"blame/$BRANCH/$FILE_PATH"}}} diff --git a/tjch-o_ip_master/authorship.json b/tjch-o_ip_master/authorship.json index 87a5eea2..265a9498 100644 --- a/tjch-o_ip_master/authorship.json +++ b/tjch-o_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":"tjch-o"},"content":" mainClass.set(\"miles.Miles\")","lastModifiedDate":"2023-08-28"},{"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":"tjch-o"},"content":" archiveBaseName \u003d \"miles\"","lastModifiedDate":"2023-08-28"},{"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":{"tjch-o":2,"-":40}},{"path":"data/test1.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"D | [ ] | buy soju | 2023-08-26 2300","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"E | [X] | orbital splashdown | 2023-08-30 1700 | 2023-08-30 1930","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"T | [ ] | eat mcgriddles","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"tjch-o":3}},{"path":"src/main/java/miles/Miles.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" * Represents our chat bot, Miles.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"public class Miles {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private static String filePath \u003d \"../../../data/miles.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" private static String directoryPath \u003d \"../../../data\";","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" * Constructor for Miles.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" * @param filePath The path to the file where the tasks are stored.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" public Miles(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" this.storage \u003d new Storage(filePath, directoryPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" this.taskList \u003d this.storage.loadFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" * Runs the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" public void run() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" this.ui.greet();","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" boolean shouldExit \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" while (!shouldExit) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" Command c \u003d parser.parse(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" c.execute(this.taskList, this.ui, this.storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" shouldExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" } catch (MilesException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" this.ui.printErrorMsg(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" continue;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" scanner.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" new Miles(filePath).run();","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"tjch-o":53,"-":2}},{"path":"src/main/java/miles/MilesException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":" * Class that handles exceptions that are raised or appear in the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"*/","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"public class MilesException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" public MilesException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":10}},{"path":"src/main/java/miles/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.command.AddDeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.command.AddToDoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.command.AddEventCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import miles.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"import miles.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"import miles.command.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"import miles.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"import miles.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"import miles.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Represents the parsing of user input, making sense of what command the user has given.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"*/","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" * Parses the input that the user gives.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" * @return a Command object that corresponds to the user input","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" public Command parse(String input) throws MilesException {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"unmark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" return new UnmarkCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"mark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" return new MarkCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"todo\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" return new AddToDoCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"deadline\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" return new AddDeadlineCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" return new AddEventCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"delete\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" return new DeleteCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"find\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" return new FindCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" } else if (input.equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" String errorMsg \u003d \"Input a task my brother.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" throw new MilesException(errorMsg);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" String errorMsg \u003d \"I\u0027m sorry brother, I do not have a Scooby :-(\";","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" throw new MilesException(errorMsg);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":51}},{"path":"src/main/java/miles/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"import miles.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"import miles.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"import miles.task.ToDo;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Represents the storage of the tasks, where we can load our tasks from a file or save our tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * into a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" private String filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" private String directoryPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" * @param filePath file path of the text file","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" * @param directoryPath directory path of the text file","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" public Storage(String filePath, String directoryPath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" this.directoryPath \u003d directoryPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" * Adds task into task list and triggers a save to the text file when the user adds a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" * @param task the task to be saved","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" * @param taskList the task list containing the task to be saved","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" public void saveWhenAddTask(Task task, TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" this.saveFile(taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" * Loads the file from the data folder if it exists, else it creates a new file for users to ","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" * store their tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" * @returns TaskList a TaskList object containing the tasks from the file","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" * @throws IOException if there is an error creating the file ","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" public TaskList loadFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" File directory \u003d new File(this.directoryPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" File newFile \u003d new File(this.filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" // check if directory exists","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" directory.mkdirs();","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" // check if file exists","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" if (!newFile.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" newFile.createNewFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" System.out.println(\"created a new file\");","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" return new TaskList(); ","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" Scanner scanner \u003d new Scanner(newFile);","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" String[] parts \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" String taskType \u003d parts[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" String status \u003d parts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" String task \u003d parts[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" Task newTask \u003d new ToDo(\"todo \" + task);","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" taskList.updateTaskStatusFromFile(newTask, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" String status \u003d parts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" String task \u003d parts[2].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" String deadline \u003d parts[3].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" Task newTask \u003d new Deadline(task, deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" taskList.updateTaskStatusFromFile(newTask, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(newTask); ","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" String status \u003d parts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" String task \u003d parts[2].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" String from \u003d parts[3].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" String to \u003d parts[4].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" Task newTask \u003d new Event(task, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" taskList.updateTaskStatusFromFile(newTask, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" scanner.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":" this.ui.printErrorMsg(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" return new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" * Saves the tasks in the task list to the text file.","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"tjch-o"},"content":" * @param taskList the task list containing the tasks to be saved","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"tjch-o"},"content":" * @throws IOException if there is an error writing to the file","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"tjch-o"},"content":" public void saveFile(TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"tjch-o"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"tjch-o"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"tjch-o"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(fileWriter);","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c n; i +\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"tjch-o"},"content":" Task currentTask \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"tjch-o"},"content":" String s \u003d currentTask.saveStringToFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"tjch-o"},"content":" bufferedWriter.write(s);","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"tjch-o"},"content":" bufferedWriter.newLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"tjch-o"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"tjch-o"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"tjch-o"},"content":" this.ui.printErrorMsg(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":138}},{"path":"src/main/java/miles/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new task list when given an existing array list.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" * @param taskList","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" * Adds task into a task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" * @param task","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" * Deletes a task from a task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be deleted","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" * @return the deleted task","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" public Task deleteTask(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" Task deletedTask \u003d this.taskList.remove(taskNum);","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" return deletedTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" * Gets a task from a task list when given the task number.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be retrieved","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" * @return the task","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" public Task getTask(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" return this.taskList.get(taskNum);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" * Gets the number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" * @return the number of tasks in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" * Updates the task status when reading from a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" * @param task","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" * @param status","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" public void updateTaskStatusFromFile(Task task, String status) {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" if (status.equals(\"[X]\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" * Marks a particular task as done when given the task number.","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be marked as done","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" public void markTaskAsDone(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" if (taskNum \u003c\u003d 0 || taskNum \u003e this.taskList.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" ui.printInvalidTaskNumber(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" return;","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" Task task \u003d this.getTask(taskNum - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":" * Marks a particular task as undone when given the task number.","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be marked as undone","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" public void markTaskAsUndone(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":" if (taskNum \u003c\u003d 0 || taskNum \u003e taskList.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" ui.printInvalidTaskNumber(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":" return;","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" Task task \u003d this.getTask(taskNum - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"tjch-o"},"content":" * Prints every task in the task list that contains the keyword.","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"tjch-o"},"content":" * @param keyword the keyword that each task must contain","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"tjch-o"},"content":" public void displayListWithKeyword(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"tjch-o"},"content":" int n \u003d this.getSize();","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"tjch-o"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c n; i +\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"tjch-o"},"content":" Task currentTask \u003d this.getTask(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"tjch-o"},"content":" String taskString \u003d currentTask.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"tjch-o"},"content":" if (taskString.contains(keyword)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"tjch-o"},"content":" String output \u003d \" \" + (count + 1) + \". \" + currentTask.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"tjch-o"},"content":" ui.formatString(output);","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"tjch-o"},"content":" count +\u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"tjch-o"},"content":" /*","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"tjch-o"},"content":" * Prints every task in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"tjch-o"},"content":" public void displayList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"tjch-o"},"content":" int n \u003d this.getSize();","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" Here are the tasks in your list my G:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c n; i +\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"tjch-o"},"content":" Task currentTask \u003d taskList.get(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"tjch-o"},"content":" String output \u003d \" \" + (i + 1) + \". \" + currentTask.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"tjch-o"},"content":" ui.formatString(output);","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":162}},{"path":"src/main/java/miles/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":" * Represents the user interface of the chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private final String DIVIDER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private final String INDENT \u003d \" \";","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" /*","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" * Adds indentation to the string given and prints it out.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * @params s the string to be indented","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" public void formatString(String s) {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" System.out.println(INDENT + s);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" * Shows the divider line in the UI.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" public void showLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" formatString(DIVIDER);","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" * Greets the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" public void greet() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" String chatbotName \u003d \"Miles\";","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" formatString(\" Hey! I\u0027m \" + chatbotName + \"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" formatString(\" What can I do for you, my friend?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" * Prints the task that was just added.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" * @param task the task that was just added","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" * @param n the number of tasks currently in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" public void printAddedTask(Task task, int n) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" formatString(\" Gotcha. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" formatString(\" Now you have \" + n + \" tasks in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" * Prints the task that was just deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" * @param task the task that was just deleted","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" * @param n the number of tasks currently in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" public void printDeletedTask(Task task, int n) {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" formatString(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" formatString(\" Now you have \" + n + \" tasks in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * Prints the error message when an exception is raised.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" * @param errorMsg error message to be printed","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" public void printErrorMsg(String errorMsg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" formatString(\" \" + errorMsg);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" * Prints the error message when the task number is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" * @param number the task number that is invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" public void printInvalidTaskNumber(int number) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" formatString(\" There is no task \" + number + \", friend.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" * Exits the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" public void exit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" formatString(\" Stay safe my friend. See you again soon man.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":98}},{"path":"src/main/java/miles/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" public AddDeadlineCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" Deadline newDeadline \u003d new Deadline(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" storage.saveWhenAddTask(newDeadline, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" ui.printAddedTask(newDeadline, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":22}},{"path":"src/main/java/miles/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" public AddEventCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" Event newEvent \u003d new Event(this.input);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" storage.saveWhenAddTask(newEvent, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" ui.printAddedTask(newEvent, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":22}},{"path":"src/main/java/miles/command/AddToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class AddToDoCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" public AddToDoCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" ToDo newToDo \u003d new ToDo(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" storage.saveWhenAddTask(newToDo, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" ui.printAddedTask(newToDo, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":22}},{"path":"src/main/java/miles/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" * Executes the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" * @param taskList the task list object","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" * @param ui the ui object","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" * @param storage the storage object","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {};","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" * Returns a task number from either a mark, unmark or delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" * @param command the command that the user inputs: either \"mark\", \"unmark\" or \"delete\"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * @return task number that the user wants to mark, unmark or delete","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String command, String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" String taskNum \u003d input.replace(command + \" \", \"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" String trimmedTaskNum \u003d taskNum.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" return Integer.valueOf(trimmedTaskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" * Returns true if the command is an exit command else false.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" * @return true if the command is an exit command else false","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":39}},{"path":"src/main/java/miles/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" * @param input","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" public DeleteCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" * Return task number from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * @return task number ","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" return super.getTaskNumber(\"delete\", input);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" int taskNum \u003d getTaskNumber(this.input);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" Task deletedTask \u003d taskList.deleteTask(taskNum - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" ui.printDeletedTask(deletedTask, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":38}},{"path":"src/main/java/miles/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" ui.exit();","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":17}},{"path":"src/main/java/miles/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" private String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" * @param keyword the keyword to find","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" this.keyword \u003d getKeywordToFind(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" * Extract the keyword from the input string when the command is a \"find\".","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" * @param input the input string","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * @return the keyword to find","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" public String getKeywordToFind(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" String keyword \u003d input.replace(\"find \", \"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" return keyword.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" taskList.displayListWithKeyword(this.keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":34}},{"path":"src/main/java/miles/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" taskList.displayList();","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":12}},{"path":"src/main/java/miles/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" public MarkCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Return task number from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" * @return task number ","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" return super.getTaskNumber(\"mark\", input);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" int taskNum \u003d this.getTaskNumber(this.input);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" taskList.markTaskAsDone(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":30}},{"path":"src/main/java/miles/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" public UnmarkCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Return task number from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" * @return task number ","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" return super.getTaskNumber(\"unmark\", input);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" @Override ","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" int taskNum \u003d getTaskNumber(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" taskList.markTaskAsUndone(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":30}},{"path":"src/main/java/miles/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":" * Represents a task that has a deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private static String NO_DESC_ERROR_MSG \u003d \"OOPS!!! The description of a deadline cannot be empty.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" public Deadline(String task) {","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" super(getTask(task));","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" this.deadline \u003d this.convertToDateTime(this.getDeadline(task));","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" public Deadline(String task, String deadline) {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" super(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" this.deadline \u003d this.convertToDateTime(deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" /*","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * Returns an array of 2 elements, the first element is the task, the second is the deadline. ","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * Worth noting that the task and deadline strings here still have whitespaces that need to be","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" * trimmed for use.","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" * @param taskString the string that contains the task and deadline","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" * @return an array of 2 strings","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" public static String[] splitDeadlineString(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" if (checkTaskNoDescription(taskString, \"deadline\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(NO_DESC_ERROR_MSG);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" // removes \"deadline \" from the task string","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" String removeCmd \u003d taskString.substring(9);","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(removeCmd)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(NO_DESC_ERROR_MSG);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" // we know the array has 2 elements ","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" String[] arr \u003d removeCmd.split(\"/by\");","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" if (arr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"Invalid deadline format: missing /by\");","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" return arr;","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" * Returns the task from a input string that starts with \"deadline\".","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"deadline\"","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" * @return the task","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" public static String getTask(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitDeadlineString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" String task \u003d strings[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(task)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(NO_DESC_ERROR_MSG);","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" // we remove the white space behind the task","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" return task.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" * Returns the deadline from a input string that starts with \"deadline\".","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"deadline\"","lastModifiedDate":"2023-08-20"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * @return the deadline","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" public String getDeadline(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitDeadlineString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" String deadline \u003d strings[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(deadline)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"OOPS!!! The deadline of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" // remove the whitespace in front ","lastModifiedDate":"2023-08-20"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" return deadline.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the deadline to be displayed in the user interface.","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" * @return the deadline to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" public String displayDeadline() {","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" return this.displayTime(this.deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the deadline which would form a part of the string to be saved ","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" * in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" * @return string representing the deadline to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" public String saveDeadline() {","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":" return this.saveTime(this.deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" * Returns a string to be saved in the text file, specifically for an deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" * @return a string to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":" return \"D\" + super.saveStringToFile() + \" | \" + this.saveDeadline(); ","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.displayDeadline() + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":116}},{"path":"src/main/java/miles/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":" * Represents a task that starts at a specific time and ends at a specific time.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private static String noDescErrorMsg \u003d \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" public Event(String task) {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" // this constructor is for creating a task with the \"event\" command","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" super(getTask(task));","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" this.startTime \u003d this.convertToDateTime(this.getStartTime(task));","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" this.endTime \u003d this.convertToDateTime(getEndTime(task));","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" public Event(String task, String startTime, String endTime) {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" // this constructor is for loading the file","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" super(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" this.startTime \u003d this.convertToDateTime(startTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" this.endTime \u003d this.convertToDateTime(endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" * Splits a string into an array of 3 elements, the first element is the task, second is ","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" * the start time, third is the end time. Worth noting that the task, start time and end time ","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" * strings here are not trimmed yet (i.e. they still have leading or trailing whitespaces).","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" * @param taskString the string that contains the task, start time and end time","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * @return an array of 3 strings","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" public static String[] splitEventString(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" if (checkTaskNoDescription(taskString, \"event\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" String removeCmd \u003d taskString.substring(6);","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(removeCmd)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" String[] arr1 \u003d removeCmd.split(\"/from\");","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" if (arr1.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"Invalid event format: missing /from\");","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" } ","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(arr1[0])) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" // we still need to split the 2nd element because it contains both the start and end time","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" String secondPart \u003d arr1[1];","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" String[] arr2 \u003d secondPart.split(\"/to\");","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" if (arr2.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"Invalid event format: missing /to\");","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" String[] output \u003d {arr1[0], arr2[0], arr2[1]};","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" return output;","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" * Returns the task from a input string that starts with \"event\".","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"event\"","lastModifiedDate":"2023-08-20"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * @return the task","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" public static String getTask(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitEventString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" String task \u003d strings[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(task)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" // remove the whitespace in front ","lastModifiedDate":"2023-08-20"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" return task.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" * Returns the start time from a input string that starts with \"event\".","lastModifiedDate":"2023-08-20"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"event\"","lastModifiedDate":"2023-08-20"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" * @return the start time","lastModifiedDate":"2023-08-20"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" public String getStartTime(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitEventString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" String startTime \u003d strings[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(startTime)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"OOPS!!! The start time of a event cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" return startTime.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" * Returns the end time from a input string that starts with \"event\".","lastModifiedDate":"2023-08-20"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"event\"","lastModifiedDate":"2023-08-20"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":" * @return the end time","lastModifiedDate":"2023-08-20"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" public String getEndTime(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitEventString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" String endTime \u003d strings[2];","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(endTime)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"OOPS!!! The end time of a event cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" return endTime.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":117,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the start time to be displayed in the user interface.","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"tjch-o"},"content":" * @return the start time to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"tjch-o"},"content":" public String displayStartTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"tjch-o"},"content":" return this.displayTime(this.startTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the start time which would form a part of the string to be ","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"tjch-o"},"content":" * saved in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"tjch-o"},"content":" * @return string representing the start time to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"tjch-o"},"content":" public String saveStartTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"tjch-o"},"content":" return this.saveTime(this.startTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the end time to be displayed in the user interface.","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"tjch-o"},"content":" * @return the end time to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"tjch-o"},"content":" public String displayEndTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"tjch-o"},"content":" return this.displayTime(this.endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the end time which would form a part of the string to be saved ","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"tjch-o"},"content":" * in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"tjch-o"},"content":" * @return string representing the end time to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"tjch-o"},"content":" public String saveEndTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"tjch-o"},"content":" return this.saveTime(this.endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"tjch-o"},"content":" * Returns a string to be saved in the text file, specifically for an event.","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"tjch-o"},"content":" * @return a string to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":161,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"tjch-o"},"content":" return \"E\" + super.saveStringToFile() + \" | \" + this.saveStartTime() + \" | \" + ","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"tjch-o"},"content":" this.saveEndTime(); ","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":165,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":166,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":167,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":168,"author":{"gitId":"tjch-o"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.displayStartTime() + \" to: \" + ","lastModifiedDate":"2023-08-26"},{"lineNumber":169,"author":{"gitId":"tjch-o"},"content":" this.displayEndTime() + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":170,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":171,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":171}},{"path":"src/main/java/miles/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"/*","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" * Represents a general task.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private String task;","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" public Task(String task) {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" * Marks the current task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" * Marks the current task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * Checks if a task has no description by checking if the strings are equal.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" * @param taskType the type of task (e.g. \"deadline\")","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" * @param task the command inputted by the user","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" * @return a boolean that indicates whether the task has no description","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" public static boolean checkTaskNoDescription(String taskType, String task) {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" return taskType.equals(task);","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" * Checks if a given string is all whitespace.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" * @param s string to be checked","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" * @return boolean that indicates whether the string is all whitespace","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" public static boolean checkAllWhiteSpace(String s) {","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c s.length(); i +\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" if (s.charAt(i) !\u003d \u0027 \u0027) {","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" return false;","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" return true;","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" * Provides a string that contains the status and task to be saved in a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" * @return string that contains the status and task to be saved in a file","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" String status \u003d isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" return \" | \" + status + \" | \" + task;","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * Converts a string to a LocalDateTime object. This is for the deadline and event classes.","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" * @param s the string inputted by the user in the format \"2019-10-15 1800\"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" * @return LocalDateTime object","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" public LocalDateTime convertToDateTime(String s) {","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" return LocalDateTime.parse(s, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" * Returns a string to be saved in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" * @return a string to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" public String saveTime(LocalDateTime time) {","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" return time.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the time to be displayed in the UI.","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" * @return string representing the time to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" public String displayTime(LocalDateTime time) {","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" return time.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" String status \u003d isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" return status + \" \" + task;","lastModifiedDate":"2023-08-19"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"tjch-o":104}},{"path":"src/main/java/miles/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":" * Represents a todo task that has no dates involved.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" private static String noDescErrorMsg \u003d \"OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" public ToDo(String task) {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" super(formatToDoString(task));","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" /*","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" * Formats the task string by slicing it to remove the \"todo \" part.","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * @param taskString the string that contains the task","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" * @return the clean version of the task string","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" public static String formatToDoString(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" if (checkTaskNoDescription(taskString, \"todo\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" String output \u003d taskString.substring(5);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(output)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" return output.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * Represents a string to be saved in the text file, specifically for a todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" * @return a string that is to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" return \"T\" + super.saveStringToFile(); ","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":46}},{"path":"src/test/java/miles/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"import miles.task.ToDo;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" public void testLoadFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" String directoryPath \u003d \"./data\";","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" String filePath \u003d \"./data/test1.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" Storage storage \u003d new Storage(filePath, directoryPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d storage.loadFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" assertEquals(3, taskList.getSize());","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" Task task1 \u003d taskList.getTask(0);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" Task task1Expected \u003d new Deadline(\"deadline buy soju /by 2023-08-26 2300\");","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" assertEquals(task1.toString(), task1Expected.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" Task task2 \u003d taskList.getTask(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" Task task2Expected \u003d new Event(\"event orbital splashdown /from 2023-08-30 1700 /to 2023-08-30 1930\");","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" task2Expected.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" assertEquals(task2.toString(), task2Expected.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" Task task3 \u003d taskList.getTask(2);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" Task task3Expected \u003d new ToDo (\"todo eat mcgriddles\");","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" assertEquals(task3.toString(), task3Expected.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" public void emptyFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" String directoryPath \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" String filePath \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" Storage storage \u003d new Storage(filePath, directoryPath);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d storage.loadFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" assertEquals(0, taskList.getSize());","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" public void testSaveFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" String directoryPath \u003d \"./data\";","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" String filePath \u003d \"./data/test2.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" Storage storage \u003d new Storage(filePath, directoryPath);","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d storage.loadFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" Task task1 \u003d new Deadline(\"deadline buy soju /by 2023-08-26 2300\");","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(task1);","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" TaskList taskList2 \u003d storage.loadFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" assertEquals(1, taskList2.getSize());","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" assertEquals(task1.toString(), taskList2.getTask(0).toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" // to clean up the file for future tests","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" taskList2.deleteTask(0);","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList2);","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":64}},{"path":"src/test/java/miles/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class EventTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" public void testSplitEventString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800 /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" String[] arr \u003d Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" assertEquals(\"project meeting\", arr[0].trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" assertEquals(\"2019-10-15 1800\", arr[1].trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" assertEquals(\"2019-10-15 2000\", arr[2].trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" public void emptyEvent() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event\";","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg); ","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" public void missingDescription() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event /from 2019-10-15 1800 /to\";","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" public void missingFrom() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"Invalid event format: missing /from\";","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" public void missingTo() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800\";","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"Invalid event format: missing /to\";","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" public void testSaveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800 /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" Event event \u003d new Event(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" String expected \u003d \"E | [ ] | project meeting | 2019-10-15 1800 | 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" assertEquals(expected, event.saveStringToFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" public void testStringToSaveMarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800 /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" Event event \u003d new Event(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" event.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" String expected \u003d \"E | [X] | project meeting | 2019-10-15 1800 | 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" assertEquals(expected, event.saveStringToFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":90}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"blah","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"todo read book","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"deadline","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"deadline return book by June 6th","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"deadline /by June 6th","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"deadline return book /by ","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"event","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"event project meeting from Aug 6th 2pm to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"event /from Aug 6th 2pm /to 4pm ","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"event project meeting /from Aug 6th 2pm","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"event project meeting /to 4pm ","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"event project meeting /from Aug 6th 2pm /to 4pm ","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":"todo join sports club","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"todo borrow book","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"mark 10","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":"unmark 10","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"delete 10","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":"mark -1","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"unmark -1","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"delete -1","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":"mark 4","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":"unmark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"delete 3","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":32}}] +[{"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":"tjch-o"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"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":"-"},"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":"tjch-o"},"content":" mainClass.set(\"miles.Miles\")","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" archiveBaseName \u003d \"miles\"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tjch-o":5,"-":42}},{"path":"data/test1.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"D | [ ] | buy soju | 2023-08-26 2300","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"E | [X] | orbital splashdown | 2023-08-30 1700 | 2023-08-30 1930","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"T | [ ] | eat mcgriddles","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"tjch-o":3}},{"path":"src/main/java/miles/Miles.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" * Represents our chat bot, Miles.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"public class Miles {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private static String filePath \u003d \"../../../data/miles.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" private static String directoryPath \u003d \"../../../data\";","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" * Constructor for Miles.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" * @param filePath The path to the file where the tasks are stored.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" public Miles(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" this.storage \u003d new Storage(filePath, directoryPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" this.taskList \u003d this.storage.loadFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" * Runs the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" public void run() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" this.ui.greet();","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" boolean shouldExit \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" while (!shouldExit) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" Command c \u003d parser.parse(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" c.execute(this.taskList, this.ui, this.storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" shouldExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" } catch (MilesException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" this.ui.printErrorMsg(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" continue;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" scanner.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" new Miles(filePath).run();","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"tjch-o":53,"-":2}},{"path":"src/main/java/miles/MilesException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":" * Class that handles exceptions that are raised or appear in the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"*/","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"public class MilesException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" public MilesException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":10}},{"path":"src/main/java/miles/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.command.AddDeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.command.AddEventCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.command.AddToDoCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import miles.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"import miles.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"import miles.command.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"import miles.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"import miles.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"import miles.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Represents the parsing of user input, making sense of what command the user has given.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"*/","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" * Parses the input that the user gives.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" * @return a Command object that corresponds to the user input","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" public Command parse(String input) throws MilesException {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"unmark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" return new UnmarkCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"mark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" return new MarkCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"todo\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" return new AddToDoCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"deadline\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" return new AddDeadlineCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" return new AddEventCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"delete\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" return new DeleteCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"find\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" return new FindCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" } else if (input.equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" String errorMsg \u003d \"Input a task my brother.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" throw new MilesException(errorMsg);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" String errorMsg \u003d \"I\u0027m sorry brother, I do not have a Scooby :-(\";","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" throw new MilesException(errorMsg);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":50}},{"path":"src/main/java/miles/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"import miles.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"import miles.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"import miles.task.ToDo;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Represents the storage of the tasks, where we can load our tasks from a file or save our tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * into a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" private String filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" private String directoryPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" * @param filePath file path of the text file","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" * @param directoryPath directory path of the text file","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" public Storage(String filePath, String directoryPath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" this.directoryPath \u003d directoryPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" * Adds task into task list and triggers a save to the text file when the user adds a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" * @param task the task to be saved","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" * @param taskList the task list containing the task to be saved","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" public void saveWhenAddTask(Task task, TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" this.saveFile(taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" * Loads the file from the data folder if it exists, else it creates a new file for users to ","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" * store their tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" * @returns TaskList a TaskList object containing the tasks from the file","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" * @throws IOException if there is an error creating the file ","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" public TaskList loadFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" File directory \u003d new File(this.directoryPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" File newFile \u003d new File(this.filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" // check if directory exists","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" directory.mkdirs();","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" // check if file exists","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" if (!newFile.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" newFile.createNewFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" System.out.println(\"created a new file\");","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" return new TaskList(); ","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" Scanner scanner \u003d new Scanner(newFile);","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" String[] parts \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" String taskType \u003d parts[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" String status \u003d parts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" String task \u003d parts[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" Task newTask \u003d new ToDo(\"todo \" + task);","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" taskList.updateTaskStatusFromFile(newTask, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" String status \u003d parts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" String task \u003d parts[2].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" String deadline \u003d parts[3].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" Task newTask \u003d new Deadline(task, deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" taskList.updateTaskStatusFromFile(newTask, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(newTask); ","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" String status \u003d parts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" String task \u003d parts[2].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" String from \u003d parts[3].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" String to \u003d parts[4].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" Task newTask \u003d new Event(task, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" taskList.updateTaskStatusFromFile(newTask, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" scanner.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":" this.ui.printErrorMsg(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" return new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" * Saves the tasks in the task list to the text file.","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"tjch-o"},"content":" * @param taskList the task list containing the tasks to be saved","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"tjch-o"},"content":" * @throws IOException if there is an error writing to the file","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"tjch-o"},"content":" public void saveFile(TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"tjch-o"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"tjch-o"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"tjch-o"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(fileWriter);","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c n; i +\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"tjch-o"},"content":" Task currentTask \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"tjch-o"},"content":" String s \u003d currentTask.saveStringToFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"tjch-o"},"content":" bufferedWriter.write(s);","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"tjch-o"},"content":" bufferedWriter.newLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"tjch-o"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"tjch-o"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"tjch-o"},"content":" this.ui.printErrorMsg(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":138}},{"path":"src/main/java/miles/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new task list when given an existing array list.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" * @param taskList","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" * Adds task into a task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" * @param task","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" * Deletes a task from a task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be deleted","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" * @return the deleted task","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" public Task deleteTask(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" Task deletedTask \u003d this.taskList.remove(taskNum);","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" return deletedTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" * Gets a task from a task list when given the task number.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be retrieved","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" * @return the task","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" public Task getTask(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" return this.taskList.get(taskNum);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" * Gets the number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" * @return the number of tasks in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" * Updates the task status when reading from a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" * @param task","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" * @param status","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" public void updateTaskStatusFromFile(Task task, String status) {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" if (status.equals(\"[X]\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" * Marks a particular task as done when given the task number.","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be marked as done","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" public void markTaskAsDone(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" if (taskNum \u003c\u003d 0 || taskNum \u003e this.taskList.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" ui.printInvalidTaskNumber(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" return;","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" Task task \u003d this.getTask(taskNum - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":" * Marks a particular task as undone when given the task number.","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be marked as undone","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" public void markTaskAsUndone(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":" if (taskNum \u003c\u003d 0 || taskNum \u003e taskList.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" ui.printInvalidTaskNumber(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":" return;","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" Task task \u003d this.getTask(taskNum - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"tjch-o"},"content":" * Prints every task in the task list that contains the keyword.","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"tjch-o"},"content":" * @param keyword the keyword that each task must contain","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"tjch-o"},"content":" public void displayListWithKeyword(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"tjch-o"},"content":" int n \u003d this.getSize();","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"tjch-o"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c n; i +\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"tjch-o"},"content":" Task currentTask \u003d this.getTask(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"tjch-o"},"content":" String taskString \u003d currentTask.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"tjch-o"},"content":" if (taskString.contains(keyword)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"tjch-o"},"content":" String output \u003d \" \" + (count + 1) + \". \" + currentTask.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"tjch-o"},"content":" ui.formatString(output);","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"tjch-o"},"content":" count +\u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"tjch-o"},"content":" /*","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"tjch-o"},"content":" * Prints every task in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"tjch-o"},"content":" public void displayList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"tjch-o"},"content":" int n \u003d this.getSize();","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" Here are the tasks in your list my G:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c n; i +\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"tjch-o"},"content":" Task currentTask \u003d taskList.get(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"tjch-o"},"content":" String output \u003d \" \" + (i + 1) + \". \" + currentTask.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"tjch-o"},"content":" ui.formatString(output);","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":162}},{"path":"src/main/java/miles/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":" * Represents the user interface of the chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private final String DIVIDER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private final String INDENT \u003d \" \";","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" /*","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" * Adds indentation to the string given and prints it out.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * @params s the string to be indented","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" public void formatString(String s) {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" System.out.println(INDENT + s);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" * Shows the divider line in the UI.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" public void showLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" formatString(DIVIDER);","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" * Greets the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" public void greet() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" String chatbotName \u003d \"Miles\";","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" formatString(\" Hey! I\u0027m \" + chatbotName + \"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" formatString(\" What can I do for you, my friend?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" * Prints the task that was just added.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" * @param task the task that was just added","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" * @param n the number of tasks currently in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" public void printAddedTask(Task task, int n) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" formatString(\" Gotcha. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" formatString(\" Now you have \" + n + \" tasks in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" * Prints the task that was just deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" * @param task the task that was just deleted","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" * @param n the number of tasks currently in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" public void printDeletedTask(Task task, int n) {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" formatString(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" formatString(\" Now you have \" + n + \" tasks in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * Prints the error message when an exception is raised.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" * @param errorMsg error message to be printed","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" public void printErrorMsg(String errorMsg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" formatString(\" \" + errorMsg);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" * Prints the error message when the task number is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" * @param number the task number that is invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" public void printInvalidTaskNumber(int number) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" formatString(\" There is no task \" + number + \", friend.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" * Exits the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" public void exit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" formatString(\" Stay safe my friend. See you again soon man.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":98}},{"path":"src/main/java/miles/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" public AddDeadlineCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" Deadline newDeadline \u003d new Deadline(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" storage.saveWhenAddTask(newDeadline, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" ui.printAddedTask(newDeadline, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":22}},{"path":"src/main/java/miles/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" public AddEventCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" Event newEvent \u003d new Event(this.input);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" storage.saveWhenAddTask(newEvent, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" ui.printAddedTask(newEvent, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":22}},{"path":"src/main/java/miles/command/AddToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class AddToDoCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" public AddToDoCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" ToDo newToDo \u003d new ToDo(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" storage.saveWhenAddTask(newToDo, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" ui.printAddedTask(newToDo, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":22}},{"path":"src/main/java/miles/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" * Represents a general command that the user can input into Miles.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"public class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" * Executes the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" * @param taskList the task list object","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * @param ui the ui object","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * @param storage the storage object","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {};","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" * Returns a task number from either a mark, unmark or delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" * @param command the command that the user inputs: either \"mark\", \"unmark\" or \"delete\"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * @return task number that the user wants to mark, unmark or delete","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String command, String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" String taskNum \u003d input.replace(command + \" \", \"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" String trimmedTaskNum \u003d taskNum.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" return Integer.valueOf(trimmedTaskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * Returns true if the command is an exit command else false.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" * @return true if the command is an exit command else false","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":39}},{"path":"src/main/java/miles/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" * Represents a delete command.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * @param input","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" public DeleteCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * Return task number from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" * @return task number","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" return super.getTaskNumber(\"delete\", input);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" int taskNum \u003d getTaskNumber(this.input);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" Task deletedTask \u003d taskList.deleteTask(taskNum - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" ui.printDeletedTask(deletedTask, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":39}},{"path":"src/main/java/miles/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" ui.exit();","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":17}},{"path":"src/main/java/miles/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" private String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" * @param keyword the keyword to find","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" this.keyword \u003d getKeywordToFind(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" * Extract the keyword from the input string when the command is a \"find\".","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" * @param input the input string","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * @return the keyword to find","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" public String getKeywordToFind(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" String keyword \u003d input.replace(\"find \", \"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" return keyword.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" taskList.displayListWithKeyword(this.keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":34}},{"path":"src/main/java/miles/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" taskList.displayList();","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":12}},{"path":"src/main/java/miles/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" public MarkCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Return task number from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" * @return task number ","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" return super.getTaskNumber(\"mark\", input);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" int taskNum \u003d this.getTaskNumber(this.input);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" taskList.markTaskAsDone(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":30}},{"path":"src/main/java/miles/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" public UnmarkCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Return task number from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" * @return task number ","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" return super.getTaskNumber(\"unmark\", input);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" @Override ","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" int taskNum \u003d getTaskNumber(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" taskList.markTaskAsUndone(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":30}},{"path":"src/main/java/miles/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":" * Represents a task that has a deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private static String NO_DESC_ERROR_MSG \u003d \"OOPS!!! The description of a deadline cannot be empty.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" public Deadline(String task) {","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" super(getTask(task));","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" this.deadline \u003d this.convertToDateTime(this.getDeadline(task));","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" public Deadline(String task, String deadline) {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" super(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" this.deadline \u003d this.convertToDateTime(deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" /*","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * Returns an array of 2 elements, the first element is the task, the second is the deadline. ","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * Worth noting that the task and deadline strings here still have whitespaces that need to be","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" * trimmed for use.","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" * @param taskString the string that contains the task and deadline","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" * @return an array of 2 strings","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" public static String[] splitDeadlineString(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" if (checkTaskNoDescription(taskString, \"deadline\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(NO_DESC_ERROR_MSG);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" // removes \"deadline \" from the task string","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" String removeCmd \u003d taskString.substring(9);","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(removeCmd)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(NO_DESC_ERROR_MSG);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" // we know the array has 2 elements ","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" String[] arr \u003d removeCmd.split(\"/by\");","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" if (arr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"Invalid deadline format: missing /by\");","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" return arr;","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" * Returns the task from a input string that starts with \"deadline\".","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"deadline\"","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" * @return the task","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" public static String getTask(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitDeadlineString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" String task \u003d strings[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(task)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(NO_DESC_ERROR_MSG);","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" // we remove the white space behind the task","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" return task.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" * Returns the deadline from a input string that starts with \"deadline\".","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"deadline\"","lastModifiedDate":"2023-08-20"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * @return the deadline","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" public String getDeadline(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitDeadlineString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" String deadline \u003d strings[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(deadline)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"OOPS!!! The deadline of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" // remove the whitespace in front ","lastModifiedDate":"2023-08-20"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" return deadline.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the deadline to be displayed in the user interface.","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" * @return the deadline to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" public String displayDeadline() {","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" return this.displayTime(this.deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the deadline which would form a part of the string to be saved ","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" * in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" * @return string representing the deadline to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" public String saveDeadline() {","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":" return this.saveTime(this.deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" * Returns a string to be saved in the text file, specifically for an deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" * @return a string to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":" return \"D\" + super.saveStringToFile() + \" | \" + this.saveDeadline(); ","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.displayDeadline() + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":116}},{"path":"src/main/java/miles/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":" * Represents a task that starts at a specific time and ends at a specific time.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private static String noDescErrorMsg \u003d \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" public Event(String task) {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" // this constructor is for creating a task with the \"event\" command","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" super(getTask(task));","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" this.startTime \u003d this.convertToDateTime(this.getStartTime(task));","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" this.endTime \u003d this.convertToDateTime(getEndTime(task));","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" public Event(String task, String startTime, String endTime) {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" // this constructor is for loading the file","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" super(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" this.startTime \u003d this.convertToDateTime(startTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" this.endTime \u003d this.convertToDateTime(endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" * Splits a string into an array of 3 elements, the first element is the task, second is ","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" * the start time, third is the end time. Worth noting that the task, start time and end time ","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" * strings here are not trimmed yet (i.e. they still have leading or trailing whitespaces).","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" * @param taskString the string that contains the task, start time and end time","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * @return an array of 3 strings","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" public static String[] splitEventString(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" if (checkTaskNoDescription(taskString, \"event\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" String removeCmd \u003d taskString.substring(6);","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(removeCmd)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" String[] arr1 \u003d removeCmd.split(\"/from\");","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" if (arr1.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"Invalid event format: missing /from\");","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" } ","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(arr1[0])) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" // we still need to split the 2nd element because it contains both the start and end time","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" String secondPart \u003d arr1[1];","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" String[] arr2 \u003d secondPart.split(\"/to\");","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" if (arr2.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"Invalid event format: missing /to\");","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" String[] output \u003d {arr1[0], arr2[0], arr2[1]};","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" return output;","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" * Returns the task from a input string that starts with \"event\".","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"event\"","lastModifiedDate":"2023-08-20"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * @return the task","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" public static String getTask(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitEventString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" String task \u003d strings[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(task)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" // remove the whitespace in front ","lastModifiedDate":"2023-08-20"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" return task.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" * Returns the start time from a input string that starts with \"event\".","lastModifiedDate":"2023-08-20"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"event\"","lastModifiedDate":"2023-08-20"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" * @return the start time","lastModifiedDate":"2023-08-20"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" public String getStartTime(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitEventString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" String startTime \u003d strings[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(startTime)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"OOPS!!! The start time of a event cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" return startTime.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" * Returns the end time from a input string that starts with \"event\".","lastModifiedDate":"2023-08-20"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"event\"","lastModifiedDate":"2023-08-20"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":" * @return the end time","lastModifiedDate":"2023-08-20"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" public String getEndTime(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitEventString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" String endTime \u003d strings[2];","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(endTime)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"OOPS!!! The end time of a event cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" return endTime.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":117,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the start time to be displayed in the user interface.","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"tjch-o"},"content":" * @return the start time to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"tjch-o"},"content":" public String displayStartTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"tjch-o"},"content":" return this.displayTime(this.startTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the start time which would form a part of the string to be ","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"tjch-o"},"content":" * saved in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"tjch-o"},"content":" * @return string representing the start time to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"tjch-o"},"content":" public String saveStartTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"tjch-o"},"content":" return this.saveTime(this.startTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the end time to be displayed in the user interface.","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"tjch-o"},"content":" * @return the end time to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"tjch-o"},"content":" public String displayEndTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"tjch-o"},"content":" return this.displayTime(this.endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the end time which would form a part of the string to be saved ","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"tjch-o"},"content":" * in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"tjch-o"},"content":" * @return string representing the end time to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"tjch-o"},"content":" public String saveEndTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"tjch-o"},"content":" return this.saveTime(this.endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"tjch-o"},"content":" * Returns a string to be saved in the text file, specifically for an event.","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"tjch-o"},"content":" * @return a string to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":161,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"tjch-o"},"content":" return \"E\" + super.saveStringToFile() + \" | \" + this.saveStartTime() + \" | \" + ","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"tjch-o"},"content":" this.saveEndTime(); ","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":165,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":166,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":167,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":168,"author":{"gitId":"tjch-o"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.displayStartTime() + \" to: \" + ","lastModifiedDate":"2023-08-26"},{"lineNumber":169,"author":{"gitId":"tjch-o"},"content":" this.displayEndTime() + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":170,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":171,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":171}},{"path":"src/main/java/miles/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"/*","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" * Represents a general task.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private String task;","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" public Task(String task) {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" * Marks the current task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" * Marks the current task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * Checks if a task has no description by checking if the strings are equal.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" * @param taskType the type of task (e.g. \"deadline\")","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" * @param task the command inputted by the user","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" * @return a boolean that indicates whether the task has no description","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" public static boolean checkTaskNoDescription(String taskType, String task) {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" return taskType.equals(task);","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" * Checks if a given string is all whitespace.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" * @param s string to be checked","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" * @return boolean that indicates whether the string is all whitespace","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" public static boolean checkAllWhiteSpace(String s) {","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c s.length(); i +\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" if (s.charAt(i) !\u003d \u0027 \u0027) {","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" return false;","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" return true;","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" * Provides a string that contains the status and task to be saved in a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" * @return string that contains the status and task to be saved in a file","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" String status \u003d isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" return \" | \" + status + \" | \" + task;","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * Converts a string to a LocalDateTime object. This is for the deadline and event classes.","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" * @param s the string inputted by the user in the format \"2019-10-15 1800\"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" * @return LocalDateTime object","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" public LocalDateTime convertToDateTime(String s) {","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" return LocalDateTime.parse(s, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" * Returns a string to be saved in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" * @return a string to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" public String saveTime(LocalDateTime time) {","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" return time.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the time to be displayed in the UI.","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" * @return string representing the time to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" public String displayTime(LocalDateTime time) {","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" return time.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" String status \u003d isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" return status + \" \" + task;","lastModifiedDate":"2023-08-19"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"tjch-o":104}},{"path":"src/main/java/miles/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":" * Represents a todo task that has no dates involved.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" private static String noDescErrorMsg \u003d \"OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" public ToDo(String task) {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" super(formatToDoString(task));","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" /*","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" * Formats the task string by slicing it to remove the \"todo \" part.","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * @param taskString the string that contains the task","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" * @return the clean version of the task string","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" public static String formatToDoString(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" if (checkTaskNoDescription(taskString, \"todo\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" String output \u003d taskString.substring(5);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(output)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" return output.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * Represents a string to be saved in the text file, specifically for a todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" * @return a string that is to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" return \"T\" + super.saveStringToFile(); ","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":46}},{"path":"src/test/java/miles/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"import miles.task.ToDo;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" public void testLoadFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" String directoryPath \u003d \"./data\";","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" String filePath \u003d \"./data/test1.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" Storage storage \u003d new Storage(filePath, directoryPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d storage.loadFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" assertEquals(3, taskList.getSize());","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" Task task1 \u003d taskList.getTask(0);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" Task task1Expected \u003d new Deadline(\"deadline buy soju /by 2023-08-26 2300\");","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" assertEquals(task1.toString(), task1Expected.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" Task task2 \u003d taskList.getTask(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" Task task2Expected \u003d new Event(\"event orbital splashdown /from 2023-08-30 1700 /to 2023-08-30 1930\");","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" task2Expected.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" assertEquals(task2.toString(), task2Expected.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" Task task3 \u003d taskList.getTask(2);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" Task task3Expected \u003d new ToDo (\"todo eat mcgriddles\");","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" assertEquals(task3.toString(), task3Expected.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" public void emptyFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" String directoryPath \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" String filePath \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" Storage storage \u003d new Storage(filePath, directoryPath);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d storage.loadFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" assertEquals(0, taskList.getSize());","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" public void testSaveFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" String directoryPath \u003d \"./data\";","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" String filePath \u003d \"./data/test2.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" Storage storage \u003d new Storage(filePath, directoryPath);","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d storage.loadFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" Task task1 \u003d new Deadline(\"deadline buy soju /by 2023-08-26 2300\");","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(task1);","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" TaskList taskList2 \u003d storage.loadFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" assertEquals(1, taskList2.getSize());","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" assertEquals(task1.toString(), taskList2.getTask(0).toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" // to clean up the file for future tests","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" taskList2.deleteTask(0);","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList2);","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":64}},{"path":"src/test/java/miles/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class EventTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" public void testSplitEventString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800 /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" String[] arr \u003d Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" assertEquals(\"project meeting\", arr[0].trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" assertEquals(\"2019-10-15 1800\", arr[1].trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" assertEquals(\"2019-10-15 2000\", arr[2].trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" public void emptyEvent() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event\";","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg); ","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" public void missingDescription() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event /from 2019-10-15 1800 /to\";","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" public void missingFrom() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"Invalid event format: missing /from\";","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" public void missingTo() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800\";","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"Invalid event format: missing /to\";","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" public void testSaveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800 /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" Event event \u003d new Event(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" String expected \u003d \"E | [ ] | project meeting | 2019-10-15 1800 | 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" assertEquals(expected, event.saveStringToFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" public void testStringToSaveMarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800 /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" Event event \u003d new Event(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" event.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" String expected \u003d \"E | [X] | project meeting | 2019-10-15 1800 | 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" assertEquals(expected, event.saveStringToFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":90}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"blah","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"todo read book","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"deadline","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"deadline return book by June 6th","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"deadline /by June 6th","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"deadline return book /by ","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"event","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"event project meeting from Aug 6th 2pm to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"event /from Aug 6th 2pm /to 4pm ","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"event project meeting /from Aug 6th 2pm","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"event project meeting /to 4pm ","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"event project meeting /from Aug 6th 2pm /to 4pm ","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":"todo join sports club","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"todo borrow book","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"mark 10","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":"unmark 10","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"delete 10","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":"mark -1","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"unmark -1","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"delete -1","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":"mark 4","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":"unmark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"delete 3","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":32}}] diff --git a/tjch-o_ip_master/commits.json b/tjch-o_ip_master/commits.json index e656ed03..1e814653 100644 --- a/tjch-o_ip_master/commits.json +++ b/tjch-o_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"tjch-o":[{"date":"2023-08-19","commitResults":[{"hash":"d1f08fc059af8ddb4ae9541c0031c8f7fe5f203e","isMergeCommit":false,"messageTitle":"change chatbot name and add rename, greet, exit feature","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"92fdfeac5a690fa75923dbe8d1944b94bb787385","isMergeCommit":false,"messageTitle":"add echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":9}}},{"hash":"9bb786a442e3d73e26927ae147e257abe43a051a","isMergeCommit":false,"messageTitle":"implement add, list features","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":6}}},{"hash":"a7f5644976c1cc72463d11133000aad46c610a1d","isMergeCommit":false,"messageTitle":"add mark as done and change status back to undone feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":26}}}]},{"date":"2023-08-20","commitResults":[{"hash":"4b9dbb36a1ef7f3ec60021933093af39ad0bf2cb","isMergeCommit":false,"messageTitle":"add ToDos, Events, Deadlines features","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":16}}},{"hash":"dcbd798698e8ba1e1f279093a89352209e4b5212","isMergeCommit":false,"messageTitle":"add automated ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-21","commitResults":[{"hash":"0363e9b5f488bd13bb27acc2f26dc17f3917d474","isMergeCommit":false,"messageTitle":"add chatbot error handling ability for invalid user input","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":11}}},{"hash":"924901c44f2610f2b96063734f3f9820d1c0c6e6","isMergeCommit":false,"messageTitle":"add delete feature and improve on automated ui testing","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":20,"deletions":2},"java":{"insertions":58,"deletions":12}}},{"hash":"ce7eb91523c2131aee7804504da90cddbb272ba6","isMergeCommit":false,"messageTitle":"added more comprehensive testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-26","commitResults":[{"hash":"f1c9c27340aefcf0d47ce4cea28fb26d1cf82b34","isMergeCommit":false,"messageTitle":"Implement save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":135,"deletions":10}}},{"hash":"1e9b01ba6f33f17433c7535dc6df7299fd95ed05","isMergeCommit":false,"messageTitle":"Add minor modifications to save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"719bf849c9cfb2ac04c607373954706717bbb87d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"ec248daf378f11c0353d897ff07d6e177ec44ef6","isMergeCommit":false,"messageTitle":"Implement DateTime for deadlines and events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":13}}},{"hash":"94a270ada10c8053bb6f88a8b27e5d478081f51b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"30162453ec6ae0f3757f96b6e7d18219256bbf57","isMergeCommit":false,"messageTitle":"Refactor code to add more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":355,"deletions":272}}},{"hash":"3917d703f784aae04f5d219a38523b1a2af93b2c","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"d92b8e2ecafba8900288e4c64e418d5d557e3efa","isMergeCommit":false,"messageTitle":"Add packages and reorganise files into correct folders","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":7}}},{"hash":"b04cd222eeb7c5f7a78cb6704ddbd6fe863b8c9c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"75ebb2457d9f750cc04695c2ce74766113d22383","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/tjch-o/ip into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"dd8d397e4af9ad605dac0ae08cc5b71a92afdeb4","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"3e6f307c305f6d81f790edc03f48d7cd8ddefca2","isMergeCommit":false,"messageTitle":"Add first method JUnit test for Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":1}}},{"hash":"8e63da48e01adc94ecbc6bc9b3a5cc6e37cd2800","isMergeCommit":false,"messageTitle":"Add JUnit tests for Storage class","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":72,"deletions":9}}},{"hash":"9eea0cd96d947a98e57982dd0343bdfb6772e012","isMergeCommit":false,"messageTitle":"Add more JUnit tests for Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":3}}},{"hash":"c7e9fe0a00e5141119149a8ef1833220e94b6e76","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"f646835b678d8f019d1f5091854a69e4ccb3de2e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"f78c750fa3053ae6200f40857f9802c0453f4da7","isMergeCommit":false,"messageTitle":"Update JUnit test cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":12}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e8b63121741cd2e249a46f1a3163514cd8632900","isMergeCommit":false,"messageTitle":"Fix directory cannot be found bug for the Storage JUnit test","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":4}}},{"hash":"ebd48b47a2f0452cb1f21cf303f30f0b8b03a02b","isMergeCommit":false,"messageTitle":"Add JavaDocs to most of the classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":219,"deletions":25}}},{"hash":"9b25dde195a2d102e5f2604999d4916905e7aae9","isMergeCommit":false,"messageTitle":"Improve code to follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":29}}},{"hash":"a2f15af9d3a116006c9323bcb4dd3c30506a2f45","isMergeCommit":false,"messageTitle":"Implement find feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":2}}},{"hash":"7505b283749e18c92800b61e67c1597a2bc398ca","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"55bc623966c358e73d8cb72b8dc7ca3b43bda67f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"a2b1c33c90c0800aa6ea316bdb42b72d7437fce3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"831e55ec2bdeba93493e76f1ae91bca7fc589d1b","isMergeCommit":false,"messageTitle":"Rename folders to reflect correct name of chatbot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":52,"deletions":45}}}]},{"date":"2023-08-31","commitResults":[{"hash":"89bad617ed5de5fe58c6ab9e8f2c38409bd7dc8f","isMergeCommit":false,"messageTitle":"Refactor code to abstract out Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":363,"deletions":174}}}]}]},"authorFileTypeContributionMap":{"tjch-o":{"java":1369,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":2,"txt":35}},"authorContributionVariance":{"tjch-o":67387.805},"authorDisplayNameMap":{"tjch-o":"CS2103T-T09-1 CHOO.. JIE"}} +{"authorDailyContributionsMap":{"tjch-o":[{"date":"2023-08-19","commitResults":[{"hash":"d1f08fc059af8ddb4ae9541c0031c8f7fe5f203e","isMergeCommit":false,"messageTitle":"change chatbot name and add rename, greet, exit feature","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"92fdfeac5a690fa75923dbe8d1944b94bb787385","isMergeCommit":false,"messageTitle":"add echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":9}}},{"hash":"9bb786a442e3d73e26927ae147e257abe43a051a","isMergeCommit":false,"messageTitle":"implement add, list features","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":6}}},{"hash":"a7f5644976c1cc72463d11133000aad46c610a1d","isMergeCommit":false,"messageTitle":"add mark as done and change status back to undone feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":26}}}]},{"date":"2023-08-20","commitResults":[{"hash":"4b9dbb36a1ef7f3ec60021933093af39ad0bf2cb","isMergeCommit":false,"messageTitle":"add ToDos, Events, Deadlines features","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":16}}},{"hash":"dcbd798698e8ba1e1f279093a89352209e4b5212","isMergeCommit":false,"messageTitle":"add automated ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-21","commitResults":[{"hash":"0363e9b5f488bd13bb27acc2f26dc17f3917d474","isMergeCommit":false,"messageTitle":"add chatbot error handling ability for invalid user input","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":11}}},{"hash":"924901c44f2610f2b96063734f3f9820d1c0c6e6","isMergeCommit":false,"messageTitle":"add delete feature and improve on automated ui testing","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":20,"deletions":2},"java":{"insertions":58,"deletions":12}}},{"hash":"ce7eb91523c2131aee7804504da90cddbb272ba6","isMergeCommit":false,"messageTitle":"added more comprehensive testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-26","commitResults":[{"hash":"f1c9c27340aefcf0d47ce4cea28fb26d1cf82b34","isMergeCommit":false,"messageTitle":"Implement save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":135,"deletions":10}}},{"hash":"1e9b01ba6f33f17433c7535dc6df7299fd95ed05","isMergeCommit":false,"messageTitle":"Add minor modifications to save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"719bf849c9cfb2ac04c607373954706717bbb87d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"ec248daf378f11c0353d897ff07d6e177ec44ef6","isMergeCommit":false,"messageTitle":"Implement DateTime for deadlines and events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":13}}},{"hash":"94a270ada10c8053bb6f88a8b27e5d478081f51b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"30162453ec6ae0f3757f96b6e7d18219256bbf57","isMergeCommit":false,"messageTitle":"Refactor code to add more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":355,"deletions":272}}},{"hash":"3917d703f784aae04f5d219a38523b1a2af93b2c","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"d92b8e2ecafba8900288e4c64e418d5d557e3efa","isMergeCommit":false,"messageTitle":"Add packages and reorganise files into correct folders","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":7}}},{"hash":"b04cd222eeb7c5f7a78cb6704ddbd6fe863b8c9c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"75ebb2457d9f750cc04695c2ce74766113d22383","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/tjch-o/ip into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"dd8d397e4af9ad605dac0ae08cc5b71a92afdeb4","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"3e6f307c305f6d81f790edc03f48d7cd8ddefca2","isMergeCommit":false,"messageTitle":"Add first method JUnit test for Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":1}}},{"hash":"8e63da48e01adc94ecbc6bc9b3a5cc6e37cd2800","isMergeCommit":false,"messageTitle":"Add JUnit tests for Storage class","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":72,"deletions":9}}},{"hash":"9eea0cd96d947a98e57982dd0343bdfb6772e012","isMergeCommit":false,"messageTitle":"Add more JUnit tests for Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":3}}},{"hash":"c7e9fe0a00e5141119149a8ef1833220e94b6e76","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"f646835b678d8f019d1f5091854a69e4ccb3de2e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"f78c750fa3053ae6200f40857f9802c0453f4da7","isMergeCommit":false,"messageTitle":"Update JUnit test cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":12}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e8b63121741cd2e249a46f1a3163514cd8632900","isMergeCommit":false,"messageTitle":"Fix directory cannot be found bug for the Storage JUnit test","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":4}}},{"hash":"ebd48b47a2f0452cb1f21cf303f30f0b8b03a02b","isMergeCommit":false,"messageTitle":"Add JavaDocs to most of the classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":219,"deletions":25}}},{"hash":"9b25dde195a2d102e5f2604999d4916905e7aae9","isMergeCommit":false,"messageTitle":"Improve code to follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":29}}},{"hash":"a2f15af9d3a116006c9323bcb4dd3c30506a2f45","isMergeCommit":false,"messageTitle":"Implement find feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":2}}},{"hash":"7505b283749e18c92800b61e67c1597a2bc398ca","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"55bc623966c358e73d8cb72b8dc7ca3b43bda67f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"a2b1c33c90c0800aa6ea316bdb42b72d7437fce3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"831e55ec2bdeba93493e76f1ae91bca7fc589d1b","isMergeCommit":false,"messageTitle":"Rename folders to reflect correct name of chatbot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":52,"deletions":45}}}]},{"date":"2023-08-31","commitResults":[{"hash":"89bad617ed5de5fe58c6ab9e8f2c38409bd7dc8f","isMergeCommit":false,"messageTitle":"Refactor code to abstract out Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":363,"deletions":174}}}]},{"date":"2023-09-05","commitResults":[{"hash":"99e5619b2d4b518dbefe227646863c1db7cdf5bb","isMergeCommit":false,"messageTitle":"Incorporate checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":1,"deletions":2}}},{"hash":"01badb33aa801a03298814fc326785aa5f3c3747","isMergeCommit":false,"messageTitle":"Fix minor checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"69164a05e19d7909f54845b55acf30b74a5f5b16","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"tjch-o":{"java":1369,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":5,"txt":35}},"authorContributionVariance":{"tjch-o":57079.54},"authorDisplayNameMap":{"tjch-o":"CS2103T-T09-1 CHOO.. JIE"}} diff --git a/tllshan_ip_master/authorship.json b/tllshan_ip_master/authorship.json index 860905d5..a05765f2 100644 --- a/tllshan_ip_master/authorship.json +++ b/tllshan_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/chatterchicken/CCException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"public class CCException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":" public CCException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":7}},{"path":"src/main/java/chatterchicken/ChatterChicken.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import chatterchicken.parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import chatterchicken.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import chatterchicken.tasklist.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import chatterchicken.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"public class ChatterChicken {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" public static final String PATH \u003d \"src/main/data/task-list.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" public ChatterChicken() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" this.storage \u003d new Storage(parser);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" ChatterChicken chatterChicken \u003d new ChatterChicken();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" chatterChicken.run();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" * Initiates the main loop of the chatterchicken.ChatterChicken application.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" * Reads user input, processes commands, and provides responses until the user chooses to exit.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" * Catches and displays exceptions.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" private void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" try (Scanner sc \u003d new Scanner(System.in)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" tasks \u003d new TaskList(storage.loadTasksFromFile(), ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" ui.displayGreeting();","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" while (!input.equals(\"bye\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" Command command \u003d parser.parseInput(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" executeCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" input \u003d sc.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" ui.displayFarewell();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" * Executes the specified command by invoking corresponding methods on the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" * @param command The parsed user command.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during command execution.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" private void executeCommand(Command command) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" String action \u003d command.getAction();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" String taskDescription \u003d command.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" switch (action) {","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" case \"list\":","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" tasks.printList();","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" case \"mark\":","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" tasks.markTask(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" tasks.unmarkTask(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" case \"delete\":","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" tasks.deleteTask(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" case \"todo\":","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" case \"event\":","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" tasks.addTask(parser.parseTask(action, taskDescription));","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :\u003c\");","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":84}},{"path":"src/main/java/chatterchicken/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"public class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":" private final String action;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":" private final String taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" public Command(String action, String taskDescription) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" this.action \u003d action;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" public String getAction() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" return action;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" public String getTaskDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" return taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tllshan":19}},{"path":"src/main/java/chatterchicken/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import chatterchicken.CCException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import chatterchicken.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import chatterchicken.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import chatterchicken.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import chatterchicken.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import chatterchicken.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" * Parses the input command and creates a chatterchicken.Command object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" * This method extracts the action and task description from the input and returns a chatterchicken.Command object.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" * @param input The input command provided by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" * @return A chatterchicken.Command object representing the parsed command.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during parsing.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" public Command parseInput(String input) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" int space \u003d input.indexOf(\u0027 \u0027);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" String action \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" String taskDescription \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" if (space \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" action \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" action \u003d input.substring(0, space);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" taskDescription \u003d input.substring(space + 1, input.length());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" return new Command(action, taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" * Parses a task from a line of data file input and returns the corresponding Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" * This method extracts task details from the input, creates a chatterchicken.Command object, and parses the Task type.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" * @param fileLine The input line from the data file containing task details.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during parsing.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" public Task parseTaskFromFile(String fileLine) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" char done \u003d fileLine.charAt(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" String input \u003d fileLine.substring(1, fileLine.length());","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" Command command \u003d parseInput(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" Task task \u003d parseTask(command.getAction(), command.getTaskDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" if (done \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" task.setDone(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" * Parses a Task object based on its type and input details.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" * @param type The type of the task (todo, deadline, event).","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task details.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during parsing or task creation.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" public Task parseTask(String type, String input) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" task \u003d parseToDo(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" task \u003d parseDeadline(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" task \u003d parseEvent(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" * Parses the input string to create a new ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" * @return A new ToDo task object created from the provided description.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" * @throws CCException If the description is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" private ToDo parseToDo (String taskDescription) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" return new ToDo(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" * Parses the input string to create a new Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description and end time of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" * @return A new Deadline task object created from the provided description.","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":" * @throws CCException If the input format is incorrect or if there are empty fields.","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":" private Deadline parseDeadline(String taskDescription) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":" String[] fields \u003d taskDescription.split(\"/by\");","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" if (fields.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Incorrect format for deadline.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":" String name \u003d fields[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":" String end \u003d fields[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":" if (name.isEmpty() || end.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Empty field for deadline detected.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"tllshan"},"content":" return new Deadline(taskDescription, name, parseDate(end));","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"tllshan"},"content":" * Parses the input string to create a new Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description, start time, and end time of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"tllshan"},"content":" * @return A new Event task object created from the provided description.","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"tllshan"},"content":" * @throws CCException If the input format is incorrect or if there are empty fields.","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"tllshan"},"content":" private Event parseEvent(String taskDescription) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"tllshan"},"content":" String[] fields \u003d taskDescription.split(\"/from|/to\");","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"tllshan"},"content":" if (fields.length !\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Incorrect format for event.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"tllshan"},"content":" String name \u003d fields[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"tllshan"},"content":" String start \u003d fields[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"tllshan"},"content":" String end \u003d fields[2].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"tllshan"},"content":" if (name.isEmpty() || start.isEmpty() || end.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Empty field for event detected.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"tllshan"},"content":" return new Event(taskDescription, name, parseDate(start), parseDate(end));","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"tllshan"},"content":" * Parses a string into a LocalDate object.","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"tllshan"},"content":" * @param date The string containing a date to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"tllshan"},"content":" * @return A LocalDate object representing the parsed date.","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"tllshan"},"content":" private static LocalDate parseDate(String date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"tllshan"},"content":" return LocalDate.parse(date);","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"tllshan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"tllshan"},"content":" System.out.println(\"Error parsing date: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"tllshan"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tllshan":147}},{"path":"src/main/java/chatterchicken/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import chatterchicken.CCException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import chatterchicken.ChatterChicken;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import chatterchicken.parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import chatterchicken.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import chatterchicken.tasklist.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" public Storage(Parser parser) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" this.parser \u003d parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" * Loads tasks from the data file and returns them as an ArrayList.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" * If the data file doesn\u0027t exist, a new file is created.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" * @return An ArrayList containing the loaded tasks, or null in case of errors.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" public ArrayList\u003cTask\u003e loadTasksFromFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" File dataFile \u003d Paths.get(ChatterChicken.PATH).toAbsolutePath().toFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" dataFile.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(dataFile));","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" String currLine \u003d reader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" while (currLine !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" Task task \u003d parser.parseTaskFromFile(currLine);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" currLine \u003d reader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" return taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" System.err.println(\"An error occurred while loading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" System.err.println(\"An error occurred while adding tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" * Saves tasks from the provided chatterchicken.tasklist.TaskList to the data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" * @param taskList The chatterchicken.tasklist.TaskList containing tasks to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" public void saveTasksToFile(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" File dataFile \u003d Paths.get(ChatterChicken.PATH).toAbsolutePath().toFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(dataFile));","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" String taskDescription \u003d task.getTaskForSaving() + \"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" writer.append(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" System.err.println(\"An error occurred while saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tllshan":75}},{"path":"src/main/java/chatterchicken/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" private final LocalDate end;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" public Deadline(String taskDescription, String name, LocalDate end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" super(taskDescription, name);","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" * Generates the formatted representation of the deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" * The format includes the task status, task type, description, and end time.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" * @return The formatted representation of the deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" public String getTaskForPrinting() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" return String.format(\"[%s][D] %s (by: %s)\", super.checkDone(), super.getName(), super.formatDate(end));","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" public String getTaskDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" return \"deadline \" + super.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":28}},{"path":"src/main/java/chatterchicken/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" private final LocalDate start;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" private final LocalDate end;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" public Event(String taskDescription, String name, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" super(taskDescription, name);","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" * Generates the formatted representation of the event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" * The format includes the task status, task type, description, start time, and end time.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" * @return The formatted representation of the event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" public String getTaskForPrinting() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" return String.format(\"[%s][E] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" super.checkDone(),","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" super.getName(),","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" super.formatDate(start),","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" super.formatDate(end));","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" public String getTaskDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" return \"event \" + super.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":35}},{"path":"src/main/java/chatterchicken/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" private final String taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" private final String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" public Task(String taskDescription, String name) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" protected String checkDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" return isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" public String formatDate(LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" return date.format(formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" protected String getName() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" return this.name;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" protected String getTaskDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" return this.taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" public abstract String getTaskForPrinting();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" public String getTaskForSaving() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" return checkDone() + getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" public void setDone(boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":43}},{"path":"src/main/java/chatterchicken/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":" public ToDo(String taskDescription) {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" super(taskDescription, taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" * Generates the formatted representation of the todo task.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" * The format includes the task status, task type, and description.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" * @return The formatted representation of the todo task.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" public String getTaskForPrinting() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" return String.format(\"[%s][T] %s\", super.checkDone(), super.getName());","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" public String getTaskDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" return \"todo \" + super.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":24}},{"path":"src/main/java/chatterchicken/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import chatterchicken.CCException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import chatterchicken.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import chatterchicken.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" * The chatterchicken.tasklist.TaskList class represents a collection of tasks managed by the chatterchicken.ChatterChicken task manager.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" * It allows for adding, marking, unmarking, and deleting tasks, as well as printing the list of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" * along with their respective indexes. Tasks can be of different types: ToDo, Deadline, and Event.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"public class TaskList implements Iterable\u003cTask\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList, Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" * Adds a new task to the task list based on the provided Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message with the added task\u0027s details.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" * @param task The task to be added to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" * @throws CCException If there is an error in adding the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" ui.displayAddTask(task, taskList.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" * Deletes a task from the task list based on the provided input.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message after deleting the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" * @throws CCException If there is an error in deleting the task or if the input is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" public void deleteTask(String input) throws CCException {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" int index \u003d getIndex(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" Task task \u003d taskList.get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" taskList.remove(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" ui.displayDeleteTask(task, taskList.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Invalid input for list of length \" + taskList.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" * Marks a task as done based on the provided input.","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message with the marked task\u0027s details.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information to mark as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" * @throws CCException If there is an error in marking the task or if the input is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" public void markTask(String input) throws CCException {","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" Task task \u003d taskList.get(getIndex(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" task.setDone(true);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" ui.displayMarkTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Invalid input for marking list of length \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" * Unmarks a previously marked task as not done based on the provided input.","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message with the unmarked task\u0027s details.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information to unmark.","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" * @throws CCException If there is an error in unmarking the task or if the input is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" public void unmarkTask(String input) throws CCException {","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" Task task \u003d taskList.get(getIndex(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" task.setDone(false);","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" ui.displayUnmarkTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Invalid input for list of length \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" * Retrieves the index of a task based on the provided input.","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information and index as the last character.","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" * @return The index of the task parsed from the input.","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" private int getIndex(String input) {","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":" return input.charAt(input.length() - 1) - \u00270\u0027 - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":" * Prints the list of tasks with their respective indexes.","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" public void printList() {","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" ui.displayList(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":" public Iterator\u003cTask\u003e iterator() {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"tllshan"},"content":" return taskList.iterator();","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":109}},{"path":"src/main/java/chatterchicken/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import chatterchicken.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" private static final String LINE \u003d \"\\n _____________________________________________________________________________\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" private static final String INDENT \u003d \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" private static final String INDENT_BIG \u003d \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" * Displays a greeting message to the user to introduce chatterchicken.ChatterChicken.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" public void displayGreeting() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" printToScreen(INDENT + \"Hello! I\u0027m chatterchicken.ChatterChicken!\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" + INDENT + \"What can I do for you?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" * Displays a farewell message to the user as they exit the chatterchicken.ChatterChicken application.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" public void displayFarewell() {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" printToScreen(INDENT + \"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been added to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" * @param size The updated size of the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" public void displayAddTask(Task task, int size) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" printToScreen(INDENT + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting() + \"\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" + INDENT + \"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been deleted from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" * @param size The updated size of the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" public void displayDeleteTask(Task task, int size) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" printToScreen(INDENT + \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting() + \"\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" + INDENT + \"Now you have \" + size + \" tasks in your list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" * @param task The task that was marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" public void displayMarkTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" printToScreen(INDENT + \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting());","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" * @param task The task that was marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" public void displayUnmarkTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" printToScreen(INDENT + \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting());","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" * @param taskList The list of tasks to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" public void displayList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" System.out.println(LINE + INDENT + \"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" System.out.println(INDENT_BIG + (i + 1) + \".\" + taskList.get(i).getTaskForPrinting());","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" * Prints a message to the screen, surrounded by the predefined line separator.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" public void printToScreen(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" System.out.println(LINE + message + LINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tllshan":93}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"deadline return book /by 2023-01-09","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"event holiday /from 2023-12-02 /to 2023-12-25","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":11}},{"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":"tllshan"},"content":"REM create classes directory if it doesn\u0027t exist","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"if not exist ..\\classes mkdir ..\\classes","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"REM compile each Java file separately into the classes folder","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"javac -d ..\\classes -cp ..\\src\\main\\java ..\\src\\main\\java\\chatterchicken\\*.java","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":"REM run the program, feed commands from input.txt file, and redirect the output to ACTUAL.TXT","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":"java -classpath ..\\classes chatterchicken.ChatterChicken \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tllshan":7,"-":17}}] +[{"path":"src/main/java/chatterchicken/CCException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"public class CCException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":" public CCException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":7}},{"path":"src/main/java/chatterchicken/ChatterChicken.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"import java.util.NoSuchElementException;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"public class ChatterChicken {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" public static final String LINE \u003d \"\\n _____________________________________________________________________________\\n \";","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" public static final String INDENT \u003d \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" public static final String INDENT_BIG \u003d \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" List list \u003d new List();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" System.out.println(LINE + \"Hello! I\u0027m ChatterChicken!\\n\" + INDENT + \"What can I do for you?\" + LINE);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" while(!input.equals(\"bye\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" list.printList();","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" String action \u003d input.substring(0, input.indexOf(\u0027 \u0027));","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" switch (action) {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" case \"mark\":","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" list.markTask(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" list.unmarkTask(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" case \"todo\":","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" case \"event\":","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" list.addTask(action, input);","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" exit();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" * Executes the specified command by invoking corresponding methods on the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" * @param command The parsed user command.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during command execution.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" private void executeCommand(Command command) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" String action \u003d command.getAction();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" String taskDescription \u003d command.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" switch (action) {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" case \"list\":","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" tasks.printList();","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" case \"mark\":","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" tasks.markTask(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" tasks.unmarkTask(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" case \"delete\":","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" tasks.deleteTask(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" case \"todo\":","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" case \"event\":","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" tasks.addTask(parser.parseTask(action, taskDescription));","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :\u003c\");","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" System.out.println(LINE + \"Bye. Hope to see you again soon!\" + LINE);","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":74}},{"path":"src/main/java/chatterchicken/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"public class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":" private final String action;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":" private final String taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" public Command(String action, String taskDescription) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" this.action \u003d action;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" public String getAction() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" return action;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" public String getTaskDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" return taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tllshan":19}},{"path":"src/main/java/chatterchicken/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import chatterchicken.CCException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import chatterchicken.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import chatterchicken.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import chatterchicken.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import chatterchicken.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import chatterchicken.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" * Parses the input command and creates a chatterchicken.Command object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" * This method extracts the action and task description from the input and returns a chatterchicken.Command object.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" * @param input The input command provided by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" * @return A chatterchicken.Command object representing the parsed command.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during parsing.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" public Command parseInput(String input) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" int space \u003d input.indexOf(\u0027 \u0027);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" String action \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" String taskDescription \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" if (space \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" action \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" action \u003d input.substring(0, space);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" taskDescription \u003d input.substring(space + 1, input.length());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" return new Command(action, taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" * Parses a task from a line of data file input and returns the corresponding Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" * This method extracts task details from the input, creates a chatterchicken.Command object, and parses the Task type.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" * @param fileLine The input line from the data file containing task details.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during parsing.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" public Task parseTaskFromFile(String fileLine) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" char done \u003d fileLine.charAt(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" String input \u003d fileLine.substring(1, fileLine.length());","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" Command command \u003d parseInput(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" Task task \u003d parseTask(command.getAction(), command.getTaskDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" if (done \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" task.setDone(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" * Parses a Task object based on its type and input details.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" * @param type The type of the task (todo, deadline, event).","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task details.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" * @throws CCException If an error occurs during parsing or task creation.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" public Task parseTask(String type, String input) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" task \u003d parseToDo(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" task \u003d parseDeadline(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" task \u003d parseEvent(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" * Parses the input string to create a new ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" * @return A new ToDo task object created from the provided description.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" * @throws CCException If the description is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" private ToDo parseToDo (String taskDescription) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" return new ToDo(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" * Parses the input string to create a new Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description and end time of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" * @return A new Deadline task object created from the provided description.","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":" * @throws CCException If the input format is incorrect or if there are empty fields.","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":" private Deadline parseDeadline(String taskDescription) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":" String[] fields \u003d taskDescription.split(\"/by\");","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" if (fields.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Incorrect format for deadline.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":" String name \u003d fields[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":" String end \u003d fields[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":" if (name.isEmpty() || end.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Empty field for deadline detected.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"tllshan"},"content":" return new Deadline(taskDescription, name, parseDate(end));","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"tllshan"},"content":" * Parses the input string to create a new Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"tllshan"},"content":" * @param taskDescription The description, start time, and end time of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"tllshan"},"content":" * @return A new Event task object created from the provided description.","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"tllshan"},"content":" * @throws CCException If the input format is incorrect or if there are empty fields.","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"tllshan"},"content":" private Event parseEvent(String taskDescription) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"tllshan"},"content":" String[] fields \u003d taskDescription.split(\"/from|/to\");","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"tllshan"},"content":" if (fields.length !\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Incorrect format for event.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"tllshan"},"content":" String name \u003d fields[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"tllshan"},"content":" String start \u003d fields[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"tllshan"},"content":" String end \u003d fields[2].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"tllshan"},"content":" if (name.isEmpty() || start.isEmpty() || end.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"OOPS!!! Empty field for event detected.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"tllshan"},"content":" return new Event(taskDescription, name, parseDate(start), parseDate(end));","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"tllshan"},"content":" * Parses a string into a LocalDate object.","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"tllshan"},"content":" * @param date The string containing a date to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"tllshan"},"content":" * @return A LocalDate object representing the parsed date.","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"tllshan"},"content":" private static LocalDate parseDate(String date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"tllshan"},"content":" return LocalDate.parse(date);","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"tllshan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"tllshan"},"content":" System.out.println(\"Error parsing date: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"tllshan"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tllshan":148}},{"path":"src/main/java/chatterchicken/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import chatterchicken.CCException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import chatterchicken.ChatterChicken;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import chatterchicken.parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import chatterchicken.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import chatterchicken.tasklist.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" public Storage(Parser parser) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" this.parser \u003d parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" * Loads tasks from the data file and returns them as an ArrayList.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" * If the data file doesn\u0027t exist, a new file is created.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" * @return An ArrayList containing the loaded tasks, or null in case of errors.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" public ArrayList\u003cTask\u003e loadTasksFromFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" File dataFile \u003d Paths.get(ChatterChicken.PATH).toAbsolutePath().toFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" dataFile.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(dataFile));","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" String currLine \u003d reader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" while (currLine !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" Task task \u003d parser.parseTaskFromFile(currLine);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" currLine \u003d reader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" return taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" System.err.println(\"An error occurred while loading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" } catch (CCException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" System.err.println(\"An error occurred while adding tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" * Saves tasks from the provided chatterchicken.tasklist.TaskList to the data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" * @param taskList The chatterchicken.tasklist.TaskList containing tasks to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" public void saveTasksToFile(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" File dataFile \u003d Paths.get(ChatterChicken.PATH).toAbsolutePath().toFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(dataFile));","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" String taskDescription \u003d task.getTaskForSaving() + \"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" writer.append(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" System.err.println(\"An error occurred while saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tllshan":75}},{"path":"src/main/java/chatterchicken/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" private final LocalDate end;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" public Deadline(String taskDescription, String name, LocalDate end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" super(taskDescription, name);","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" * Generates the formatted representation of the deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" * The format includes the task status, task type, description, and end time.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" * @return The formatted representation of the deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" public String getTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" return String.format(\"[%s][D] %s (by: %s)\", super.checkDone(), super.getName(), super.formatDate(end));","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" public String getTaskDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" return \"deadline \" + super.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":28}},{"path":"src/main/java/chatterchicken/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" private final LocalDate start;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" private final LocalDate end;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" public Event(String taskDescription, String name, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" super(taskDescription, name);","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" * Generates the formatted representation of the event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" * The format includes the task status, task type, description, start time, and end time.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" * @return The formatted representation of the event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" public String getTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" return String.format(\"[%s][E] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" super.checkDone(),","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" super.getName(),","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" super.formatDate(start),","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" super.formatDate(end));","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" public String getTaskDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" return \"event \" + super.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":35}},{"path":"src/main/java/chatterchicken/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" private final String taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" private final String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" public Task(String taskDescription, String name) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" public String getName() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" return this.name;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" public abstract String getTask();","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" protected String getTaskDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" return this.taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" public void setDone(boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" protected String checkDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" return isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" public String formatDate(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" return date.format(formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":40}},{"path":"src/main/java/chatterchicken/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":" public ToDo(String taskDescription) {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":" super(taskDescription, taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" * Generates the formatted representation of the todo task.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" * The format includes the task status, task type, and description.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" * @return The formatted representation of the todo task.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" public String getTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" return String.format(\"[%s][T] %s\", super.checkDone(), super.getName());","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" public String getTaskDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" return \"todo \" + super.getTaskDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":24}},{"path":"src/main/java/chatterchicken/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import chatterchicken.CCException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import chatterchicken.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"import chatterchicken.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"import java.util.concurrent.ForkJoinTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" * The chatterchicken.tasklist.TaskList class represents a collection of tasks managed by the chatterchicken.ChatterChicken task manager.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":" * It allows for adding, marking, unmarking, and deleting tasks, as well as printing the list of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" * along with their respective indexes. Tasks can be of different types: ToDo, Deadline, and Event.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":"public class TaskList implements Iterable\u003cTask\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" * Adds a new task to the task list based on the provided Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message with the added task\u0027s details.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":" * @param task The task to be added to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" * @throws CCException If there is an error in adding the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" public void addTask(Task task) throws CCException {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" System.out.println(ChatterChicken.LINE","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" + ChatterChicken.INDENT + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" + ChatterChicken.INDENT_BIG + task.getTaskForPrinting() + \"\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" + ChatterChicken.INDENT + \"Now you have \" + taskList.size() + \" tasks in the list.\"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" + ChatterChicken.LINE);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" * Marks a task as done based on the provided input.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message with the marked task\u0027s details.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information to mark as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" * @throws CCException If there is an error in marking the task or if the input is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" public void markTask(String input) throws CCException {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" Task task \u003d taskList.get(getIndex(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" task.setDone(true);","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" System.out.println(ChatterChicken.LINE","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":" + ChatterChicken.INDENT + \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" + ChatterChicken.INDENT_BIG + task.getTaskForPrinting()","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" + ChatterChicken.LINE);","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Invalid input for marking list of length \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" * Unmarks a previously marked task as not done based on the provided input.","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message with the unmarked task\u0027s details.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information to unmark.","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" * @throws CCException If there is an error in unmarking the task or if the input is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" public void unmarkTask(String input) throws CCException {","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" Task task \u003d taskList.get(getIndex(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" task.setDone(false);","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" System.out.println(ChatterChicken.LINE","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":" + ChatterChicken.INDENT + \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" + ChatterChicken.INDENT_BIG + task.getTaskForPrinting()","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" + ChatterChicken.LINE);","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Invalid input for list of length \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" * Deletes a task from the task list based on the provided input.","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" * Displays a confirmation message after deleting the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information to be deleted.","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":" * @throws CCException If there is an error in deleting the task or if the input is invalid.","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" public void deleteTask(String input) throws CCException {","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" int index \u003d getIndex(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" Task task \u003d taskList.get(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" taskList.remove(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" System.out.println(ChatterChicken.LINE","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" + ChatterChicken.INDENT + \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":" + ChatterChicken.INDENT_BIG + task.getTaskForPrinting() + \"\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"tllshan"},"content":" + ChatterChicken.INDENT + \"Now you have \" + taskList.size() + \" tasks in your list.\"","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"tllshan"},"content":" + ChatterChicken.LINE);","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"tllshan"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"tllshan"},"content":" throw new CCException(\"Invalid input for list of length \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"tllshan"},"content":" * Retrieves the index of a task based on the provided input.","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"tllshan"},"content":" * @param input The input containing task information and index as the last character.","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"tllshan"},"content":" * @return The index of the task parsed from the input.","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"tllshan"},"content":" private int getIndex(String input) {","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"tllshan"},"content":" return input.charAt(input.length() - 1) - \u00270\u0027 - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"tllshan"},"content":" * Prints the list of tasks with their respective indexes.","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"tllshan"},"content":" public void printList() {","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"tllshan"},"content":" System.out.println(ChatterChicken.LINE + ChatterChicken.INDENT + \"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"tllshan"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"tllshan"},"content":" System.out.println(ChatterChicken.INDENT_BIG + (i + 1) + \".\" + taskList.get(i).getTaskForPrinting());","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"tllshan"},"content":" System.out.println(ChatterChicken.LINE);","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"tllshan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"tllshan"},"content":" public Iterator\u003cTask\u003e iterator() {","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"tllshan"},"content":" return taskList.iterator();","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":126}},{"path":"src/main/java/chatterchicken/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"package chatterchicken.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"import chatterchicken.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":" private static final String LINE \u003d \"\\n _____________________________________________________________________________\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":" private static final String INDENT \u003d \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":" private static final String INDENT_BIG \u003d \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tllshan"},"content":" * Displays a greeting message to the user to introduce chatterchicken.ChatterChicken.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tllshan"},"content":" public void displayGreeting() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tllshan"},"content":" printToScreen(INDENT + \"Hello! I\u0027m chatterchicken.ChatterChicken!\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tllshan"},"content":" + INDENT + \"What can I do for you?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"tllshan"},"content":" * Displays a farewell message to the user as they exit the chatterchicken.ChatterChicken application.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tllshan"},"content":" public void displayFarewell() {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tllshan"},"content":" printToScreen(INDENT + \"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been added to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tllshan"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tllshan"},"content":" * @param size The updated size of the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tllshan"},"content":" public void displayAddTask(Task task, int size) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tllshan"},"content":" printToScreen(INDENT + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting() + \"\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tllshan"},"content":" + INDENT + \"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been deleted from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"tllshan"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"tllshan"},"content":" * @param size The updated size of the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tllshan"},"content":" public void displayDeleteTask(Task task, int size) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"tllshan"},"content":" printToScreen(INDENT + \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting() + \"\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tllshan"},"content":" + INDENT + \"Now you have \" + size + \" tasks in your list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"tllshan"},"content":" * @param task The task that was marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"tllshan"},"content":" public void displayMarkTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"tllshan"},"content":" printToScreen(INDENT + \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting());","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"tllshan"},"content":" * Displays a message indicating that a task has been marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"tllshan"},"content":" * @param task The task that was marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"tllshan"},"content":" public void displayUnmarkTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"tllshan"},"content":" printToScreen(INDENT + \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"tllshan"},"content":" + INDENT_BIG + task.getTaskForPrinting());","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"tllshan"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"tllshan"},"content":" * @param taskList The list of tasks to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"tllshan"},"content":" public void displayList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"tllshan"},"content":" System.out.println(LINE + INDENT + \"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"tllshan"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"tllshan"},"content":" System.out.println(INDENT_BIG + (i + 1) + \".\" + taskList.get(i).getTaskForPrinting());","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"tllshan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"tllshan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"tllshan"},"content":" * Prints a message to the screen, surrounded by the predefined line separator.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"tllshan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"tllshan"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"tllshan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"tllshan"},"content":" public void printToScreen(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"tllshan"},"content":" System.out.println(LINE + message + LINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"tllshan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"tllshan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tllshan":93}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tllshan"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"tllshan"},"content":"deadline return book /by 2023-01-09","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"tllshan"},"content":"event holiday /from 2023-12-02 /to 2023-12-25","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"tllshan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"tllshan"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"tllshan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"tllshan"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"tllshan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tllshan"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tllshan":11}},{"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":"tllshan"},"content":"REM create classes directory if it doesn\u0027t exist","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"tllshan"},"content":"if not exist ..\\classes mkdir ..\\classes","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"tllshan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"tllshan"},"content":"REM compile each Java file separately into the classes folder","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"tllshan"},"content":"javac -d ..\\classes -cp ..\\src\\main\\java ..\\src\\main\\java\\chatterchicken\\*.java","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"tllshan"},"content":"REM run the program, feed commands from input.txt file, and redirect the output to ACTUAL.TXT","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"tllshan"},"content":"java -classpath ..\\classes chatterchicken.ChatterChicken \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tllshan":7,"-":17}}] diff --git a/tllshan_ip_master/commits.json b/tllshan_ip_master/commits.json index e059de95..c5ee8528 100644 --- a/tllshan_ip_master/commits.json +++ b/tllshan_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"tllshan":[{"date":"2023-08-24","commitResults":[{"hash":"e19899ff10e632fa289211f8d8e938135c841a6a","isMergeCommit":false,"messageTitle":"Implemented Level 0. Rename, Greet, Exit","messageBody":"Renamed Duke to ChatterChicken.\nAdded greeting and exit.\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"755b682e8ec31a464d32aa47fc93d5260a432f83","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"Added indentation to lines printed.\nAdded scanner to echo user input.\nExits on \"bye\" input.\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"2c74862e1a0709ae32f202789fcf06fdcb61be43","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"Added Task and List classes.\nAdds user inputs as tasks to list.\nPrints list on \"list\" input.\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":3}}},{"hash":"e73d8b9c671388ccde2a1e5297e9538062a19503","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"Added isDone field in Task.\nAdded mechanism to mark and unmark tasks.\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":1}}},{"hash":"8a5136197e096f87e484dc0afd16a5c8486f9c0f","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"Task is an interface.\nToDo, Deadline and Event implement Task.\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":45}}},{"hash":"29f587354aaa4330fb54286602513c03190667cf","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"Tests if ACTUAL.TXT matches EXPECTED.TXT for given inputs in input.txt\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":11,"deletions":6},"bat":{"insertions":1,"deletions":1}}},{"hash":"53da15d1b08f8379b774b74e69b3a5ff04936266","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"Implemented error handling for faulty inputs.\nChanged Task from interface to abstract class.\n","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":169,"deletions":113}}},{"hash":"7dd7c63d7c1e3cfba33c548a5e740801dcaf268c","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"Added delete task function to list.\n","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":42,"deletions":21}}}]},{"date":"2023-08-27","commitResults":[{"hash":"372e72c763e2359c856d5367bfcf5a8d2d982d28","isMergeCommit":false,"messageTitle":"Add javadocs for classes and methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":154,"deletions":44}}}]},{"date":"2023-08-29","commitResults":[{"hash":"87ac7900d142afa7d73b09da66a521a9f39012a9","isMergeCommit":false,"messageTitle":"Implement Level-7 Save for ToDo","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":86,"deletions":12}}},{"hash":"4870db41d21c7518f4d7288cd9d082c58fd181a5","isMergeCommit":false,"messageTitle":"Implement Level-7 Save for Deadline and Event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":75}}},{"hash":"67349f35e8b1b4e54c6ef978ea53b9e2a687e84c","isMergeCommit":true,"messageTitle":"Merge pull request #1 from tllshan/branch-Level-7","messageBody":"Branch level 7","fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"be366b654e1cfb218a2f9695c9b9674397eed0a0","isMergeCommit":false,"messageTitle":"Implement Level-8 Dates","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":2},"java":{"insertions":36,"deletions":9}}},{"hash":"2b589150060b052c296805fe135112001365f2db","isMergeCommit":true,"messageTitle":"Merge pull request #2 from tllshan/branch-Level-8","messageBody":"Implement Level-8 Dates","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"f0c515313cb49519bc6f0b1b9defe1950e9f8220","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP: Storage and Parser","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":157,"deletions":145}}},{"hash":"bc533efc6180cb9306915a9ba9a25daa2e34c55a","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP: Command class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":134,"deletions":89}}},{"hash":"e0519ff7e4367b2d7882e909d919092b9e085506","isMergeCommit":false,"messageTitle":"Implemented Level 4. ToDos, Events, Deadlines","messageBody":"Task is an interface.\nToDo, Deadline and Event implement Task.\n","fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":45}}},{"hash":"449dd175b323f52b2adbf6f2cff6de02fa46699a","isMergeCommit":false,"messageTitle":"Implemented A-TextUiTesting","messageBody":"Tests if ACTUAL.TXT matches EXPECTED.TXT for given inputs in input.txt\n","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":11,"deletions":6},"bat":{"insertions":1,"deletions":1}}},{"hash":"3201aa418ea05480f6da27a1f8e75d726376ac08","isMergeCommit":false,"messageTitle":"Implemented Level 5. Handle Errors","messageBody":"Implemented error handling for faulty inputs.\nChanged Task from interface to abstract class.\n","fileTypesAndContributionMap":{"java":{"insertions":169,"deletions":113}}},{"hash":"8dfd4c56d154fdf6e8dbc325a330644d5a27fb4c","isMergeCommit":false,"messageTitle":"Implemented Level 6. Delete","messageBody":"Added delete task function to list.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":42,"deletions":21}}},{"hash":"4a148cfe47fbb284151f0aad9c189109e81aa40d","isMergeCommit":false,"messageTitle":"Added javadocs for classes and methods","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":154,"deletions":44}}},{"hash":"bbb3e5f30f33b2811fbdd8d31b484be420f8b8e5","isMergeCommit":false,"messageTitle":"Implemented Level-7 Save for ToDo","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":86,"deletions":12}}},{"hash":"9c3bf1a25e86aed763d8de290e4a514f2340803d","isMergeCommit":false,"messageTitle":"Implemented Level-7 Save for Deadline and Event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":75}}},{"hash":"4813d5ad8fae772c6be023fe2e60bcf9f0de540f","isMergeCommit":false,"messageTitle":"Implemented Level-8 Dates","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":2},"java":{"insertions":36,"deletions":9}}},{"hash":"e66d6361a229eae8e49eaf69cc6464a6bcc01340","isMergeCommit":false,"messageTitle":"Implemented A-MoreOOP: Storage and Parser","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":157,"deletions":145}}},{"hash":"39e30efa268d127557b8bac0047f798705d64293","isMergeCommit":false,"messageTitle":"Implemented A-MoreOOP: Command class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":134,"deletions":89}}},{"hash":"c2ee6aebe6c5afe766c07a1c6b48733f25849398","isMergeCommit":false,"messageTitle":"Fixed bug in Storage class for saving and loading mechanism","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":110,"deletions":76}}},{"hash":"9d6f86797c8e88a05219a169fbddd965e9b89a9c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/tllshan/ip","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"d8948e3f70fc82749437bec8bedcd37ddcfdcce1","isMergeCommit":false,"messageTitle":"Implemented A-MoreOOP: Ui class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":126,"deletions":71}}},{"hash":"70adbfa4b56412bfd95cb594ca6a5d728c842ec5","isMergeCommit":false,"messageTitle":"Implemented A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":16}}}]},{"date":"2023-09-04","commitResults":[{"hash":"807797a8a375181a41586e300c678d9ccada4f0a","isMergeCommit":true,"messageTitle":"Merge pull request #3 from tllshan/add-gradle-support","messageBody":"Add gradle support","fileTypesAndContributionMap":{}},{"hash":"ec88cf046e8f4aa79d1b873c4f0e92972352190e","isMergeCommit":false,"messageTitle":"Update runtest.bat for compatibility with package structure","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":7,"deletions":4}}},{"hash":"bdfd51a3a85c947ed6b60da44ae1a1b08af0c490","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/tllshan/ip","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"tllshan":{"java":664,"md":0,"fxml":0,"sh":0,"bat":7,"gradle":0,"txt":11}},"authorContributionVariance":{"tllshan":285540.22},"authorDisplayNameMap":{"tllshan":"CS2103T-F11-2 TSOU..NNON"}} +{"authorDailyContributionsMap":{"tllshan":[{"date":"2023-09-04","commitResults":[{"hash":"ded733ce76429e9d14456f7bfa68eec42948839f","isMergeCommit":false,"messageTitle":"Implement Level 0. Rename, Greet, Exit","messageBody":"Renamed Duke to ChatterChicken.\nAdded greeting and exit.\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"7eed96b90c0b0c4d6b9e32b6969ec1a4bfb8bdf9","isMergeCommit":false,"messageTitle":"Implement Level 1. Echo","messageBody":"Added indentation to lines printed.\nAdded scanner to echo user input.\nExits on \"bye\" input.\n","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"ab00251ac4651b3e23b59222deb5574aa463da57","isMergeCommit":false,"messageTitle":"Implement Level 2. Add, List","messageBody":"Added Task and List classes.\nAdds user inputs as tasks to list.\nPrints list on \"list\" input.\n","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":3}}},{"hash":"b5119194609cd57572c1edae5127939c5dd1514e","isMergeCommit":false,"messageTitle":"Implement Level 3. Mark as Done","messageBody":"Added isDone field in Task.\nAdded mechanism to mark and unmark tasks.\n","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":1}}},{"hash":"da8130dc9a0726c8271f1634fce0ff2f2388d6f5","isMergeCommit":false,"messageTitle":"Implement Level 4. ToDos, Events, Deadlines","messageBody":"Task is an interface.\nToDo, Deadline and Event implement Task.\n","fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":45}}},{"hash":"db7aadd74740b31580aad48358582c06c1360402","isMergeCommit":false,"messageTitle":"Implement A-TextUiTesting","messageBody":"Tests if ACTUAL.TXT matches EXPECTED.TXT for given inputs in input.txt\n","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":11,"deletions":6},"bat":{"insertions":1,"deletions":1}}},{"hash":"e6348a1f111151e3ed0b4aad5a9b62d81eccd250","isMergeCommit":false,"messageTitle":"Implement Level 5. Handle Errors","messageBody":"Implemented error handling for faulty inputs.\nChanged Task from interface to abstract class.\n","fileTypesAndContributionMap":{"java":{"insertions":169,"deletions":113}}},{"hash":"da427f4910a5b8ef76a3a99bc3796045465d3954","isMergeCommit":false,"messageTitle":"Implement Level 6. Delete","messageBody":"Added delete task function to list.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":42,"deletions":21}}},{"hash":"424d71e165460ab87bf6dda058202863c7d6d8e3","isMergeCommit":false,"messageTitle":"Add javadocs for classes and methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":154,"deletions":44}}},{"hash":"c018cda074a6ac3ff00d49588105f2dded3cebff","isMergeCommit":false,"messageTitle":"Implement Level-7 Save for ToDo","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":86,"deletions":12}}},{"hash":"7dbbdc412fbbf2361e1cfa68cbbe73cbfbba5178","isMergeCommit":false,"messageTitle":"Implement Level-7 Save for Deadline and Event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":75}}},{"hash":"26322622faae4e5e8188ae59d939f06e712e47b4","isMergeCommit":false,"messageTitle":"Implement Level-8 Dates","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":2},"java":{"insertions":36,"deletions":9}}},{"hash":"2ddf166eee00f418c739155a06d8854eaed17984","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP: Storage and Parser","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":157,"deletions":145}}},{"hash":"6ca484ea3c0b083b8739456d4796cd0134c152da","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP: Command class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":134,"deletions":89}}},{"hash":"2c25c710cbbf75bfac8e63b587d8c88dcc586d9b","isMergeCommit":false,"messageTitle":"Fix bug in Storage class for saving and loading mechanism","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":110,"deletions":76}}},{"hash":"8d16d19aa2bd24d1d215512db969559bdbd8ffc9","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"Task is an interface.\nToDo, Deadline and Event implement Task.\n","fileTypesAndContributionMap":{"java":{"insertions":150,"deletions":146}}},{"hash":"625f6fe7d09a3e5a506724c56d054f913e635351","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"Tests if ACTUAL.TXT matches EXPECTED.TXT for given inputs in input.txt\n","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":3}}},{"hash":"3eebf8900464b005463f0f71782c15f3ff7664cb","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"Implemented error handling for faulty inputs.\nChanged Task from interface to abstract class.\n","fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":90}}},{"hash":"1eddfd5ce2e1a833a65e426605c5a6621fd39058","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"Added delete task function to list.\n","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":20}}},{"hash":"31e125d00416ad7fd2872d158f7fea2b24ef23b2","isMergeCommit":false,"messageTitle":"Add javadocs for classes and methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":21}}},{"hash":"e7b2bbdbd414043aef0734b6fb04fcc23db6eeb6","isMergeCommit":false,"messageTitle":"Implement Level-7 Save for ToDo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":12}}},{"hash":"07c67e72e33c673dc136e318728739a5178ae83a","isMergeCommit":false,"messageTitle":"Implement Level-7 Save for Deadline and Event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":284}}},{"hash":"2703ff66e1b3a097ec524c22aa4367a1ee0234f1","isMergeCommit":false,"messageTitle":"Implement Level-8 Dates","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":23,"deletions":7}}},{"hash":"9a4c5620dc9d087eff3c55b51166e3e906c35713","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP: Storage and Parser","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3}}},{"hash":"78849f9ab681351ff20090bf6e63c28208a459f0","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP: Command class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":26,"deletions":11}}},{"hash":"460364f47513af518f83777db5bff36db74a8602","isMergeCommit":false,"messageTitle":"Implemented A-MoreOOP: Ui class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":92,"deletions":2}}},{"hash":"36c0acdeb1a577fbc874d12b4eb18e47009705b1","isMergeCommit":false,"messageTitle":"Implemented A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":12}}},{"hash":"7681dfbdcc087790e83c2b3ada1c944255b308c1","isMergeCommit":false,"messageTitle":"Update runtest.bat for compatibility with package structure","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":7,"deletions":4}}}]}]},"authorFileTypeContributionMap":{"tllshan":{"java":669,"md":0,"fxml":0,"sh":0,"bat":7,"gradle":0,"txt":11}},"authorContributionVariance":{"tllshan":548422.56},"authorDisplayNameMap":{"tllshan":"CS2103T-F11-2 TSOU..NNON"}} diff --git a/yongning0310_ip_master/authorship.json b/yongning0310_ip_master/authorship.json index 2fae969f..0e262194 100644 --- a/yongning0310_ip_master/authorship.json +++ b/yongning0310_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-31"},{"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":"yongning0310"},"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-31"},{"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":{"yongning0310":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":"yongning0310"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"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":{"yongning0310":1,"-":41}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"T | 0 | eat","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"T | 0 | sleep","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"D | 0 | return book | Feb 12 2019","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"D | 0 | return book | Oct 15 2019","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"E | 0 | return book | Feb 12 2019 | Feb 12 2019","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"E | 0 | return book | Oct 15 2019 1800 | Oct 15 2019 2000","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"E | 0 | return book | Feb 12 2019 1800 | Feb 12 2019 2000","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":7}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import duke.taskClasses.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":" * The main entry point for the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":" * It initializes the necessary components and runs the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" * Constructor for the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" * @param filePath The file path where tasks are saved and loaded.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" tasks \u003d storage.load();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" * Runs the Duke application by invoking the parser.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" Parser.run(ui, storage, tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" * The main method to launch the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" * @param args Command line arguments (not used).","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" new Duke(\"./data/tasks.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"yongning0310":41,"-":4}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import duke.exception.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"import duke.taskClasses.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" * Responsible for interpreting user commands and executing the appropriate actions.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" * Enum representing the possible command types that can be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" private enum Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" TODO, DEADLINE, EVENT, BYE, MARK, UNMARK, LIST, DELETE, CLEAR, FIND","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" * Interprets and processes user input, then calls the appropriate action based on the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" * @param ui The UI instance used to handle outputs to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" * @param storage The Storage instance used for reading/writing data.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" * @param taskList The TaskList instance holding the user\u0027s tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" public static void run(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" while (true) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" String input \u003d scanner.nextLine().trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" ui.newDashedLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" String[] details \u003d input.split(\"/\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" Command command;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" command \u003d getCommand(parts[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" executeCommand(command, ui, storage, taskList, parts, details, input);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" if (command \u003d\u003d Command.BYE) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" storage.writeToDB(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":" ui.newDashedLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":" scanner.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":" * Retrieves the command based on the given input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":" * @param input The user\u0027s command string.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":" * @return The corresponding Command.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":" * @throws InvalidInputException If the input does not correspond to any known command.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"yongning0310"},"content":" private static Command getCommand(String input) throws InvalidInputException {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"yongning0310"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"yongning0310"},"content":" return Command.valueOf(input.toUpperCase());","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"yongning0310"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"yongning0310"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"yongning0310"},"content":" * Executes the appropriate actions based on the given command.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"yongning0310"},"content":" * @param command The command to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"yongning0310"},"content":" * @param ui The UI instance used for user interactions.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"yongning0310"},"content":" * @param storage The storage instance for data persistence.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"yongning0310"},"content":" * @param taskList The current list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"yongning0310"},"content":" * @param parts The split input parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"yongning0310"},"content":" * @param details The split details.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"yongning0310"},"content":" * @param fullInput The complete user input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"yongning0310"},"content":" * @throws DukeException If any error occurs during command execution.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"yongning0310"},"content":" private static void executeCommand(Command command, Ui ui, Storage storage, TaskList taskList,","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"yongning0310"},"content":" String[] parts, String[] details, String fullInput) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"yongning0310"},"content":" // retrieve the task number for commands that require it","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"yongning0310"},"content":" Integer number \u003d (command \u003d\u003d Command.MARK || command \u003d\u003d Command.UNMARK || command \u003d\u003d Command.DELETE)","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"yongning0310"},"content":" ? getTaskNumber(parts, taskList) : null;","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"yongning0310"},"content":" switch (command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"yongning0310"},"content":" case BYE:","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"yongning0310"},"content":" ui.printBye();","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"yongning0310"},"content":" case DELETE:","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"yongning0310"},"content":" String content \u003d taskList.deleteTask(number);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"yongning0310"},"content":" ui.deleteTask(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"yongning0310"},"content":" ui.printTaskCount(taskList.getTasksCount());","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"yongning0310"},"content":" case LIST:","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"yongning0310"},"content":" ui.printList(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"yongning0310"},"content":" case UNMARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"yongning0310"},"content":" taskList.markTaskAsNotDone(number);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"yongning0310"},"content":" ui.printTaskMarkAsNotDone(taskList.getStatusAndDescription(number));","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"yongning0310"},"content":" case MARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"yongning0310"},"content":" taskList.markTaskAsDone(number);","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"yongning0310"},"content":" ui.printTaskMarkAsDone(taskList.getStatusAndDescription(number));","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"yongning0310"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"yongning0310"},"content":" String toDoDescription \u003d details[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"yongning0310"},"content":" if (toDoDescription.length() \u003c\u003d 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"yongning0310"},"content":" throw new InvalidToDoException();","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"yongning0310"},"content":" taskList.addToDoToList(false, toDoDescription.substring(5).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"yongning0310"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"yongning0310"},"content":" if (details[0].trim().length() \u003c\u003d 8 || !fullInput.contains(\"by\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"yongning0310"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"yongning0310"},"content":" String deadlineDescription \u003d details[0].split(\"/\")[0].substring(9).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"yongning0310"},"content":" String byTime \u003d fullInput.split(\"by\")[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"yongning0310"},"content":" taskList.addDeadlineToList(false, deadlineDescription, byTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"yongning0310"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"yongning0310"},"content":" if (details[0].trim().length() \u003c\u003d 5 || !fullInput.contains(\"from\") || !fullInput.contains(\"to\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"yongning0310"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"yongning0310"},"content":" String eventDescription \u003d details[0].split(\"/\")[0].substring(6).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"yongning0310"},"content":" String fromTime \u003d fullInput.split(\"from\")[1].split(\"/to\")[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"yongning0310"},"content":" String toTime \u003d fullInput.split(\"to\")[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"yongning0310"},"content":" taskList.addEventToList(false, eventDescription, fromTime, toTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"yongning0310"},"content":" case CLEAR:","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"yongning0310"},"content":" taskList.clear();","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"yongning0310"},"content":" case FIND:","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"yongning0310"},"content":" String findDescription \u003d details[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"yongning0310"},"content":" if (findDescription.length() \u003c\u003d 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"yongning0310"},"content":" throw new InvalidFindException();","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"yongning0310"},"content":" ui.printTaskContainingKeyword(taskList, findDescription.substring(5).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"yongning0310"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"yongning0310"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"yongning0310"},"content":" * Retrieves the task number from the input parts and checks if it\u0027s valid.","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"yongning0310"},"content":" * @param parts Parts of the command input.","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"yongning0310"},"content":" * @param taskList The current list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"yongning0310"},"content":" * @return The task number.","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"yongning0310"},"content":" * @throws InvalidListNumberException If the task number is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"yongning0310"},"content":" private static int getTaskNumber(String[] parts, TaskList taskList) throws InvalidListNumberException {","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"yongning0310"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"yongning0310"},"content":" int number \u003d Integer.parseInt(parts[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"yongning0310"},"content":" if (number \u003c 0 || number \u003e taskList.getTasksCount()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"yongning0310"},"content":" throw new InvalidListNumberException();","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"yongning0310"},"content":" return number;","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"yongning0310"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"yongning0310"},"content":" throw new InvalidListNumberException();","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":180}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"import duke.taskClasses.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"import duke.taskClasses.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" * Represents a storage mechanism for saving and loading task lists.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" private final String filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" * Constructs a new storage instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" * @param filePath The path to the file where tasks are saved and loaded.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" * Loads tasks from the file into a TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" * @return A TaskList containing the loaded tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" public TaskList load() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" String line \u003d s.nextLine().trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" String[] taskParts \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" boolean isDone \u003d taskParts[1].trim().equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" switch (taskParts[0].trim()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" taskList.addToDoToList(isDone, taskParts[2].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":" taskList.addDeadlineToList(isDone, taskParts[2].trim(), taskParts[3].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":" taskList.addEventToList(isDone, taskParts[2].trim(), taskParts[3].trim(), taskParts[4].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Unexpected task type encountered: \" + line);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":" } catch (InvalidDateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Invalid date format encountered in some tasks. Please check.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"yongning0310"},"content":" s.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"yongning0310"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"The file is not found. Initializing an empty task list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"yongning0310"},"content":" return taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"yongning0310"},"content":" * Writes the given task list to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"yongning0310"},"content":" * @param taskList The list of tasks to be saved.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"yongning0310"},"content":" public void writeToDB(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"yongning0310"},"content":" StringBuilder content \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"yongning0310"},"content":" for (Task task : taskList.getList()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"yongning0310"},"content":" content.append(task.getDBString()).append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"yongning0310"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"yongning0310"},"content":" Path path \u003d Paths.get(this.filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"yongning0310"},"content":" Files.write(path, content.toString().getBytes());","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"yongning0310"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"An error occurred while writing to the file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"yongning0310"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":90}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import duke.taskClasses.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":" * Represents the user interface of the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" * Constructs a new Ui instance and displays the welcome message.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" public Ui() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" String logo \u003d \" ██▄ ████▄ ▄ ▄▀ \\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" \"█ █ █ █ █ ▄▀ \\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" \"█ █ █ █ ██ █ █ ▀▄ \\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" \"█ █ ▀████ █ █ █ █ █ \\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" \"███▀ █ █ █ ███ \\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" \" █ ██ \\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" \" \";","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"What can I do for you?\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" * Prints a message to inform that the task has been marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" * @param taskContent The content of the task that has been marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" public void printTaskMarkAsDone(String taskContent) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" System.out.println(\" \" + taskContent);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" * Prints a message to inform that the task has been marked as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" * @param taskContent The content of the task that has been marked as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" public void printTaskMarkAsNotDone(String taskContent) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" System.out.println(\" \" + taskContent);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" * Informs the user that there was an error loading data from storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"ERROR reading the file, might be corrupted\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":" * Prints all the tasks available in the provided task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":" * @param tasks The task list containing tasks to print.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" public void printList(TaskList tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":" tasks.printAllStatusAndDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"yongning0310"},"content":" * Prints a dashed line for visual separation in the interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"yongning0310"},"content":" public void newDashedLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"yongning0310"},"content":" * Informs the user that a task has been deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"yongning0310"},"content":" * @param content The content of the deleted task.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"yongning0310"},"content":" public void deleteTask(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"yongning0310"},"content":" System.out.println(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"yongning0310"},"content":" * Informs the user about the current count of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"yongning0310"},"content":" * @param count The current number of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"yongning0310"},"content":" public void printTaskCount(int count) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"yongning0310"},"content":" System.out.println(String.format(\"Now you have %s tasks in the list.\", count));","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"yongning0310"},"content":" * Prints all the tasks available in the provided task list that contains the keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"yongning0310"},"content":" * @param tasks The task list containing tasks to print.","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"yongning0310"},"content":" public void printTaskContainingKeyword(TaskList tasks, String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"yongning0310"},"content":" tasks.printAllStatusAndDescriptionWithKeyword(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"yongning0310"},"content":" * Prints a goodbye message.","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"yongning0310"},"content":" public void printBye() {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":105}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents a custom exception for the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" * Specific types of exceptions should extend this class.","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"public abstract class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" * Default constructor for duke.exception.DukeException.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" public DukeException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" * Returns the string representation of the duke.exception.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * It calls the toString() method from the superclass.","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" * @return A string representing the duke.exception.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" return super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":26}},{"path":"src/main/java/duke/exception/InvalidDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents an exception when an invalid datetime format is provided to the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"public class InvalidDateTimeException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Default constructor for InvalidDateTimeException.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" public InvalidDateTimeException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" * Returns a custom message indicating an invalid datetime format.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * @return A string explaining the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" return \"☹ OOPS!!! The datetime format is invalid.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yongning0310":24}},{"path":"src/main/java/duke/exception/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents an exception when an invalid deadline format is provided to the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"public class InvalidDeadlineException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Default constructor for InvalidDeadlineException.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" public InvalidDeadlineException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" * Returns a custom message indicating an invalid deadline format.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * @return A string explaining the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" return \"☹ OOPS!!! The description of a deadline cannot be empty.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yongning0310":25}},{"path":"src/main/java/duke/exception/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents an exception when an invalid event format is provided to the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"public class InvalidEventException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Default constructor for InvalidEventException.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" public InvalidEventException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" * Returns a custom message indicating an invalid event format.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * @return A string explaining the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" return \"☹ OOPS!!! The description of an event cannot be empty.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":25}},{"path":"src/main/java/duke/exception/InvalidFindException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents an exception when an invalid find format is provided to the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"public class InvalidFindException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Default constructor for InvalidFindException.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" public InvalidFindException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" * Returns a custom message indicating an invalid find format.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * @return A string explaining the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" return \"☹ OOPS!!! The description of a find cannot be empty.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":24}},{"path":"src/main/java/duke/exception/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents an exception when an invalid input is provided to the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"public class InvalidInputException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Default constructor for InvalidInputException.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" public InvalidInputException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" * Returns a custom message indicating an invalid input.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * @return A string explaining the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" return \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":24}},{"path":"src/main/java/duke/exception/InvalidListNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents an exception when an invalid numbering for list of tasks is provided to the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"public class InvalidListNumberException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Default constructor for InvalidListNumberException.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" public InvalidListNumberException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" * Returns a custom message indicating an invalid numbering provided for list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * @return A string explaining the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" return \"☹ OOPS!!! The task number entered is invalid.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":25}},{"path":"src/main/java/duke/exception/InvalidToDoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents an exception when an invalid to do format is provided to the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"public class InvalidToDoException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Default constructor for InvalidToDoException.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" public InvalidToDoException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" * Returns a custom message indicating an invalid to do format.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * @return A string explaining the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" return \"☹ OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":24}},{"path":"src/main/java/duke/taskClasses/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.taskClasses;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"import duke.utils.DateTimeUtils;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Represents a deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" * A deadline task has a description and a specific end date and time by which the task should be completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" /** The end date and time for the deadline task. */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" protected LocalDateTime date;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * Constructs a new Deadline object with a given description and date.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" * @param date The end date and time for the deadline in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" * @throws InvalidDateTimeException If the provided date string is not in a valid format.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" public Deadline(String description, String date) throws InvalidDateTimeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" super(description, \"D\");","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" this.date \u003d DateTimeUtils.stringToLocalDateTime(date);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" this.addedTaskDescription();","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" * Returns a formatted string with details specific to the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" * @return A string representation of the deadline details.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" public String getDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" return String.format(\" (by: %s)\", DateTimeUtils.localDateTimeToString(this.date));","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" * Returns a formatted string suitable for database storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" * @return A string representation of the deadline task formatted for database storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" public String getDBString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" return String.format(\"%s | %s | %s | %s\", \"D\", this.isDone() ? \"1\" : \"0\", this.description,","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" DateTimeUtils.localDateTimeToStringForDb(this.date));","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":49}},{"path":"src/main/java/duke/taskClasses/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.taskClasses;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"import duke.utils.DateTimeUtils;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Represents an event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" * An event task has a description, a start date and time, and an end date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" /** The start date and time for the event. */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" /** The end date and time for the event. */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" * Constructs a new Event object with a given description, start date, and end date.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" * @param start The start date and time for the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" * @param end The end date and time for the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" * @throws InvalidDateTimeException If the provided date strings are not in a valid format.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" public Event(String description, String start, String end) throws InvalidDateTimeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":" super(description, \"E\");","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" this.start \u003d DateTimeUtils.stringToLocalDateTime(start);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" this.end \u003d DateTimeUtils.stringToLocalDateTime(end);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" this.addedTaskDescription();","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" * Returns a formatted string with details specific to the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" * @return A string representation of the event details.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" public String getDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" return String.format(\" (from: %s to: %s)\", DateTimeUtils.localDateTimeToString(this.start), DateTimeUtils.localDateTimeToString(this.end));","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" * Returns a formatted string suitable for database storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" * @return A string representation of the event task formatted for database storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" public String getDBString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":" return String.format(\"%s | %s | %s | %s | %s\",","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":" \"E\",","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":" this.isDone() ? \"1\" : \"0\",","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":" this.description,","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":" DateTimeUtils.localDateTimeToStringForDb(this.start),","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":" DateTimeUtils.localDateTimeToStringForDb(this.end));","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":58}},{"path":"src/main/java/duke/taskClasses/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.taskClasses;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Abstract class representing a general task.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" * Specific types of tasks (e.g., ToDo, Deadline, Event) should extend this class.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" /** Description of the task */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" protected String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" /** Task completion status */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /** Type of the task (e.g., TODO, DEADLINE, EVENT) */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" protected String type;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" * Constructor to initialize a Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" * @param type Type of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" public Task(String description, String type) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" * Abstract method to get additional details of a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" * Implementation should be provided in subclasses.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" * @return A string representing additional details of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" public abstract String getDetails();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" * Abstract method to get the database string representation of a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" * Implementation should be provided in subclasses.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" * @return A string suitable for database storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" public abstract String getDBString();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" * Prints the description of the added task.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":" public void addedTaskDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":" System.out.println(\" \" + this.getStatusAndDescription());","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":" * Returns the status icon based on task completion.","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" * @return \"X\" if the task is done, \" \" otherwise.","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"yongning0310"},"content":" * Returns the type of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"yongning0310"},"content":" * @return A string representing the task type.","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"yongning0310"},"content":" public String getType() {","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"yongning0310"},"content":" return this.type;","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"yongning0310"},"content":" * Returns the status icon, task type, description, and additional details.","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"yongning0310"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"yongning0310"},"content":" public String getStatusAndDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"yongning0310"},"content":" return String.format(\"[%s][%s] %s%s\",","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"yongning0310"},"content":" this.getType(),","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"yongning0310"},"content":" this.getStatusIcon(),","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"yongning0310"},"content":" this.description,","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"yongning0310"},"content":" this.getDetails());","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"yongning0310"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"yongning0310"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"yongning0310"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"yongning0310"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"yongning0310"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"yongning0310"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"yongning0310"},"content":" * Returns the completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"yongning0310"},"content":" * @return True if the task is done, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"yongning0310"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"yongning0310"},"content":" return this.isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"yongning0310"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"yongning0310"},"content":" * @return A string representing the task\u0027s description.","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"yongning0310"},"content":" return this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":117}},{"path":"src/main/java/duke/taskClasses/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.taskClasses;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Provides methods to manipulate and interact with the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" /** List of tasks */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" private ArrayList\u003cTask\u003e taskLists;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" /** Count of tasks in the list */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" private int taskCount \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" * Constructs a new TaskList with an existing list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" * @param taskLists List of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" public TaskList(ArrayList\u003cTask\u003e taskLists) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" this.taskLists \u003d taskLists;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":" * Constructs a new empty TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" this.taskLists \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" * @return ArrayList of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" return this.taskLists;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" * Prints the status and description of all tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" public void printAllStatusAndDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" for (int i \u003d 0; i \u003c taskLists.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":" Task taskToPrint \u003d taskLists.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" System.out.println((i + 1) + \". \" + taskToPrint.getStatusAndDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":" * Returns the status and description of the task at the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" * @param number The index of the task in the list (1-based).","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":" * @return String representation of the task status and description.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":" public String getStatusAndDescription(int number) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":" return taskLists.get(number - 1).getStatusAndDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"yongning0310"},"content":" * Returns the count of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"yongning0310"},"content":" * @return The task count.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"yongning0310"},"content":" public int getTasksCount() {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"yongning0310"},"content":" return this.taskCount;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"yongning0310"},"content":" * Adds a ToDo task to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"yongning0310"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"yongning0310"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"yongning0310"},"content":" public void addToDoToList(Boolean isDone, String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"yongning0310"},"content":" Task newTask \u003d new ToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"yongning0310"},"content":" if (isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"yongning0310"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"yongning0310"},"content":" taskLists.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"yongning0310"},"content":" this.taskCount++;","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"yongning0310"},"content":" * Adds a Deadline task to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"yongning0310"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"yongning0310"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"yongning0310"},"content":" * @param date Due date of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"yongning0310"},"content":" * @throws InvalidDateTimeException If the provided date string is not in a valid format.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"yongning0310"},"content":" public void addDeadlineToList(Boolean isDone, String description, String date) throws InvalidDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"yongning0310"},"content":" Task newTask \u003d new Deadline(description, date);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"yongning0310"},"content":" if (isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"yongning0310"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"yongning0310"},"content":" taskLists.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"yongning0310"},"content":" this.taskCount++;","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"yongning0310"},"content":" * Adds an Event task to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"yongning0310"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"yongning0310"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"yongning0310"},"content":" * @param start Start date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"yongning0310"},"content":" * @param end End date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"yongning0310"},"content":" * @throws InvalidDateTimeException If the provided date strings are not in a valid format.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"yongning0310"},"content":" public void addEventToList(Boolean isDone, String description, String start, String end) throws InvalidDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"yongning0310"},"content":" Task newTask \u003d new Event(description, start, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"yongning0310"},"content":" if (isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"yongning0310"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"yongning0310"},"content":" taskLists.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"yongning0310"},"content":" this.taskCount++;","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"yongning0310"},"content":" * Clears the task count. Note: This does not clear the task list itself.","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"yongning0310"},"content":" public void clear() {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"yongning0310"},"content":" this.taskCount \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"yongning0310"},"content":" * Deletes the task at the given index and returns its details.","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"yongning0310"},"content":" * @param number The index of the task to delete (1-based).","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"yongning0310"},"content":" * @return The string representation of the deleted task.","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"yongning0310"},"content":" public String deleteTask(int number) {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"yongning0310"},"content":" String content \u003d taskLists.get(number - 1).getStatusAndDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"yongning0310"},"content":" taskLists.remove(number - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"yongning0310"},"content":" this.taskCount--;","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"yongning0310"},"content":" return content;","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"yongning0310"},"content":" * Marks the task at the given index as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"yongning0310"},"content":" * @param number The index of the task to mark as done (1-based).","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"yongning0310"},"content":" public void markTaskAsDone(int number) {","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"yongning0310"},"content":" taskLists.get(number - 1).markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"yongning0310"},"content":" * Marks the task at the given index as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"yongning0310"},"content":" * @param number The index of the task to mark as not done (1-based).","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"yongning0310"},"content":" public void markTaskAsNotDone(int number) {","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"yongning0310"},"content":" taskLists.get(number - 1).markAsNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"yongning0310"},"content":" * Prints the status and description of all tasks in the list that contains the keyword in description.","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"yongning0310"},"content":" public void printAllStatusAndDescriptionWithKeyword (String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"yongning0310"},"content":" for (int i \u003d 0; i \u003c taskLists.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"yongning0310"},"content":" Task taskToPrint \u003d taskLists.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"yongning0310"},"content":" if (taskToPrint.description.contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"yongning0310"},"content":" System.out.println((i + 1) + \". \" + taskToPrint.getStatusAndDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":172}},{"path":"src/main/java/duke/taskClasses/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.taskClasses;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" * ToDo tasks are a type of task with only a description and no additional time-related details.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" * Constructs a new ToDo task with the given description.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" super(description, \"T\");","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" this.addedTaskDescription();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" * Provides additional details for the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" * Since ToDo tasks have no extra details, this returns an empty string.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" * @return An empty string.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" public String getDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" return \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" * Provides a formatted string for storing the ToDo task in a database.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" * @return A formatted string representing the ToDo task for storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" public String getDBString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" return String.format(\"%s | %s | %s\",","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" \"T\", this.isDone() ? \"1\" : \"0\",","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":41}},{"path":"src/main/java/duke/utils/DateTimeUtils.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.utils;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" * Provides utility methods for converting and manipulating date and time objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":"public class DateTimeUtils {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" * Converts a LocalDateTime object to a formatted string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" * @param dateTime The LocalDateTime object to be converted.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" * @return The formatted string representation of the dateTime.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" public static String localDateTimeToString(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"h:mma\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" String result \u003d dateTime.format(dateFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" if (!(dateTime.getHour() \u003d\u003d 0 \u0026\u0026 dateTime.getMinute() \u003d\u003d 0)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" result +\u003d \" \" + dateTime.format(timeFormatter).toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" return result;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" * Converts a LocalDateTime object to a formatted string representation for db.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" * @param dateTime The LocalDateTime object to be converted.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" * @return The formatted db string representation of the dateTime.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" public static String localDateTimeToStringForDb(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" String result \u003d dateTime.format(dateFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":" if (!(dateTime.getHour() \u003d\u003d 0 \u0026\u0026 dateTime.getMinute() \u003d\u003d 0)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" result +\u003d \" \" + dateTime.format(timeFormatter).toLowerCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":" return result;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" * Converts a date and time string to a LocalDateTime object. Supports multiple formats.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":" * @param dateTimeString The string representation of the date and time to be converted.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":" * @return The corresponding LocalDateTime object.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":" * @throws InvalidDateTimeException if the dateTimeString cannot be parsed into any supported format.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"yongning0310"},"content":" public static LocalDateTime stringToLocalDateTime(String dateTimeString) throws InvalidDateTimeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"yongning0310"},"content":" List\u003cString\u003e patterns \u003d Arrays.asList(","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"yongning0310"},"content":" \"MMM d yyyy HHmm\",","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"yongning0310"},"content":" \"M/d/yyyy HHmm\",","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"yongning0310"},"content":" \"M/d/yyyy\",","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"yongning0310"},"content":" \"yyyy-MM-dd\",","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"yongning0310"},"content":" \"yyyy-MM-dd HHmm\",","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"yongning0310"},"content":" \"MMM d yyyy\"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"yongning0310"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"yongning0310"},"content":" for (String pattern : patterns) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"yongning0310"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"yongning0310"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(pattern);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"yongning0310"},"content":" if (pattern.contains(\"H\") || pattern.contains(\"h\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"yongning0310"},"content":" return LocalDateTime.parse(dateTimeString, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"yongning0310"},"content":" LocalDate date \u003d LocalDate.parse(dateTimeString, formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"yongning0310"},"content":" return date.atStartOfDay();","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"yongning0310"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"yongning0310"},"content":" // If parsing fails, continue to the next pattern","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"yongning0310"},"content":" System.out.println(dateTimeString);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"yongning0310"},"content":" // If none of the patterns matched, throw an exception","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"yongning0310"},"content":" throw new InvalidDateTimeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yongning0310":91}},{"path":"src/test/java/taskClasses/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package taskClasses;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"import duke.taskClasses.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" @BeforeEach","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" public void setUp() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" public void testAddToDoWithDescriptionOnly() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" tasks.addToDoToList(false, \"Study Java\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" assertEquals(1, tasks.getTasksCount());","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"[T][ ] Study Java\", tasks.getStatusAndDescription(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" public void testAddToDoMarkedAsDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" tasks.addToDoToList(true, \"Read a novel\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" assertEquals(1, tasks.getTasksCount());","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"[T][X] Read a novel\", tasks.getStatusAndDescription(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" public void testAddMultipleToDos() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" tasks.addToDoToList(true, \"Task 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" tasks.addToDoToList(false, \"Task 2\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" assertEquals(2, tasks.getTasksCount());","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"[T][X] Task 1\", tasks.getStatusAndDescription(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"[T][ ] Task 2\", tasks.getStatusAndDescription(2));","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" public void testAddEventWithDates() throws InvalidDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" tasks.addEventToList(false, \"Duke project meeting\", \"2023-09-01\", \"2023-09-02\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" assertEquals(1, tasks.getTasksCount());","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"[E][ ] Duke project meeting (from: Sep 1 2023 to: Sep 2 2023)\", tasks.getStatusAndDescription(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":" public void testAddEventWithStartDateAfterEndDate() {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":" assertThrows(InvalidDateTimeException.class, () -\u003e tasks.addEventToList(false, \"Duke project meeting\", \"2023-09-40\", \"2023-09-02\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":" public void testAddEventMarkedAsDone() throws InvalidDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":" tasks.addEventToList(true, \"Graduation\", \"2023-10-01\", \"2023-10-02\");","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":" assertEquals(1, tasks.getTasksCount());","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"[E][X] Graduation (from: Oct 1 2023 to: Oct 2 2023)\", tasks.getStatusAndDescription(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":64}},{"path":"src/test/java/utils/DateTimeUtilsTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package utils;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"import duke.utils.DateTimeUtils;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"public class DateTimeUtilsTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" public void testLocalDateTimeToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" // Test case 1: Non-midnight time","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" LocalDateTime testDateTime1 \u003d LocalDateTime.of(2023, 8, 31, 14, 30);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"Aug 31 2023 2pm\", DateTimeUtils.localDateTimeToString(testDateTime1));","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" // Test case 2: Midnight time","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" LocalDateTime testDateTime2 \u003d LocalDateTime.of(2023, 8, 31, 0, 0);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"Aug 31 2023\", DateTimeUtils.localDateTimeToString(testDateTime2));","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" public void testStringToLocalDateTime() throws InvalidDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" // Test case 1: Using format M/d/yyyy HHmm","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" String testString1 \u003d \"8/31/2023 1430\";","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" assertEquals(LocalDateTime.of(2023, 8, 31, 14, 30), DateTimeUtils.stringToLocalDateTime(testString1));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":" // Test case 2: Using format M/d/yyyy","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" String testString2 \u003d \"8/31/2023\";","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" assertEquals(LocalDateTime.of(2023, 8, 31, 0, 0), DateTimeUtils.stringToLocalDateTime(testString2));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" // Test case 3: Using format yyyy-MM-dd","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" String testString3 \u003d \"2023-08-31\";","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" assertEquals(LocalDateTime.of(2023, 8, 31, 0, 0), DateTimeUtils.stringToLocalDateTime(testString3));","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" // Test case 4: Using format yyyy-MM-dd HHmm","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" String testString4 \u003d \"2023-08-31 1430\";","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" assertEquals(LocalDateTime.of(2023, 8, 31, 14, 30), DateTimeUtils.stringToLocalDateTime(testString4));","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" public void testInvalidStringToLocalDateTime() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" // Test case 1: Invalid format","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" String testString1 \u003d \"31 Aug 2023\";","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" assertThrows(InvalidDateTimeException.class, () -\u003e DateTimeUtils.stringToLocalDateTime(testString1));","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" // Test case 2: Invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":" String testString2 \u003d \"8/32/2023\";","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" assertThrows(InvalidDateTimeException.class, () -\u003e DateTimeUtils.stringToLocalDateTime(testString2));","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":53}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":1}},{"path":"text-ui-test/input1.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"todo task","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"mark 100","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":"bye","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":"deadline return book /by 2/12/2019","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":"deadline return book /by 2/12/2019 1800","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":"deadline return book /by 2019-10-15","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":"deadline return book /by 2019-10-15 1800","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":"event return book /from 2019-10-15 1800 /to 2019-10-15 2000","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"event return book /from 2/12/2019 1800 /to 2/12/2019 2000","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":"event return book /from 2/12/2019 /to 2/12/2019","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":"event return book /from 2/12/2019 2500 /to 2/12/2019 2000","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yongning0310":26}},{"path":"text-ui-test/runtest1.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"then","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":" mkdir ../bin","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"fi","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"# delete output from previous run","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"if [ -e \"./ACTUAL1.TXT\" ]","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"then","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" rm ACTUAL1.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"fi","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":"then","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" exit 1","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":"fi","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":"java -classpath ../bin Duke \u003c input1.txt \u003e ACTUAL1.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":"# convert to UNIX format","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":"cp EXPECTED1.TXT EXPECTED1-UNIX.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":"dos2unix ACTUAL1.TXT EXPECTED1-UNIX.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":"# compare the output to the expected output","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":"diff ACTUAL1.TXT EXPECTED1-UNIX.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":"then","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" exit 0","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":"else","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" exit 1","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":"fi","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":38}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-31"},{"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":"yongning0310"},"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-31"},{"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":{"yongning0310":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":"yongning0310"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"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":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" String javaFxVersion \u003d \u002717.0.8\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"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":"yongning0310"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"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"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"yongning0310":21,"-":41}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"T | 0 | eat","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"T | 0 | sleep","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"D | 0 | return book | Feb 12 2019","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"D | 0 | return book | Oct 15 2019","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"E | 0 | return book | Feb 12 2019 | Feb 12 2019","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"E | 0 | return book | Oct 15 2019 1800 | Oct 15 2019 2000","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"E | 0 | return book | Feb 12 2019 1800 | Feb 12 2019 2000","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":7}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" private Label text;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" text \u003d l;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" public static DialogBox getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"yongning0310":47}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"//","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"//import duke.taskclasses.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"//","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"///**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"// * The main entry point for the Duke application.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"// * It initializes the necessary components and runs the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"// */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"//public class Duke {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"// private Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"// private TaskList tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"// private Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"//","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"// /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":"// * Constructor for the Duke application.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":"// *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":"// * @param filePath The file path where tasks are saved and loaded.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":"// */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":"// public Duke(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":"// ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":"// storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":"// try {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":"// tasks \u003d storage.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"// } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":"// ui.showLoadingError();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":"// tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":"// }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":"// }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":"//","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":"// /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":"// * Runs the Duke application by invoking the parser.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":"// */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":"// public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":"// Parser.run(ui, storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":"// }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":"//","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":"// /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":"// * The main method to launch the Duke application.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":"// *","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":"// * @param args Command line arguments (not used).","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":"// */","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":"// public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":"// new Duke(\"./data/tasks.txt\").run();","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":"// }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":"//}","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"yongning0310"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"yongning0310"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"yongning0310"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"yongning0310"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"yongning0310"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"yongning0310"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"yongning0310"},"content":" private Scene scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"yongning0310"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"yongning0310"},"content":" // ...","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"yongning0310"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"yongning0310"},"content":" //Step 1. Setting up required components","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"yongning0310"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"yongning0310"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"yongning0310"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"yongning0310"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"yongning0310"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"yongning0310"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"yongning0310"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"yongning0310"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"yongning0310"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"yongning0310"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"yongning0310"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"yongning0310"},"content":" //Step 2. Formatting the window to look as expected","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"yongning0310"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"yongning0310"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"yongning0310"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"yongning0310"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"yongning0310"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"yongning0310"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"yongning0310"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"yongning0310"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"yongning0310"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"yongning0310"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"yongning0310"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"yongning0310"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"yongning0310"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"yongning0310"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"yongning0310"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"yongning0310"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"yongning0310"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"yongning0310"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"yongning0310"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"yongning0310"},"content":" //Step 3. Add functionality to handle user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"yongning0310"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"yongning0310"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"yongning0310"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"yongning0310"},"content":" });","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"yongning0310"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"yongning0310"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"yongning0310"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"yongning0310"},"content":" });","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"yongning0310"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"yongning0310"},"content":" //Part 3. Add functionality to handle user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"yongning0310"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"yongning0310"},"content":" handleUserInput();","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"yongning0310"},"content":" });","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"yongning0310"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"yongning0310"},"content":" handleUserInput();","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"yongning0310"},"content":" });","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"yongning0310"},"content":" * Iteration 1:","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"yongning0310"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"yongning0310"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"yongning0310"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"yongning0310"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"yongning0310"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"yongning0310"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"yongning0310"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"yongning0310"},"content":" return textToAdd;","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"yongning0310"},"content":" * Iteration 2:","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"yongning0310"},"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":164,"author":{"gitId":"yongning0310"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"yongning0310"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"yongning0310"},"content":" Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"yongning0310"},"content":" Label dukeText \u003d new Label(getResponse(userInput.getText()));","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"yongning0310"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"yongning0310"},"content":" DialogBox.getUserDialog(userText, new ImageView(user)),","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"yongning0310"},"content":" DialogBox.getDukeDialog(dukeText, new ImageView(duke))","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"yongning0310"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"yongning0310"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"yongning0310"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"yongning0310"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"yongning0310"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":181,"author":{"gitId":"yongning0310"},"content":" return \"Duke heard: \" + input;","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":183,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"yongning0310":181,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" Application.launch(Duke.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"yongning0310":14}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidDeadlineException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidEventException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidFindException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidInputException;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidListNumberException;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidToDoException;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"import duke.taskclasses.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * Responsible for interpreting user commands and executing the appropriate actions.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" * Enum representing the possible command types that can be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" private enum Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" TODO, DEADLINE, EVENT, BYE, MARK, UNMARK, LIST, DELETE, CLEAR, FIND","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" * Interprets and processes user input, then calls the appropriate action based on the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" * @param ui The UI instance used to handle outputs to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" * @param storage The Storage instance used for reading/writing data.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" * @param taskList The TaskList instance holding the user\u0027s tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" public static void run(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" while (true) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" String input \u003d scanner.nextLine().trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" ui.newDashedLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" String[] details \u003d input.split(\"/\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" Command command;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" command \u003d getCommand(parts[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" executeCommand(command, ui, storage, taskList, parts, details, input);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" if (command \u003d\u003d Command.BYE) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":" storage.writeToDB(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":" ui.newDashedLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":" scanner.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"yongning0310"},"content":" * Retrieves the command based on the given input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"yongning0310"},"content":" * @param input The user\u0027s command string.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"yongning0310"},"content":" * @return The corresponding Command.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"yongning0310"},"content":" * @throws InvalidInputException If the input does not correspond to any known command.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"yongning0310"},"content":" private static Command getCommand(String input) throws InvalidInputException {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"yongning0310"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"yongning0310"},"content":" return Command.valueOf(input.toUpperCase());","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"yongning0310"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"yongning0310"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"yongning0310"},"content":" * Executes the appropriate actions based on the given command.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"yongning0310"},"content":" * @param command The command to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"yongning0310"},"content":" * @param ui The UI instance used for user interactions.","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"yongning0310"},"content":" * @param storage The storage instance for data persistence.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"yongning0310"},"content":" * @param taskList The current list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"yongning0310"},"content":" * @param parts The split input parts.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"yongning0310"},"content":" * @param details The split details.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"yongning0310"},"content":" * @param fullInput The complete user input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"yongning0310"},"content":" * @throws DukeException If any error occurs during command execution.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"yongning0310"},"content":" private static void executeCommand(Command command, Ui ui, Storage storage, TaskList taskList,","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"yongning0310"},"content":" String[] parts, String[] details, String fullInput) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"yongning0310"},"content":" // retrieve the task number for commands that require it","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"yongning0310"},"content":" Integer number \u003d (command \u003d\u003d Command.MARK || command \u003d\u003d Command.UNMARK || command \u003d\u003d Command.DELETE)","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"yongning0310"},"content":" ? getTaskNumber(parts, taskList) : null;","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"yongning0310"},"content":" switch (command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"yongning0310"},"content":" case BYE:","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"yongning0310"},"content":" ui.printBye();","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"yongning0310"},"content":" case DELETE:","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"yongning0310"},"content":" String content \u003d taskList.deleteTask(number);","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"yongning0310"},"content":" ui.deleteTask(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"yongning0310"},"content":" ui.printTaskCount(taskList.getTasksCount());","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"yongning0310"},"content":" case LIST:","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"yongning0310"},"content":" ui.printList(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"yongning0310"},"content":" case UNMARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"yongning0310"},"content":" taskList.markTaskAsNotDone(number);","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"yongning0310"},"content":" ui.printTaskMarkAsNotDone(taskList.getStatusAndDescription(number));","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"yongning0310"},"content":" case MARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"yongning0310"},"content":" taskList.markTaskAsDone(number);","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"yongning0310"},"content":" ui.printTaskMarkAsDone(taskList.getStatusAndDescription(number));","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"yongning0310"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"yongning0310"},"content":" String toDoDescription \u003d details[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"yongning0310"},"content":" if (toDoDescription.length() \u003c\u003d 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"yongning0310"},"content":" throw new InvalidToDoException();","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"yongning0310"},"content":" taskList.addToDoToList(false, toDoDescription.substring(5).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"yongning0310"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"yongning0310"},"content":" if (details[0].trim().length() \u003c\u003d 8 || !fullInput.contains(\"by\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"yongning0310"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"yongning0310"},"content":" String deadlineDescription \u003d details[0].split(\"/\")[0].substring(9).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"yongning0310"},"content":" String byTime \u003d fullInput.split(\"by\")[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"yongning0310"},"content":" taskList.addDeadlineToList(false, deadlineDescription, byTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"yongning0310"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"yongning0310"},"content":" if (details[0].trim().length() \u003c\u003d 5 || !fullInput.contains(\"from\") || !fullInput.contains(\"to\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"yongning0310"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"yongning0310"},"content":" String eventDescription \u003d details[0].split(\"/\")[0].substring(6).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"yongning0310"},"content":" String fromTime \u003d fullInput.split(\"from\")[1].split(\"/to\")[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"yongning0310"},"content":" String toTime \u003d fullInput.split(\"to\")[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"yongning0310"},"content":" taskList.addEventToList(false, eventDescription, fromTime, toTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"yongning0310"},"content":" case CLEAR:","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"yongning0310"},"content":" taskList.clear();","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"yongning0310"},"content":" case FIND:","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"yongning0310"},"content":" String findDescription \u003d details[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"yongning0310"},"content":" if (findDescription.length() \u003c\u003d 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"yongning0310"},"content":" throw new InvalidFindException();","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"yongning0310"},"content":" ui.printTaskContainingKeyword(taskList, findDescription.substring(5).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"yongning0310"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"yongning0310"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"yongning0310"},"content":" * Retrieves the task number from the input parts and checks if it\u0027s valid.","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"yongning0310"},"content":" * @param parts Parts of the command input.","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"yongning0310"},"content":" * @param taskList The current list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"yongning0310"},"content":" * @return The task number.","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"yongning0310"},"content":" * @throws InvalidListNumberException If the task number is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"yongning0310"},"content":" private static int getTaskNumber(String[] parts, TaskList taskList) throws InvalidListNumberException {","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"yongning0310"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"yongning0310"},"content":" int number \u003d Integer.parseInt(parts[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"yongning0310"},"content":" if (number \u003c 0 || number \u003e taskList.getTasksCount()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"yongning0310"},"content":" throw new InvalidListNumberException();","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"yongning0310"},"content":" return number;","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"yongning0310"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"yongning0310"},"content":" throw new InvalidListNumberException();","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":188}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"import duke.taskclasses.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"import duke.taskclasses.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" * Represents a storage mechanism for saving and loading task lists.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" private final String filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" * Constructs a new storage instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" * @param filePath The path to the file where tasks are saved and loaded.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" * Loads tasks from the file into a TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" * @return A TaskList containing the loaded tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" public TaskList load() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" String line \u003d s.nextLine().trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" String[] taskParts \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" boolean isDone \u003d taskParts[1].trim().equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" switch (taskParts[0].trim()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":" taskList.addToDoToList(isDone, taskParts[2].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":" taskList.addDeadlineToList(isDone, taskParts[2].trim(), taskParts[3].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":" taskList.addEventToList(isDone, taskParts[2].trim(), taskParts[3].trim(), taskParts[4].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Unexpected task type encountered: \" + line);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":" } catch (InvalidDateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Invalid date format encountered in some tasks. Please check.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"yongning0310"},"content":" s.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"yongning0310"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"The file is not found. Initializing an empty task list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"yongning0310"},"content":" return taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"yongning0310"},"content":" * Writes the given task list to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"yongning0310"},"content":" * @param taskList The list of tasks to be saved.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"yongning0310"},"content":" public void writeToDB(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"yongning0310"},"content":" StringBuilder content \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"yongning0310"},"content":" for (Task task : taskList.getList()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"yongning0310"},"content":" content.append(task.getDbString()).append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"yongning0310"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"yongning0310"},"content":" Path path \u003d Paths.get(this.filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"yongning0310"},"content":" Files.write(path, content.toString().getBytes());","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"yongning0310"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"An error occurred while writing to the file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"yongning0310"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":91}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import duke.taskclasses.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":" * Represents the user interface of the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" * Constructs a new Ui instance and displays the welcome message.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" public Ui() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" String logo \u003d \" ██▄ ████▄ ▄ ▄▀ \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" + \"█ █ █ █ █ ▄▀ \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" + \"█ █ █ █ ██ █ █ ▀▄ \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" + \"█ █ ▀████ █ █ █ █ █ \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" + \"███▀ █ █ █ ███ \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" + \" █ ██ \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" + \" \";","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"What can I do for you?\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" * Prints a message to inform that the task has been marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" * @param taskContent The content of the task that has been marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" public void printTaskMarkAsDone(String taskContent) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" System.out.println(\" \" + taskContent);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" * Prints a message to inform that the task has been marked as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" * @param taskContent The content of the task that has been marked as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" public void printTaskMarkAsNotDone(String taskContent) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" System.out.println(\" \" + taskContent);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" * Informs the user that there was an error loading data from storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"ERROR reading the file, might be corrupted\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":" * Prints all the tasks available in the provided task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":" * @param tasks The task list containing tasks to print.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" public void printList(TaskList tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":" tasks.printAllStatusAndDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"yongning0310"},"content":" * Prints a dashed line for visual separation in the interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"yongning0310"},"content":" public void newDashedLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"yongning0310"},"content":" * Informs the user that a task has been deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"yongning0310"},"content":" * @param content The content of the deleted task.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"yongning0310"},"content":" public void deleteTask(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"yongning0310"},"content":" System.out.println(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"yongning0310"},"content":" * Informs the user about the current count of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"yongning0310"},"content":" * @param count The current number of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"yongning0310"},"content":" public void printTaskCount(int count) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"yongning0310"},"content":" System.out.println(String.format(\"Now you have %s tasks in the list.\", count));","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"yongning0310"},"content":" * Prints all the tasks available in the provided task list that contains the keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"yongning0310"},"content":" * @param tasks The task list containing tasks to print.","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"yongning0310"},"content":" public void printTaskContainingKeyword(TaskList tasks, String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"yongning0310"},"content":" tasks.printAllStatusAndDescriptionWithKeyword(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"yongning0310"},"content":" * Prints a goodbye message.","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"yongning0310"},"content":" public void printBye() {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":105}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents a custom exception for the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" * Specific types of exceptions should extend this class.","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"public abstract class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" * Default constructor for duke.exception.DukeException.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" public DukeException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" * Returns the string representation of the duke.exception.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * It calls the toString() method from the superclass.","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" * @return A string representing the duke.exception.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" return super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":26}},{"path":"src/main/java/duke/exception/InvalidDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents an exception when an invalid datetime format is provided to the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"public class InvalidDateTimeException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Default constructor for InvalidDateTimeException.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" public InvalidDateTimeException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" * Returns a custom message indicating an invalid datetime format.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * @return A string explaining the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" return \"☹ OOPS!!! The datetime format is invalid.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yongning0310":24}},{"path":"src/main/java/duke/exception/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents an exception when an invalid deadline format is provided to the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"public class InvalidDeadlineException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Default constructor for InvalidDeadlineException.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" public InvalidDeadlineException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" * Returns a custom message indicating an invalid deadline format.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * @return A string explaining the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" return \"☹ OOPS!!! The description of a deadline cannot be empty.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yongning0310":25}},{"path":"src/main/java/duke/exception/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents an exception when an invalid event format is provided to the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"public class InvalidEventException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Default constructor for InvalidEventException.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" public InvalidEventException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" * Returns a custom message indicating an invalid event format.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * @return A string explaining the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" return \"☹ OOPS!!! The description of an event cannot be empty.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":25}},{"path":"src/main/java/duke/exception/InvalidFindException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents an exception when an invalid find format is provided to the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"public class InvalidFindException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Default constructor for InvalidFindException.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" public InvalidFindException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" * Returns a custom message indicating an invalid find format.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * @return A string explaining the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" return \"☹ OOPS!!! The description of a find cannot be empty.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":24}},{"path":"src/main/java/duke/exception/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents an exception when an invalid input is provided to the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"public class InvalidInputException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Default constructor for InvalidInputException.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" public InvalidInputException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" * Returns a custom message indicating an invalid input.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * @return A string explaining the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" return \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":24}},{"path":"src/main/java/duke/exception/InvalidListNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents an exception when an invalid numbering for list of tasks is provided to the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"public class InvalidListNumberException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Default constructor for InvalidListNumberException.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" public InvalidListNumberException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" * Returns a custom message indicating an invalid numbering provided for list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * @return A string explaining the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" return \"☹ OOPS!!! The task number entered is invalid.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":25}},{"path":"src/main/java/duke/exception/InvalidToDoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents an exception when an invalid to do format is provided to the duke.Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"public class InvalidToDoException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Default constructor for InvalidToDoException.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" public InvalidToDoException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" * Returns a custom message indicating an invalid to do format.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * @return A string explaining the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" return \"☹ OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":24}},{"path":"src/main/java/duke/taskclasses/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.taskclasses;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"import duke.utils.DateTimeUtils;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Represents a deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" * A deadline task has a description and a specific end date and time by which the task should be completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" /** The end date and time for the deadline task. */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" protected LocalDateTime date;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" * Constructs a new Deadline object with a given description and date.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" * @param date The end date and time for the deadline in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" * @throws InvalidDateTimeException If the provided date string is not in a valid format.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" public Deadline(String description, String date) throws InvalidDateTimeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" super(description, \"D\");","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" this.date \u003d DateTimeUtils.stringToLocalDateTime(date);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" this.addedTaskDescription();","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" * Returns a formatted string with details specific to the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" * @return A string representation of the deadline details.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" public String getDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" return String.format(\" (by: %s)\", DateTimeUtils.localDateTimeToString(this.date));","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" * Returns a formatted string suitable for database storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" * @return A string representation of the deadline task formatted for database storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" public String getDbString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" return String.format(\"%s | %s | %s | %s\", \"D\", this.isDone() ? \"1\" : \"0\", this.description,","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" DateTimeUtils.localDateTimeToStringForDb(this.date));","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":49}},{"path":"src/main/java/duke/taskclasses/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.taskclasses;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"import duke.utils.DateTimeUtils;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" * Represents an event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" * An event task has a description, a start date and time, and an end date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /** The start date and time for the event. */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" /** The end date and time for the event. */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" * Constructs a new Event object with a given description, start date, and end date.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" * @param start The start date and time for the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" * @param end The end date and time for the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" * @throws InvalidDateTimeException If the provided date strings are not in a valid format.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":" public Event(String description, String start, String end) throws InvalidDateTimeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" super(description, \"E\");","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" this.start \u003d DateTimeUtils.stringToLocalDateTime(start);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" this.end \u003d DateTimeUtils.stringToLocalDateTime(end);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" this.addedTaskDescription();","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" * Returns a formatted string with details specific to the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" * @return A string representation of the event details.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" public String getDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" return String.format(\" (from: %s to: %s)\", DateTimeUtils.localDateTimeToString(this.start),","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" DateTimeUtils.localDateTimeToString(this.end));","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" * Returns a formatted string suitable for database storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" * @return A string representation of the event task formatted for database storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":" public String getDbString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":" return String.format(\"%s | %s | %s | %s | %s\",","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":" \"E\",","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":" this.isDone() ? \"1\" : \"0\",","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":" this.description,","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" DateTimeUtils.localDateTimeToStringForDb(this.start),","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":" DateTimeUtils.localDateTimeToStringForDb(this.end));","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":60}},{"path":"src/main/java/duke/taskclasses/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.taskclasses;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Abstract class representing a general task.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" * Specific types of tasks (e.g., ToDo, Deadline, Event) should extend this class.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" /** Description of the task */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" protected String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" /** Task completion status */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" /** Type of the task (e.g., TODO, DEADLINE, EVENT) */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" protected String type;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" * Constructor to initialize a Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" * @param type Type of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" public Task(String description, String type) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" * Abstract method to get additional details of a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" * Implementation should be provided in subclasses.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" * @return A string representing additional details of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" public abstract String getDetails();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" * Abstract method to get the database string representation of a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" * Implementation should be provided in subclasses.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" * @return A string suitable for database storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" public abstract String getDbString();","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" * Prints the description of the added task.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":" public void addedTaskDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":" System.out.println(\" \" + this.getStatusAndDescription());","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":" * Returns the status icon based on task completion.","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" * @return \"X\" if the task is done, \" \" otherwise.","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"yongning0310"},"content":" * Returns the type of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"yongning0310"},"content":" * @return A string representing the task type.","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"yongning0310"},"content":" public String getType() {","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"yongning0310"},"content":" return this.type;","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"yongning0310"},"content":" * Returns the status icon, task type, description, and additional details.","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"yongning0310"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"yongning0310"},"content":" public String getStatusAndDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"yongning0310"},"content":" return String.format(\"[%s][%s] %s%s\",","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"yongning0310"},"content":" this.getType(),","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"yongning0310"},"content":" this.getStatusIcon(),","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"yongning0310"},"content":" this.description,","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"yongning0310"},"content":" this.getDetails());","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"yongning0310"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"yongning0310"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"yongning0310"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"yongning0310"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"yongning0310"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"yongning0310"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"yongning0310"},"content":" * Returns the completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"yongning0310"},"content":" * @return True if the task is done, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"yongning0310"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"yongning0310"},"content":" return this.isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"yongning0310"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"yongning0310"},"content":" * @return A string representing the task\u0027s description.","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"yongning0310"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"yongning0310"},"content":" return this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":117}},{"path":"src/main/java/duke/taskclasses/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.taskclasses;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" * Provides methods to manipulate and interact with the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" /** List of tasks */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" private ArrayList\u003cTask\u003e taskLists;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" /** Count of tasks in the list */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" private int taskCount \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" * Constructs a new TaskList with an existing list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" * @param taskLists List of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" public TaskList(ArrayList\u003cTask\u003e taskLists) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" this.taskLists \u003d taskLists;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":" * Constructs a new empty TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" this.taskLists \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" * @return ArrayList of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" return this.taskLists;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" * Prints the status and description of all tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" public void printAllStatusAndDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" for (int i \u003d 0; i \u003c taskLists.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":" Task taskToPrint \u003d taskLists.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" System.out.println((i + 1) + \". \" + taskToPrint.getStatusAndDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":" * Returns the status and description of the task at the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" * @param number The index of the task in the list (1-based).","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":" * @return String representation of the task status and description.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":" public String getStatusAndDescription(int number) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":" return taskLists.get(number - 1).getStatusAndDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"yongning0310"},"content":" * Returns the count of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"yongning0310"},"content":" * @return The task count.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"yongning0310"},"content":" public int getTasksCount() {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"yongning0310"},"content":" return this.taskCount;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"yongning0310"},"content":" * Adds a ToDo task to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"yongning0310"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"yongning0310"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"yongning0310"},"content":" public void addToDoToList(Boolean isDone, String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"yongning0310"},"content":" Task newTask \u003d new ToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"yongning0310"},"content":" if (isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"yongning0310"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"yongning0310"},"content":" taskLists.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"yongning0310"},"content":" this.taskCount++;","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"yongning0310"},"content":" * Adds a Deadline task to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"yongning0310"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"yongning0310"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"yongning0310"},"content":" * @param date Due date of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"yongning0310"},"content":" * @throws InvalidDateTimeException If the provided date string is not in a valid format.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"yongning0310"},"content":" public void addDeadlineToList(Boolean isDone, String description, String date) throws InvalidDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"yongning0310"},"content":" Task newTask \u003d new Deadline(description, date);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"yongning0310"},"content":" if (isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"yongning0310"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"yongning0310"},"content":" taskLists.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"yongning0310"},"content":" this.taskCount++;","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"yongning0310"},"content":" * Adds an Event task to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"yongning0310"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"yongning0310"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"yongning0310"},"content":" * @param start Start date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"yongning0310"},"content":" * @param end End date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"yongning0310"},"content":" * @throws InvalidDateTimeException If the provided date strings are not in a valid format.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"yongning0310"},"content":" public void addEventToList(Boolean isDone, String description, String start, String end)","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"yongning0310"},"content":" throws InvalidDateTimeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"yongning0310"},"content":" Task newTask \u003d new Event(description, start, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"yongning0310"},"content":" if (isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"yongning0310"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"yongning0310"},"content":" taskLists.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"yongning0310"},"content":" this.taskCount++;","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"yongning0310"},"content":" * Clears the task count. Note: This does not clear the task list itself.","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"yongning0310"},"content":" public void clear() {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"yongning0310"},"content":" this.taskCount \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"yongning0310"},"content":" * Deletes the task at the given index and returns its details.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"yongning0310"},"content":" * @param number The index of the task to delete (1-based).","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"yongning0310"},"content":" * @return The string representation of the deleted task.","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"yongning0310"},"content":" public String deleteTask(int number) {","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"yongning0310"},"content":" String content \u003d taskLists.get(number - 1).getStatusAndDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"yongning0310"},"content":" taskLists.remove(number - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"yongning0310"},"content":" this.taskCount--;","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"yongning0310"},"content":" return content;","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"yongning0310"},"content":" * Marks the task at the given index as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"yongning0310"},"content":" * @param number The index of the task to mark as done (1-based).","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"yongning0310"},"content":" public void markTaskAsDone(int number) {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"yongning0310"},"content":" taskLists.get(number - 1).markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"yongning0310"},"content":" * Marks the task at the given index as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"yongning0310"},"content":" * @param number The index of the task to mark as not done (1-based).","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"yongning0310"},"content":" public void markTaskAsNotDone(int number) {","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"yongning0310"},"content":" taskLists.get(number - 1).markAsNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"yongning0310"},"content":" * Prints the status and description of all tasks in the list that contains the keyword in description.","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"yongning0310"},"content":" public void printAllStatusAndDescriptionWithKeyword(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"yongning0310"},"content":" for (int i \u003d 0; i \u003c taskLists.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"yongning0310"},"content":" Task taskToPrint \u003d taskLists.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"yongning0310"},"content":" if (taskToPrint.description.contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"yongning0310"},"content":" System.out.println((i + 1) + \". \" + taskToPrint.getStatusAndDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":173}},{"path":"src/main/java/duke/taskclasses/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.taskclasses;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":" * ToDo tasks are a type of task with only a description and no additional time-related details.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":" * Constructs a new ToDo task with the given description.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" super(description, \"T\");","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" this.addedTaskDescription();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" * Provides additional details for the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" * Since ToDo tasks have no extra details, this returns an empty string.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" * @return An empty string.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" public String getDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" return \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" * Provides a formatted string for storing the ToDo task in a database.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" * @return A formatted string representing the ToDo task for storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" public String getDbString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" return String.format(\"%s | %s | %s\",","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" \"T\", this.isDone() ? \"1\" : \"0\",","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":41}},{"path":"src/main/java/duke/utils/DateTimeUtils.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package duke.utils;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" * Provides utility methods for converting and manipulating date and time objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":"public class DateTimeUtils {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" * Converts a LocalDateTime object to a formatted string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" * @param dateTime The LocalDateTime object to be converted.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" * @return The formatted string representation of the dateTime.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" public static String localDateTimeToString(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"h:mma\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":" String result \u003d dateTime.format(dateFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" if (!(dateTime.getHour() \u003d\u003d 0 \u0026\u0026 dateTime.getMinute() \u003d\u003d 0)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" result +\u003d \" \" + dateTime.format(timeFormatter).toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" return result;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" * Converts a LocalDateTime object to a formatted string representation for db.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" * @param dateTime The LocalDateTime object to be converted.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" * @return The formatted db string representation of the dateTime.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" public static String localDateTimeToStringForDb(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" String result \u003d dateTime.format(dateFormatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" if (!(dateTime.getHour() \u003d\u003d 0 \u0026\u0026 dateTime.getMinute() \u003d\u003d 0)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":" result +\u003d \" \" + dateTime.format(timeFormatter).toLowerCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":" return result;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":" * Converts a date and time string to a LocalDateTime object. Supports multiple formats.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":" * @param dateTimeString The string representation of the date and time to be converted.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":" * @return The corresponding LocalDateTime object.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":" * @throws InvalidDateTimeException if the dateTimeString cannot be parsed into any supported format.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"yongning0310"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"yongning0310"},"content":" public static LocalDateTime stringToLocalDateTime(String dateTimeString) throws InvalidDateTimeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"yongning0310"},"content":" List\u003cString\u003e patterns \u003d Arrays.asList(","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"yongning0310"},"content":" \"MMM d yyyy HHmm\",","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"yongning0310"},"content":" \"M/d/yyyy HHmm\",","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"yongning0310"},"content":" \"M/d/yyyy\",","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"yongning0310"},"content":" \"yyyy-MM-dd\",","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"yongning0310"},"content":" \"yyyy-MM-dd HHmm\",","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"yongning0310"},"content":" \"MMM d yyyy\"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"yongning0310"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"yongning0310"},"content":" for (String pattern : patterns) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"yongning0310"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"yongning0310"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(pattern);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"yongning0310"},"content":" if (pattern.contains(\"H\") || pattern.contains(\"h\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"yongning0310"},"content":" return LocalDateTime.parse(dateTimeString, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"yongning0310"},"content":" LocalDate date \u003d LocalDate.parse(dateTimeString, formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"yongning0310"},"content":" return date.atStartOfDay();","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"yongning0310"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"yongning0310"},"content":" // If parsing fails, continue to the next pattern","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"yongning0310"},"content":" System.out.println(dateTimeString);","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"yongning0310"},"content":" // If none of the patterns matched, throw an exception","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"yongning0310"},"content":" throw new InvalidDateTimeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yongning0310":92}},{"path":"src/test/java/taskClasses/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package taskClasses;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"import duke.taskclasses.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" @BeforeEach","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" public void setUp() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" public void testAddToDoWithDescriptionOnly() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":" tasks.addToDoToList(false, \"Study Java\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" assertEquals(1, tasks.getTasksCount());","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"[T][ ] Study Java\", tasks.getStatusAndDescription(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":" public void testAddToDoMarkedAsDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":" tasks.addToDoToList(true, \"Read a novel\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" assertEquals(1, tasks.getTasksCount());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"[T][X] Read a novel\", tasks.getStatusAndDescription(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" public void testAddMultipleToDos() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" tasks.addToDoToList(true, \"Task 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" tasks.addToDoToList(false, \"Task 2\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" assertEquals(2, tasks.getTasksCount());","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"[T][X] Task 1\", tasks.getStatusAndDescription(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"[T][ ] Task 2\", tasks.getStatusAndDescription(2));","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" public void testAddEventWithDates() throws InvalidDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" tasks.addEventToList(false, \"Duke project meeting\", \"2023-09-01\", \"2023-09-02\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" assertEquals(1, tasks.getTasksCount());","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"[E][ ] Duke project meeting (from: Sep 1 2023 to: Sep 2 2023)\", tasks.getStatusAndDescription(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":" public void testAddEventWithStartDateAfterEndDate() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":" assertThrows(InvalidDateTimeException.class, () -\u003e tasks.addEventToList(false, \"Duke project meeting\", \"2023-09-40\", \"2023-09-02\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"yongning0310"},"content":" public void testAddEventMarkedAsDone() throws InvalidDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"yongning0310"},"content":" tasks.addEventToList(true, \"Graduation\", \"2023-10-01\", \"2023-10-02\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yongning0310"},"content":" assertEquals(1, tasks.getTasksCount());","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"[E][X] Graduation (from: Oct 1 2023 to: Oct 2 2023)\", tasks.getStatusAndDescription(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":62}},{"path":"src/test/java/utils/DateTimeUtilsTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"package utils;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"import duke.utils.DateTimeUtils;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"public class DateTimeUtilsTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":" public void testLocalDateTimeToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":" // Test case 1: Non-midnight time","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":" LocalDateTime testDateTime1 \u003d LocalDateTime.of(2023, 8, 31, 14, 30);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"Aug 31 2023 2pm\", DateTimeUtils.localDateTimeToString(testDateTime1));","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" // Test case 2: Midnight time","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" LocalDateTime testDateTime2 \u003d LocalDateTime.of(2023, 8, 31, 0, 0);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":" assertEquals(\"Aug 31 2023\", DateTimeUtils.localDateTimeToString(testDateTime2));","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":" public void testStringToLocalDateTime() throws InvalidDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":" // Test case 1: Using format M/d/yyyy HHmm","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":" String testString1 \u003d \"8/31/2023 1430\";","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":" assertEquals(LocalDateTime.of(2023, 8, 31, 14, 30), DateTimeUtils.stringToLocalDateTime(testString1));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":" // Test case 2: Using format M/d/yyyy","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":" String testString2 \u003d \"8/31/2023\";","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":" assertEquals(LocalDateTime.of(2023, 8, 31, 0, 0), DateTimeUtils.stringToLocalDateTime(testString2));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" // Test case 3: Using format yyyy-MM-dd","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" String testString3 \u003d \"2023-08-31\";","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":" assertEquals(LocalDateTime.of(2023, 8, 31, 0, 0), DateTimeUtils.stringToLocalDateTime(testString3));","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" // Test case 4: Using format yyyy-MM-dd HHmm","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":" String testString4 \u003d \"2023-08-31 1430\";","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yongning0310"},"content":" assertEquals(LocalDateTime.of(2023, 8, 31, 14, 30), DateTimeUtils.stringToLocalDateTime(testString4));","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yongning0310"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yongning0310"},"content":" public void testInvalidStringToLocalDateTime() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yongning0310"},"content":" // Test case 1: Invalid format","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yongning0310"},"content":" String testString1 \u003d \"31 Aug 2023\";","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yongning0310"},"content":" assertThrows(InvalidDateTimeException.class, () -\u003e DateTimeUtils.stringToLocalDateTime(testString1));","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yongning0310"},"content":" // Test case 2: Invalid date","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"yongning0310"},"content":" String testString2 \u003d \"8/32/2023\";","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"yongning0310"},"content":" assertThrows(InvalidDateTimeException.class, () -\u003e DateTimeUtils.stringToLocalDateTime(testString2));","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"yongning0310"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yongning0310"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yongning0310":53}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":1}},{"path":"text-ui-test/input1.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"todo task","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"mark 100","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":"bye","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":"deadline return book /by 2/12/2019","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":"deadline return book /by 2/12/2019 1800","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":"deadline return book /by 2019-10-15","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":"deadline return book /by 2019-10-15 1800","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":"event return book /from 2019-10-15 1800 /to 2019-10-15 2000","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"event return book /from 2/12/2019 1800 /to 2/12/2019 2000","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":"event return book /from 2/12/2019 /to 2/12/2019","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":"event return book /from 2/12/2019 2500 /to 2/12/2019 2000","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yongning0310":26}},{"path":"text-ui-test/runtest1.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"yongning0310"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"yongning0310"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yongning0310"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yongning0310"},"content":"then","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yongning0310"},"content":" mkdir ../bin","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yongning0310"},"content":"fi","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yongning0310"},"content":"# delete output from previous run","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yongning0310"},"content":"if [ -e \"./ACTUAL1.TXT\" ]","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yongning0310"},"content":"then","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yongning0310"},"content":" rm ACTUAL1.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yongning0310"},"content":"fi","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yongning0310"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"yongning0310"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"yongning0310"},"content":"then","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yongning0310"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yongning0310"},"content":" exit 1","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"yongning0310"},"content":"fi","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yongning0310"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yongning0310"},"content":"java -classpath ../bin Duke \u003c input1.txt \u003e ACTUAL1.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yongning0310"},"content":"# convert to UNIX format","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yongning0310"},"content":"cp EXPECTED1.TXT EXPECTED1-UNIX.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"yongning0310"},"content":"dos2unix ACTUAL1.TXT EXPECTED1-UNIX.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yongning0310"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yongning0310"},"content":"# compare the output to the expected output","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"yongning0310"},"content":"diff ACTUAL1.TXT EXPECTED1-UNIX.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"yongning0310"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"yongning0310"},"content":"then","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"yongning0310"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"yongning0310"},"content":" exit 0","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"yongning0310"},"content":"else","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"yongning0310"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"yongning0310"},"content":" exit 1","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"yongning0310"},"content":"fi","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yongning0310":38}}] diff --git a/yongning0310_ip_master/commits.json b/yongning0310_ip_master/commits.json index 12bea2ca..a85f23ae 100644 --- a/yongning0310_ip_master/commits.json +++ b/yongning0310_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"yongning0310":[{"date":"2023-08-24","commitResults":[{"hash":"1df28901e58d11b48dea982991558cf18ee632fe","isMergeCommit":false,"messageTitle":"changed name to dong","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"2163a4a390ef0fca8b9ce142ea1974aa007ba79d","isMergeCommit":false,"messageTitle":"added scanner to echo input","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}},{"hash":"e852d40b21f02c8d6238e05e8d553bd96005f613","isMergeCommit":false,"messageTitle":"keeps track of list and prints out when required","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":2}}},{"hash":"3be31f30d34e02aa4f97163caa5f6930a020f4c7","isMergeCommit":false,"messageTitle":"created new class for task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":5}}},{"hash":"19b88251e473c6c4045a6c9a2a7071baf13c1774","isMergeCommit":false,"messageTitle":"automated testing","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":157,"deletions":51},"sh":{"insertions":38,"deletions":0}}},{"hash":"8d941306e19615d2f7369e229577a310cce0394a","isMergeCommit":false,"messageTitle":"handle exception","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":130,"deletions":56}}},{"hash":"5707c59f66f7dafb2225359a937fccfcb9bfb98a","isMergeCommit":false,"messageTitle":"delete task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":11}}},{"hash":"7a4db5908439d075dc498989221073502e1e41e0","isMergeCommit":false,"messageTitle":"edited test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0}}},{"hash":"01f42a9dd812caa7b41feacba972d47506c9f263","isMergeCommit":false,"messageTitle":"java docs updated","messageBody":"","tags":["IA-TextUiTesting","A-TextUiTesting","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":4}}}]},{"date":"2023-08-30","commitResults":[{"hash":"052f31f4976183b4b6aed0f318aa00d0612a8999","isMergeCommit":false,"messageTitle":"implemented duke.txt to store db","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":17,"deletions":1},"java":{"insertions":208,"deletions":15}}},{"hash":"9833deadd5513f7b2b739a71cee818b0f7519545","isMergeCommit":false,"messageTitle":"added dateTimeUtils to handle dateFormat","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"808ed701db0f3eabfe79a0c1e6a23f90a6343225","isMergeCommit":false,"messageTitle":"more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":411,"deletions":255}}},{"hash":"b698a7aa53c813d49c0319ee4966e2e3c79c523d","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":36},"md":{"insertions":2,"deletions":2}}},{"hash":"427aedb19cd0415e918335c28a11d61094ce872f","isMergeCommit":true,"messageTitle":"merged with gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"de55f5a34a97c0f4a28ad213f71d6c72714c555f","isMergeCommit":false,"messageTitle":"set up gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"a5458771c80a6761f93af06569520e9e31ead2a3","isMergeCommit":false,"messageTitle":"J unit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":0}}},{"hash":"5179ba54727456052a5610b677436406a32677c7","isMergeCommit":false,"messageTitle":"java docs, coding standard","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":7},"java":{"insertions":644,"deletions":209}}}]}]},"authorFileTypeContributionMap":{"yongning0310":{"java":1258,"md":2,"fxml":0,"sh":38,"bat":0,"gradle":1,"txt":34}},"authorContributionVariance":{"yongning0310":215736.4},"authorDisplayNameMap":{"yongning0310":"CS2103T-W17-1 LEE ..NING"}} +{"authorDailyContributionsMap":{"yongning0310":[{"date":"2023-08-24","commitResults":[{"hash":"1df28901e58d11b48dea982991558cf18ee632fe","isMergeCommit":false,"messageTitle":"changed name to dong","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"2163a4a390ef0fca8b9ce142ea1974aa007ba79d","isMergeCommit":false,"messageTitle":"added scanner to echo input","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}},{"hash":"e852d40b21f02c8d6238e05e8d553bd96005f613","isMergeCommit":false,"messageTitle":"keeps track of list and prints out when required","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":2}}},{"hash":"3be31f30d34e02aa4f97163caa5f6930a020f4c7","isMergeCommit":false,"messageTitle":"created new class for task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":5}}},{"hash":"19b88251e473c6c4045a6c9a2a7071baf13c1774","isMergeCommit":false,"messageTitle":"automated testing","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":157,"deletions":51},"sh":{"insertions":38,"deletions":0}}},{"hash":"8d941306e19615d2f7369e229577a310cce0394a","isMergeCommit":false,"messageTitle":"handle exception","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":130,"deletions":56}}},{"hash":"5707c59f66f7dafb2225359a937fccfcb9bfb98a","isMergeCommit":false,"messageTitle":"delete task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":11}}},{"hash":"7a4db5908439d075dc498989221073502e1e41e0","isMergeCommit":false,"messageTitle":"edited test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0}}},{"hash":"01f42a9dd812caa7b41feacba972d47506c9f263","isMergeCommit":false,"messageTitle":"java docs updated","messageBody":"","tags":["IA-TextUiTesting","A-TextUiTesting","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":4}}}]},{"date":"2023-08-30","commitResults":[{"hash":"052f31f4976183b4b6aed0f318aa00d0612a8999","isMergeCommit":false,"messageTitle":"implemented duke.txt to store db","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":17,"deletions":1},"java":{"insertions":208,"deletions":15}}},{"hash":"9833deadd5513f7b2b739a71cee818b0f7519545","isMergeCommit":false,"messageTitle":"added dateTimeUtils to handle dateFormat","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"808ed701db0f3eabfe79a0c1e6a23f90a6343225","isMergeCommit":false,"messageTitle":"more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":411,"deletions":255}}},{"hash":"b698a7aa53c813d49c0319ee4966e2e3c79c523d","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":36},"md":{"insertions":2,"deletions":2}}},{"hash":"427aedb19cd0415e918335c28a11d61094ce872f","isMergeCommit":true,"messageTitle":"merged with gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"de55f5a34a97c0f4a28ad213f71d6c72714c555f","isMergeCommit":false,"messageTitle":"set up gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"a5458771c80a6761f93af06569520e9e31ead2a3","isMergeCommit":false,"messageTitle":"J unit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":0}}},{"hash":"5179ba54727456052a5610b677436406a32677c7","isMergeCommit":false,"messageTitle":"java docs, coding standard","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":7},"java":{"insertions":644,"deletions":209}}}]},{"date":"2023-09-04","commitResults":[{"hash":"258fb54067bcbcbdd7b4d644d2f29ec147307852","isMergeCommit":false,"messageTitle":"added checkstyle and fixed styling","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":20,"deletions":0},"java":{"insertions":354,"deletions":144}}}]}]},"authorFileTypeContributionMap":{"yongning0310":{"java":1470,"md":2,"fxml":0,"sh":38,"bat":0,"gradle":21,"txt":34}},"authorContributionVariance":{"yongning0310":179590.0},"authorDisplayNameMap":{"yongning0310":"CS2103T-W17-1 LEE ..NING"}} diff --git a/zacwong2151_ip_master/authorship.json b/zacwong2151_ip_master/authorship.json index c421d3bf..c04f7db8 100644 --- a/zacwong2151_ip_master/authorship.json +++ b/zacwong2151_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-02"},{"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":"zacwong2151"},"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-02"},{"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":{"zacwong2151":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":"zacwong2151"},"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":"-"},"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":"zacwong2151"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" toolVersion \u003d \u002710.12.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":"task cleanDataContents(type: Delete) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" description \u003d \u0027Clean the contents of duke.txt and temp.txt\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" doLast {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" // Define the paths to the files","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" def dukeFile \u003d file(\u0027data/duke.txt\u0027)","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" def tempFile \u003d file(\u0027data/temp.txt\u0027)","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" // Create empty files to clean the contents","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" dukeFile.text \u003d \u0027\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" tempFile.text \u003d \u0027\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":"clean.dependsOn cleanDataContents // Make cleanDataContents depend on the clean task","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","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":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"zacwong2151"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"zacwong2151"},"content":"mainClassName \u003d \u0027duke.Duke\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"zacwong2151"},"content":" archiveBaseName \u003d \"Duke\"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"zacwong2151"},"content":" archiveVersion \u003d \"v0.1\"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"zacwong2151"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"zacwong2151":27,"-":40}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":" * one of the Tasks that user\u0027s can add into their list","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" * constructor to initialise a Deadline object","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" * @param description the Task description that is obtained from the Task class","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" * @param by the deadline time component that is stored as a LocalDateTime","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" return \"[D]\" + super.toString() + \"(by: \" + localDatetoString(by) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" return \"D\" + super.toFileString() + \"| \" + localDatetoString(by);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" * A toString method to convert the LocalDateTime to a String","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" * @param dateTime the stored LocalDateTime","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" * @return a String","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" public static String localDatetoString(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy h:mma\");","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" String formattedDateTime \u003d dateTime.format(outputFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" return formattedDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zacwong2151":40}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" * class where main is run","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":"public class Duke implements Serializable {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" protected static String indent \u003d \" \";","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" protected static String horizontalLines \u003d indent + \"__________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" protected static String dukeFilePath \u003d \"data/duke.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" protected static String tempFilePath \u003d \"data/temp.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" private static Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" private static TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" * constructor to initialise the Ui, Storage and TaskList objects","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" * @param filePath the relative path to the file that acts as a temporary storage for the ArrayList(Task) object","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" } catch (DukeException | IOException | ClassNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" //e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" ui.printWithIndent(\"Hi! You do not have any tasks at the moment\");","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" createTxtFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" * The exception caught above is likely the IOException thrown at duke.Storage.java line 11. Catching","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":" * this exception means that duke.TaskList is empty (I think), which means that the duke.txt file might","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":" * not exist yet, so it is created in this function","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"zacwong2151"},"content":" public static void createTxtFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"zacwong2151"},"content":" FileWriter fw \u003d new FileWriter(dukeFilePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"zacwong2151"},"content":" fw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"zacwong2151"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"zacwong2151"},"content":" System.out.println(\"shag\");","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"zacwong2151"},"content":" * Runs the program","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"zacwong2151"},"content":" public void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"zacwong2151"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"zacwong2151"},"content":" boolean isExit \u003d Parser.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"zacwong2151"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"zacwong2151"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"zacwong2151"},"content":" String userInput \u003d ui.readCommand(scanner);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"zacwong2151"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"zacwong2151"},"content":" Parser.parse(userInput, tasks, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"zacwong2151"},"content":" isExit \u003d Parser.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"zacwong2151"},"content":" if (isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"zacwong2151"},"content":" ui.showExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"zacwong2151"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"zacwong2151"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"zacwong2151"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"zacwong2151"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"zacwong2151"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"zacwong2151"},"content":" new Duke(tempFilePath).run();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"zacwong2151":76,"-":1}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":" * custom Exception class","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":" public DukeException(String error) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" super(error);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zacwong2151":10}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":" * one of the Tasks that user\u0027s can add into their list","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" * constructor to initialise an Event object","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" * @param description the Task description that is obtained from the Task class","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" * @param from the from part of the Event time component","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" * @param to the by part of the Event time component","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" return \"[E]\" + super.toString() + \"(from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" return \"E\" + super.toFileString() + \"| \" + from + \"-\" + to;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zacwong2151":29}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":" * This class deals with making sense of the user command","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":" private static boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" public static boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" return isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" * This function takes in the user input and carries out the next steps accordingly","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" * @param userInput what the user types in to the console","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" * @param tasks the duke.TaskList","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" * @param storage the duke.Storage","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" * @throws DukeException from all the methods in duke.TaskList","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" public static void parse(String userInput, TaskList tasks, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" if (userInput.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" TaskList.displayList();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" } else if (userInput.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" isExit \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" } else if (userInput.contains(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" tasks.markDescription(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" } else if (userInput.contains(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" tasks.markDescription(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" } else if (userInput.contains(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" if (userInput.length() \u003c\u003d 5) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"T\", userInput.substring(5));","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" } else if (userInput.contains(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" if (userInput.length() \u003c\u003d 9) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"D\", userInput.substring(9));","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":" } else if (userInput.contains(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"zacwong2151"},"content":" if (userInput.length() \u003c\u003d 6) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"E\", userInput.substring(6));","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"zacwong2151"},"content":" } else if (userInput.contains(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"zacwong2151"},"content":" tasks.deleteTask(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"zacwong2151"},"content":" storage.updateFile(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"zacwong2151":53}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" * deals with loading tasks from the file and saving tasks in the file","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" private static String dukeFilePath \u003d \"data/duke.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" private String filePath; // \"data/temp.txt\"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" * This function reads the ArrayList(Task) object that is stored in memory and returns it","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" * @return an ArrayList that contains Task objects","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" * @throws DukeException this part might not be needed","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" * @throws ClassNotFoundException if inputStream.readObject() does not find anything","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" * @throws IOException if \"data/temp.txt\" does not exist/it is empty (not sure which one or both?)","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException, ClassNotFoundException, IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" ObjectInputStream inputStream \u003d new ObjectInputStream(new FileInputStream(filePath));","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" The only object that is written to OutputStream is the ArrayList\u003cduke.Task\u003e, as shown in the","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" updateFile method in duke.Duke.java. Thus, only an object of run type ArrayList\u003cduke.Task\u003e can be","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" read from the InputStream, so it is safe to cast it to (ArrayList\u003cduke.Task\u003e)","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":" @SuppressWarnings(\"unchecked\")","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d (ArrayList\u003cTask\u003e) inputStream.readObject();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" if (loadedTasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":" // actually this part might be unnecessary","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"currently there is no task in your Tasks\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"zacwong2151"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"zacwong2151"},"content":" tasks.addAll(loadedTasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"zacwong2151"},"content":" return tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"zacwong2151"},"content":" * Everytime there is a change in tasks, 2 things happen","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"zacwong2151"},"content":" * 1. The duke.txt file is cleared, tasks is scanned and the entire duke.txt file is rewritten","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"zacwong2151"},"content":" * 2. ObjectOutputStream scans tasks, serializes each duke.Task into binary format, and writes them","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"zacwong2151"},"content":" * to \"data/temp.txt\". This allows us to save the duke.TaskList to a file and retrieve it when the program","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"zacwong2151"},"content":" * is run again","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"zacwong2151"},"content":" * Initially, I did a writeToFile method where everytime a duke.Task is added to taskArray, write","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"zacwong2151"},"content":" * the new task to duke.txt. However, this may cause some problems when it comes to updating","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"zacwong2151"},"content":" * or deleting tasks from the file, so I changed the implementation to rewriting the entire txt","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"zacwong2151"},"content":" * file everytime there is a change to the list. This causes a longer run time but since this mod","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"zacwong2151"},"content":" * is not about run time, it should be fine.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"zacwong2151"},"content":" public void updateFile(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"zacwong2151"},"content":" try (ObjectOutputStream outputStream \u003d new ObjectOutputStream(new FileOutputStream(filePath))) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"zacwong2151"},"content":" outputStream.writeObject(tasks.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"zacwong2151"},"content":" // writes the ArrayList\u003cduke.Task\u003e object to the OutputStream","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"zacwong2151"},"content":" FileWriter fw \u003d new FileWriter(dukeFilePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"zacwong2151"},"content":" // ^ the above line is ABSOLUTELY NECESSARY!!! do not delete","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"zacwong2151"},"content":" // Clears the existing content by opening in write mode and immediately closing","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"zacwong2151"},"content":" fw \u003d new FileWriter(dukeFilePath, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"zacwong2151"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"zacwong2151"},"content":" fw.write(tasks.getTask(i).toFileString() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"zacwong2151"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"zacwong2151"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"zacwong2151"},"content":" System.out.println(\"ewq2\" + e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"zacwong2151":76}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":" * can be considered an abstract class. Can be either a Todo, Deadline, or Event class","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":"public class Task implements Serializable {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" protected boolean marked;","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" * Constructor to initialise a Task object","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" * @param description the Task description that is obtained from the user input","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" this.marked \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" public String getStatusIconWithBracket() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" return marked ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" return marked ? \"X\" : \"O\";","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" this.marked \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" return this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" public void markAsUnDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" this.marked \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" return this.getStatusIconWithBracket() + \" \" + description;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"zacwong2151"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"zacwong2151"},"content":" return \" | \" + this.getStatusIcon() + \" | \" + this.getDescription();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"zacwong2151":45}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"import java.time.DayOfWeek;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" * the collection that contains the list of Tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":"public class TaskList implements Serializable {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" private static String indent \u003d \" \";","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" private static String megaIndent \u003d \" \";","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" private static ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" * Gets the number of tasks in ArrayList(Task)","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" * @return The number of tasks in the collection","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" return tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" * Gets the duke.Task at the specific position of the ArrayList(Task)","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" * @param i The position of the duke.Task","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" * @return The duke.Task","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":" public Task getTask(int i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" return tasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":" * Gets the ArrayList(Task)","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"zacwong2151"},"content":" * @return The collection","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"zacwong2151"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"zacwong2151"},"content":" return this.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"zacwong2151"},"content":" * displays the list of Tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"zacwong2151"},"content":" public static void displayList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"zacwong2151"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"zacwong2151"},"content":" int num \u003d i + 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"zacwong2151"},"content":" Task curr \u003d tasks.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + num + \".\" + curr.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"zacwong2151"},"content":" * This method encapsulates the functionality of marking a task as completed or not","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"zacwong2151"},"content":" * For example, the input \u0027mark 1\u0027 will mark the duke.Task at position 0 at the TaskArray as \u0027marked\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"zacwong2151"},"content":" * @param string the input string","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"zacwong2151"},"content":" public void markDescription(String string) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"zacwong2151"},"content":" String clean \u003d string.replaceAll(\"\\\\D+\", \"\"); //remove non-digits","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"zacwong2151"},"content":" int pos \u003d Integer.parseInt(clean) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"zacwong2151"},"content":" if (pos \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"You are trying to access a Task that does not exist!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"zacwong2151"},"content":" Task curr \u003d tasks.get(pos);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"zacwong2151"},"content":" if (string.contains(\"unmark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"zacwong2151"},"content":" curr.markAsUnDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"zacwong2151"},"content":" } else if (string.contains(\"mark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"zacwong2151"},"content":" curr.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"zacwong2151"},"content":" System.out.println(megaIndent + curr.getStatusIconWithBracket() + \" \" + curr.description);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"zacwong2151"},"content":" * For deadline and event Tasks, obtains the description of the duke.Task (before the first slash)","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"zacwong2151"},"content":" * For example, the input \u0027event project meeting /from Mon 2pm /to 4pm\u0027 will return \u0027project meeting\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"zacwong2151"},"content":" * @param string of the duke.Task","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"zacwong2151"},"content":" * @return the description of the duke.Task","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"zacwong2151"},"content":" public static String getDescription(String string) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"zacwong2151"},"content":" int len \u003d string.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"zacwong2151"},"content":" int count \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"zacwong2151"},"content":" for (int i \u003d 0; i \u003c len; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"zacwong2151"},"content":" if (string.charAt(i) \u003d\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"zacwong2151"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"zacwong2151"},"content":" count++;","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"zacwong2151"},"content":" return string.substring(0, count);","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"zacwong2151"},"content":" * A method for the duke.Deadline class to obtain the by part of the duke.Task description","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"zacwong2151"},"content":" * For example, the input \u0027deadline return book /by Sunday\u0027 will return \u0027Sunday\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"zacwong2151"},"content":" * @param string the duke.Task description","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"zacwong2151"},"content":" * @return the deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"zacwong2151"},"content":" * @throws DukeException if the input string is formatted wrongly","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"zacwong2151"},"content":" public static String getBy(String string) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"zacwong2151"},"content":" String slash \u003d \"/\";","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"zacwong2151"},"content":" int first \u003d string.indexOf(slash);","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"zacwong2151"},"content":" int second \u003d first + 3;","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"zacwong2151"},"content":" if (first \u003d\u003d -1 || !string.substring(first, second).equals(\"/by\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"You need to add a by timing!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"zacwong2151"},"content":" return string.substring(first + 4); // returns \"Sunday\"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"zacwong2151"},"content":" * A method for the duke.Event class to obtain the from part of the duke.Event description","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"zacwong2151"},"content":" * For example, the input \u0027event project meeting /from Mon 2pm /to 4pm\u0027 will return \u0027Mon 2pm\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"zacwong2151"},"content":" * @param string the duke.Task description","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"zacwong2151"},"content":" * @return the from part of the event","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"zacwong2151"},"content":" * @throws DukeException throws duke.DukeException if invalid input","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"zacwong2151"},"content":" public static String getFrom(String string) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"zacwong2151"},"content":" String slash \u003d \"/\";","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"zacwong2151"},"content":" int firstSlash \u003d string.indexOf(slash);","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"zacwong2151"},"content":" int secondSlash \u003d string.indexOf(slash, firstSlash + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"zacwong2151"},"content":" if (firstSlash \u003d\u003d -1 || secondSlash \u003d\u003d -1","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"zacwong2151"},"content":" || !string.substring(firstSlash, firstSlash + 5).equals(\"/from\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"You need to add a /from and /to for events\");","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"zacwong2151"},"content":" return string.substring(firstSlash + 6, secondSlash - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"zacwong2151"},"content":" * A method for the duke.Event class to obtain the to part of the duke.Event description","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"zacwong2151"},"content":" * For example, the input \u0027event project meeting /from Mon 2pm /to 4pm\u0027 will return \u00274pm\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"zacwong2151"},"content":" * @param string the duke.Task description","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"zacwong2151"},"content":" * @return the to part of the event","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"zacwong2151"},"content":" * @throws DukeException throws duke.DukeException if invalid input","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"zacwong2151"},"content":" public static String getTo(String string) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"zacwong2151"},"content":" String slash \u003d \"/\";","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"zacwong2151"},"content":" int firstSlash \u003d string.indexOf(slash);","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"zacwong2151"},"content":" int secondSlash \u003d string.indexOf(slash, firstSlash + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"zacwong2151"},"content":" if (!string.substring(secondSlash, secondSlash + 3).equals(\"/to\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"You need to add a /to for events\");","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"zacwong2151"},"content":" return string.substring(secondSlash + 4);","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"zacwong2151"},"content":" * For an input such as \u0027todo borrow book\u0027, letter is \u0027T\u0027 and string is \u0027borrow book\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"zacwong2151"},"content":" * @param letter the letter corresponding to the first letter of the duke.Task","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"zacwong2151"},"content":" * @param string the string corresponding to the chunk of text after the word todo, deadline, or event","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"zacwong2151"},"content":" public void addTask(String letter, String string) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"zacwong2151"},"content":" if (letter.equals(\"T\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"zacwong2151"},"content":" tasks.add(new ToDo(string));","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"zacwong2151"},"content":" if (letter.equals(\"D\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"zacwong2151"},"content":" tasks.add(new Deadline(getDescription(string), convertToLocalDateTime(getBy(string))));","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"zacwong2151"},"content":" if (letter.equals(\"E\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"zacwong2151"},"content":" tasks.add(new Event(getDescription(string), getFrom(string), getTo(string)));","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"zacwong2151"},"content":" int tasksSize \u003d tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"zacwong2151"},"content":" System.out.println(megaIndent + tasks.get(tasksSize - 1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Now you have \" + tasksSize + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"zacwong2151"},"content":" * This method encapsulates deleting of a task from TaskArray","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"zacwong2151"},"content":" * For example, the input \u0027delete 3\u0027 will delete the duke.Task at position 2 of TaskArray","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"zacwong2151"},"content":" * @param string the input string","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"zacwong2151"},"content":" public void deleteTask(String string) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"zacwong2151"},"content":" String clean \u003d string.replaceAll(\"\\\\D+\", \"\"); //remove non-digits","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"zacwong2151"},"content":" int pos \u003d Integer.parseInt(clean) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"zacwong2151"},"content":" if (pos \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"You are trying to delete a Task that does not exist\");","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"zacwong2151"},"content":" System.out.println(megaIndent + tasks.get(pos).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"zacwong2151"},"content":" tasks.remove(pos);","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"zacwong2151"},"content":" * A function that takes in the by part of a duke.Deadline duke.Task, and converts it to a LocalDateTime","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"zacwong2151"},"content":" * For example, the input \u0027Sunday 1700\u0027 will return the corresponding LocalDateTime","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"zacwong2151"},"content":" * @param string the by part of the duke.Deadline duke.Task","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"zacwong2151"},"content":" * @return the LocalDateTime corresponding to the duke.Deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"zacwong2151"},"content":" * @throws DukeException if a specific time in 24hr format is not put","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"zacwong2151"},"content":" public static LocalDateTime convertToLocalDateTime(String string) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"zacwong2151"},"content":" if (string.indexOf(\u0027/\u0027) !\u003d -1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"zacwong2151"},"content":" if (string.lastIndexOf(\u0027/\u0027) + 5 \u003d\u003d string.length()) { // \"2/12/2019 1800\"","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"put in a time pls\");","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"zacwong2151"},"content":" LocalDateTime dateTime \u003d parseDateTime(string, \u0027/\u0027);","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"zacwong2151"},"content":" return dateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"zacwong2151"},"content":" } else if (string.indexOf(\u0027-\u0027) !\u003d -1) { //","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"zacwong2151"},"content":" if (string.lastIndexOf(\u0027-\u0027) + 3 \u003d\u003d string.length()) { // \"2019-10-15 1800\"","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"put in a time pls\");","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"zacwong2151"},"content":" LocalDateTime dateTime \u003d parseDateTime(string, \u0027-\u0027);","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"zacwong2151"},"content":" return dateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"zacwong2151"},"content":" } else { // \"Mon 1800\"","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"zacwong2151"},"content":" // problem 1: date does not overflow to next month","lastModifiedDate":"2023-09-02"},{"lineNumber":219,"author":{"gitId":"zacwong2151"},"content":" // problem 2: it goes backwards in day","lastModifiedDate":"2023-09-02"},{"lineNumber":220,"author":{"gitId":"zacwong2151"},"content":" String[] parts \u003d string.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":221,"author":{"gitId":"zacwong2151"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":222,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"put in a time pls\");","lastModifiedDate":"2023-09-02"},{"lineNumber":223,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":224,"author":{"gitId":"zacwong2151"},"content":" String dayPart \u003d parts[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":225,"author":{"gitId":"zacwong2151"},"content":" String timePart \u003d parts[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":226,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":227,"author":{"gitId":"zacwong2151"},"content":" int year \u003d LocalDate.now().getYear();","lastModifiedDate":"2023-09-02"},{"lineNumber":228,"author":{"gitId":"zacwong2151"},"content":" int month \u003d LocalDate.now().getMonth().getValue();","lastModifiedDate":"2023-09-02"},{"lineNumber":229,"author":{"gitId":"zacwong2151"},"content":" int daysToAdd \u003d -LocalDateTime.now().getDayOfWeek().compareTo(getDayOfWeek(dayPart.toUpperCase()));","lastModifiedDate":"2023-09-02"},{"lineNumber":230,"author":{"gitId":"zacwong2151"},"content":" int date \u003d LocalDate.now().getDayOfMonth() + daysToAdd;","lastModifiedDate":"2023-09-02"},{"lineNumber":231,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":232,"author":{"gitId":"zacwong2151"},"content":" int hour \u003d Integer.parseInt(timePart.substring(0, 2));","lastModifiedDate":"2023-09-02"},{"lineNumber":233,"author":{"gitId":"zacwong2151"},"content":" int minute \u003d Integer.parseInt(timePart.substring(2, 4));","lastModifiedDate":"2023-09-02"},{"lineNumber":234,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":235,"author":{"gitId":"zacwong2151"},"content":" LocalDate temp \u003d LocalDate.of(year, month, 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":236,"author":{"gitId":"zacwong2151"},"content":" // temp LocalDate to obtain the maximum no. of days in that month","lastModifiedDate":"2023-09-02"},{"lineNumber":237,"author":{"gitId":"zacwong2151"},"content":" int maxDaysOfMonth \u003d temp.lengthOfMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":238,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":239,"author":{"gitId":"zacwong2151"},"content":" if (date \u003e maxDaysOfMonth) {","lastModifiedDate":"2023-09-02"},{"lineNumber":240,"author":{"gitId":"zacwong2151"},"content":" // Date overflows, adjust LocalDateTime to the next month","lastModifiedDate":"2023-09-02"},{"lineNumber":241,"author":{"gitId":"zacwong2151"},"content":" return LocalDateTime.of(year, month + 1, date - maxDaysOfMonth, hour, minute);","lastModifiedDate":"2023-09-02"},{"lineNumber":242,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":243,"author":{"gitId":"zacwong2151"},"content":" return LocalDateTime.of(year, month, date, hour, minute);","lastModifiedDate":"2023-09-02"},{"lineNumber":244,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":245,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":246,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":247,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":248,"author":{"gitId":"zacwong2151"},"content":" * A function that helps convert a string to a LocalDateTime","lastModifiedDate":"2023-09-02"},{"lineNumber":249,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":250,"author":{"gitId":"zacwong2151"},"content":" * @param input the by part of the duke.Deadline duke.Task, e.g. \"2/12/2019 1800\"","lastModifiedDate":"2023-09-04"},{"lineNumber":251,"author":{"gitId":"zacwong2151"},"content":" * @param c whether the duke.Deadline is put in a \u0027-\u0027 format or \u0027/\u0027 format","lastModifiedDate":"2023-09-04"},{"lineNumber":252,"author":{"gitId":"zacwong2151"},"content":" * @return a LocalDateTime","lastModifiedDate":"2023-09-02"},{"lineNumber":253,"author":{"gitId":"zacwong2151"},"content":" * @throws DukeException if a specific time in 24hr format is not put","lastModifiedDate":"2023-09-02"},{"lineNumber":254,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":255,"author":{"gitId":"zacwong2151"},"content":" public static LocalDateTime parseDateTime(String input, char c) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":256,"author":{"gitId":"zacwong2151"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":257,"author":{"gitId":"zacwong2151"},"content":" if (parts.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":258,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"put in a time pls\");","lastModifiedDate":"2023-09-02"},{"lineNumber":259,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":260,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":261,"author":{"gitId":"zacwong2151"},"content":" String datePart \u003d parts[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":262,"author":{"gitId":"zacwong2151"},"content":" String timePart \u003d parts[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":263,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":264,"author":{"gitId":"zacwong2151"},"content":" String[] dateComponents;","lastModifiedDate":"2023-09-02"},{"lineNumber":265,"author":{"gitId":"zacwong2151"},"content":" if (c \u003d\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":266,"author":{"gitId":"zacwong2151"},"content":" dateComponents \u003d datePart.split(\"/\");","lastModifiedDate":"2023-09-02"},{"lineNumber":267,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":268,"author":{"gitId":"zacwong2151"},"content":" // c \u003d\u003d \u0027-\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":269,"author":{"gitId":"zacwong2151"},"content":" dateComponents \u003d datePart.split(\"-\");","lastModifiedDate":"2023-09-02"},{"lineNumber":270,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":271,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":272,"author":{"gitId":"zacwong2151"},"content":" if (dateComponents.length !\u003d 3) {","lastModifiedDate":"2023-09-02"},{"lineNumber":273,"author":{"gitId":"zacwong2151"},"content":" throw new IllegalArgumentException(\"Invalid date format\");","lastModifiedDate":"2023-09-02"},{"lineNumber":274,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":275,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":276,"author":{"gitId":"zacwong2151"},"content":" int date \u003d Integer.parseInt(dateComponents[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":277,"author":{"gitId":"zacwong2151"},"content":" int month \u003d Integer.parseInt(dateComponents[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":278,"author":{"gitId":"zacwong2151"},"content":" int year \u003d Integer.parseInt(dateComponents[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":279,"author":{"gitId":"zacwong2151"},"content":" int hour \u003d Integer.parseInt(timePart.substring(0, 2));","lastModifiedDate":"2023-09-02"},{"lineNumber":280,"author":{"gitId":"zacwong2151"},"content":" int minute \u003d Integer.parseInt(timePart.substring(2, 4));","lastModifiedDate":"2023-09-02"},{"lineNumber":281,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":282,"author":{"gitId":"zacwong2151"},"content":" return LocalDateTime.of(year, month, date, hour, minute);","lastModifiedDate":"2023-09-02"},{"lineNumber":283,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":284,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":285,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":286,"author":{"gitId":"zacwong2151"},"content":" * A function that takes in a user input that is the day of the week and returns the","lastModifiedDate":"2023-09-02"},{"lineNumber":287,"author":{"gitId":"zacwong2151"},"content":" * corresponding DayOfWeek","lastModifiedDate":"2023-09-02"},{"lineNumber":288,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":289,"author":{"gitId":"zacwong2151"},"content":" * @param string the user input that is a day of the week, e.g. \"sun\", \"Tuesday\", \"Mon\"","lastModifiedDate":"2023-09-04"},{"lineNumber":290,"author":{"gitId":"zacwong2151"},"content":" * @return the DayOfWeek as an enum","lastModifiedDate":"2023-09-02"},{"lineNumber":291,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":292,"author":{"gitId":"zacwong2151"},"content":" public static DayOfWeek getDayOfWeek(String string) {","lastModifiedDate":"2023-09-02"},{"lineNumber":293,"author":{"gitId":"zacwong2151"},"content":" DayOfWeek result;","lastModifiedDate":"2023-09-02"},{"lineNumber":294,"author":{"gitId":"zacwong2151"},"content":" String day \u003d string.substring(0, 3);","lastModifiedDate":"2023-09-02"},{"lineNumber":295,"author":{"gitId":"zacwong2151"},"content":" switch(day) {","lastModifiedDate":"2023-09-02"},{"lineNumber":296,"author":{"gitId":"zacwong2151"},"content":" case \"MON\":","lastModifiedDate":"2023-09-02"},{"lineNumber":297,"author":{"gitId":"zacwong2151"},"content":" result \u003d DayOfWeek.MONDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":298,"author":{"gitId":"zacwong2151"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":299,"author":{"gitId":"zacwong2151"},"content":" case \"TUE\":","lastModifiedDate":"2023-09-02"},{"lineNumber":300,"author":{"gitId":"zacwong2151"},"content":" result \u003d DayOfWeek.TUESDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":301,"author":{"gitId":"zacwong2151"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":302,"author":{"gitId":"zacwong2151"},"content":" case \"WED\":","lastModifiedDate":"2023-09-02"},{"lineNumber":303,"author":{"gitId":"zacwong2151"},"content":" result \u003d DayOfWeek.WEDNESDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":304,"author":{"gitId":"zacwong2151"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":305,"author":{"gitId":"zacwong2151"},"content":" case \"THU\":","lastModifiedDate":"2023-09-02"},{"lineNumber":306,"author":{"gitId":"zacwong2151"},"content":" result \u003d DayOfWeek.THURSDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":307,"author":{"gitId":"zacwong2151"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":308,"author":{"gitId":"zacwong2151"},"content":" case \"FRI\":","lastModifiedDate":"2023-09-02"},{"lineNumber":309,"author":{"gitId":"zacwong2151"},"content":" result \u003d DayOfWeek.FRIDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":310,"author":{"gitId":"zacwong2151"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":311,"author":{"gitId":"zacwong2151"},"content":" case \"SAT\":","lastModifiedDate":"2023-09-02"},{"lineNumber":312,"author":{"gitId":"zacwong2151"},"content":" result \u003d DayOfWeek.SATURDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":313,"author":{"gitId":"zacwong2151"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":314,"author":{"gitId":"zacwong2151"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":315,"author":{"gitId":"zacwong2151"},"content":" // case \"SUN\"","lastModifiedDate":"2023-09-02"},{"lineNumber":316,"author":{"gitId":"zacwong2151"},"content":" result \u003d DayOfWeek.SUNDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":317,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":318,"author":{"gitId":"zacwong2151"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":319,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":320,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"zacwong2151":320}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":" * one of the subclasses of a Task","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" return \"T\" + super.toFileString();","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zacwong2151":18}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" * This class deals with interactions with the user","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" private static String indent \u003d \" \";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" private static String horizontalLines \u003d indent + \"__________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" private static String dukeFilePath \u003d \"data/duke.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" private String name \u003d \"zac\";","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" * Read the user\u0027s commands","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" * @param scanner object that is used to read the user\u0027s commands","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" * @return the user\u0027s command as a String","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" public String readCommand(Scanner scanner) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" if (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" // Handle the case where no input is available","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" // You can return a default value or show an error message.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" return \"\"; // or throw an exception, print an error message, etc.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" * Prints the error","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" * @param error some stuff","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":" public void showError(String error) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + error);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"zacwong2151"},"content":" * Displays a horizontal line","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"zacwong2151"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"zacwong2151"},"content":" System.out.println(horizontalLines);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"zacwong2151"},"content":" * Show the welcome message, and prints the existing content in the duke.TaskList (if it exists)","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"zacwong2151"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"zacwong2151"},"content":" System.out.println(horizontalLines);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Hello! I\u0027m \" + name);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"What can I do for you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"zacwong2151"},"content":" System.out.println(horizontalLines);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"zacwong2151"},"content":" printFileContents(dukeFilePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"zacwong2151"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"zacwong2151"},"content":" System.out.println(\"1\" + e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"zacwong2151"},"content":" public void showExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"zacwong2151"},"content":" * Prints the input string with horizontal lines above and below it","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"zacwong2151"},"content":" * @param string the input string","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"zacwong2151"},"content":" public static void printWithIndent(String string) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"zacwong2151"},"content":" System.out.println(horizontalLines);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + string);","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"zacwong2151"},"content":" System.out.println(horizontalLines);","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"zacwong2151"},"content":" * Prints out all the tasks in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"zacwong2151"},"content":" * @param filePath the file where the lists of Tasks are stored. It is hardcoded to be \"data/duke.txt\"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"zacwong2151"},"content":" * @throws FileNotFoundException if the file at this filePath is not found (though I\u0027m not sure","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"zacwong2151"},"content":" * when this will happen)","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"zacwong2151"},"content":" private static void printFileContents(String filePath) throws FileNotFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"zacwong2151"},"content":" File f \u003d new File(filePath); // create a File for the given file path","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"zacwong2151"},"content":" Scanner s \u003d new Scanner(f); // create a Scanner using the File as the source","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"zacwong2151"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"zacwong2151"},"content":" System.out.println(s.nextLine());","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"zacwong2151":89}},{"path":"src/test/java/duke/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" private LocalDateTime date \u003d LocalDateTime.of(2023, 9, 3, 17, 00);","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" * Tests the localDateToString method","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" public void testLocalDateToString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"Sep 3 2023 5:00PM\", Deadline.localDatetoString(date));","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" * Tests the toString method for a Deadline object","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" public void testToString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"[D][ ] return book (by: Sep 3 2023 5:00PM)\",","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" new Deadline(\"return book \", date).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" * Tests the toFileString method for a Deadline object","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" public void testToFileString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"D | O | return book | Sep 3 2023 5:00PM\",","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" new Deadline(\"return book \", date).toFileString());","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"zacwong2151":37}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"import static org.junit.jupiter.api.Assertions.assertNull;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" private String tempFilePath \u003d \"data/temp.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" private Storage storage \u003d new Storage(tempFilePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" * Tests the load method in Storage. Exception should always be thrown","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" public void load_nil_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" storage.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" } catch (DukeException | IOException | ClassNotFoundException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" assertNull(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"zacwong2151":22}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" private ArrayList\u003cTask\u003e tasklist \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" private TaskList tasks \u003d new TaskList(tasklist);","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" public void addTask_todo_success() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"T\", \"borrow book\");","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" // Perform assertions or test other functionality here","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" assertEquals(1, tasks.getSize()); // Example assertion","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" public void addTask_deadline_success() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"D\", \"return book /by 2/12/2019 1800\");","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" // Perform assertions or test other functionality here","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" assertEquals(1, tasks.getSize()); // Example assertion","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" public void addTask_deadline_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"D\", \"return book /by 2/12/2019\");","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"put in a time pls\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" public void deleteTask_delete1_success() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"T\", \"borrow book\");","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" tasks.deleteTask(\"delete 1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":" assertEquals(0, tasks.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":" public void deleteTask_delete2_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"T\", \"borrow book\");","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"zacwong2151"},"content":" tasks.deleteTask(\"delete 2\");","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"zacwong2151"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"You are trying to delete a Task that does not exist\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"zacwong2151"},"content":" public void markDescription_mark1_success() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"T\", \"borrow book\");","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"zacwong2151"},"content":" tasks.markDescription(\"mark 1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"X\", tasks.getTask(0).getStatusIcon());","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"zacwong2151"},"content":" public void markDescription_mark2_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"T\", \"borrow book\");","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"zacwong2151"},"content":" tasks.markDescription(\"mark 2\");","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"zacwong2151"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"You are trying to access a Task that does not exist!\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"zacwong2151":62}},{"path":"src/test/java/duke/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" public void testToString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"[T][ ] borrow book\", new ToDo(\"borrow book\").toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" public void testToFileString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"T | O | borrow book\", new ToDo(\"borrow book\").toFileString());","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"zacwong2151":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"deadline return book /by Sunday 1700","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"deadline return book /y Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"deadline return book by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":"event project meeting from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":"event project meeting /rom Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":"event project meeting /from Mon 2pm to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":"event project meeting /from Mon 2pm /o 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":"todo randomthing","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":"mark 5","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":"delete 4","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zacwong2151":19}},{"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":"zacwong2151"},"content":"REM Set the working directory to the root directory (ip) before executing the script","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"CD /D ..\\","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"if not exist bin mkdir bin","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":"del .\\text-ui-test\\ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":"javac -cp src\\main\\java -Xlint:none -d bin src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":"REM because now that the working directory is set to ip, ACTUAL.TXT and EXPECTED.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":"REM can only be accessed with the appropriate cd","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":"REM Run the program, feed commands from input.txt file, and redirect the output to ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":"java -classpath bin duke.Duke \u003c .\\text-ui-test\\input.txt \u003e .\\text-ui-test\\ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":"REM Compare the output to the expected output","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":"FC .\\text-ui-test\\ACTUAL.TXT .\\text-ui-test\\EXPECTED.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"zacwong2151":14,"-":14}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-02"},{"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":"zacwong2151"},"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-02"},{"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":{"zacwong2151":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":"zacwong2151"},"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":"-"},"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":"zacwong2151"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" toolVersion \u003d \u002710.12.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":"task cleanDataContents(type: Delete) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" description \u003d \u0027Clean the contents of duke.txt and temp.txt\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" doLast {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" // Define the paths to the files","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" def dukeFile \u003d file(\u0027data/duke.txt\u0027)","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" def tempFile \u003d file(\u0027data/temp.txt\u0027)","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" // Create empty files to clean the contents","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" dukeFile.text \u003d \u0027\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" tempFile.text \u003d \u0027\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":"clean.dependsOn cleanDataContents // Make cleanDataContents depend on the clean task","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","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":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"zacwong2151"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"zacwong2151"},"content":"mainClassName \u003d \u0027duke.Duke\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"zacwong2151"},"content":" archiveBaseName \u003d \"Duke\"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"zacwong2151"},"content":" archiveVersion \u003d \"v0.1\"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"zacwong2151"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"zacwong2151":27,"-":40}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":" * one of the Tasks that user\u0027s can add into their list","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" * constructor to initialise a Deadline object","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" * @param description the Task description that is obtained from the Task class","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" * @param by the deadline time component that is stored as a LocalDateTime","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" return \"[D]\" + super.toString() + \"(by: \" + localDatetoString(by) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" return \"D\" + super.toFileString() + \"| \" + localDatetoString(by);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" * A toString method to convert the LocalDateTime to a String","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" * @param dateTime the stored LocalDateTime","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" * @return a String","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" public static String localDatetoString(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy h:mma\");","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" String formattedDateTime \u003d dateTime.format(outputFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" return formattedDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zacwong2151":40}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" * class where main is run","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":"public class Duke implements Serializable {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" protected static String indent \u003d \" \";","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" protected static String dukeFilePath \u003d \"data/duke.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" protected static String tempFilePath \u003d \"data/temp.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" private static Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" private static TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" * constructor to initialise the Ui, Storage and TaskList objects","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" * @param filePath the relative path to the file that acts as a temporary storage for the ArrayList(Task) object","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" } catch (DukeException | IOException | ClassNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" //e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" Ui.printWithIndent(\"Hi! You do not have any tasks at the moment\");","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" createTxtFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" * The exception caught above is likely the IOException thrown at duke.Storage.java line 11. Catching","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" * this exception means that duke.TaskList is empty (I think), which means that the duke.txt file might","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":" * not exist yet, so it is created in this function","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"zacwong2151"},"content":" public static void createTxtFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"zacwong2151"},"content":" FileWriter fw \u003d new FileWriter(dukeFilePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"zacwong2151"},"content":" fw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"zacwong2151"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"zacwong2151"},"content":" System.out.println(\"shag\");","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"zacwong2151"},"content":" * Runs the program","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"zacwong2151"},"content":" public void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"zacwong2151"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"zacwong2151"},"content":" boolean isExit \u003d Parser.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"zacwong2151"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"zacwong2151"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"zacwong2151"},"content":" String userInput \u003d ui.readCommand(scanner);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"zacwong2151"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"zacwong2151"},"content":" Parser.parse(userInput, tasks, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"zacwong2151"},"content":" isExit \u003d Parser.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"zacwong2151"},"content":" if (isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"zacwong2151"},"content":" ui.showExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"zacwong2151"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"zacwong2151"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"zacwong2151"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"zacwong2151"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"zacwong2151"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"zacwong2151"},"content":" new Duke(tempFilePath).run();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"zacwong2151":75,"-":1}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":" * custom Exception class","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":" public DukeException(String error) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" super(error);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zacwong2151":10}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":" * one of the Tasks that user\u0027s can add into their list","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" * constructor to initialise an Event object","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" * @param description the Task description that is obtained from the Task class","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" * @param from the from part of the Event time component","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" * @param to the by part of the Event time component","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" return \"[E]\" + super.toString() + \"(from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" return \"E\" + super.toFileString() + \"| \" + from + \"-\" + to;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zacwong2151":29}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":" * This class deals with making sense of the user command","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":" private static boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" public static boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" return isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" * This function takes in the user input and carries out the next steps accordingly","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" * @param userInput what the user types in to the console","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" * @param tasks the duke.TaskList","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" * @param storage the duke.Storage","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" * @throws DukeException from all the methods in duke.TaskList","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" public static void parse(String userInput, TaskList tasks, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" if (userInput.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" tasks.displayList();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" } else if (userInput.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" isExit \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" } else if (userInput.contains(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" tasks.markDescription(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" } else if (userInput.contains(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" tasks.markDescription(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" } else if (userInput.contains(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" if (userInput.length() \u003c\u003d 5) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"T\", userInput.substring(5));","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" } else if (userInput.contains(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" if (userInput.length() \u003c\u003d 9) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"D\", userInput.substring(9));","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":" } else if (userInput.contains(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"zacwong2151"},"content":" if (userInput.length() \u003c\u003d 6) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"E\", userInput.substring(6));","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"zacwong2151"},"content":" } else if (userInput.contains(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"zacwong2151"},"content":" tasks.deleteTask(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"zacwong2151"},"content":" } else if (userInput.contains(\"find\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"zacwong2151"},"content":" tasks.displayMatchingList(userInput.substring(5));","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"zacwong2151"},"content":" storage.updateFile(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"zacwong2151":55}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" * deals with loading tasks from the file and saving tasks in the file","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" private static String dukeFilePath \u003d \"data/duke.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" private String filePath; // \"data/temp.txt\"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" * This function reads the ArrayList(Task) object that is stored in memory and returns it","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" * @return an ArrayList that contains Task objects","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" * @throws DukeException this part might not be needed","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" * @throws ClassNotFoundException if inputStream.readObject() does not find anything","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" * @throws IOException if \"data/temp.txt\" does not exist/it is empty (not sure which one or both?)","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException, ClassNotFoundException, IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" ObjectInputStream inputStream \u003d new ObjectInputStream(new FileInputStream(filePath));","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" The only object that is written to OutputStream is the ArrayList\u003cduke.Task\u003e, as shown in the","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" updateFile method in duke.Duke.java. Thus, only an object of run type ArrayList\u003cduke.Task\u003e can be","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" read from the InputStream, so it is safe to cast it to (ArrayList\u003cduke.Task\u003e)","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":" @SuppressWarnings(\"unchecked\")","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d (ArrayList\u003cTask\u003e) inputStream.readObject();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" if (loadedTasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":" // actually this part might be unnecessary","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"currently there is no task in your Tasks\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"zacwong2151"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"zacwong2151"},"content":" tasks.addAll(loadedTasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"zacwong2151"},"content":" return tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"zacwong2151"},"content":" * Everytime there is a change in tasks, 2 things happen","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"zacwong2151"},"content":" * 1. The duke.txt file is cleared, tasks is scanned and the entire duke.txt file is rewritten","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"zacwong2151"},"content":" * 2. ObjectOutputStream scans tasks, serializes each duke.Task into binary format, and writes them","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"zacwong2151"},"content":" * to \"data/temp.txt\". This allows us to save the duke.TaskList to a file and retrieve it when the program","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"zacwong2151"},"content":" * is run again","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"zacwong2151"},"content":" * Initially, I did a writeToFile method where everytime a duke.Task is added to taskArray, write","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"zacwong2151"},"content":" * the new task to duke.txt. However, this may cause some problems when it comes to updating","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"zacwong2151"},"content":" * or deleting tasks from the file, so I changed the implementation to rewriting the entire txt","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"zacwong2151"},"content":" * file everytime there is a change to the list. This causes a longer run time but since this mod","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"zacwong2151"},"content":" * is not about run time, it should be fine.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"zacwong2151"},"content":" public void updateFile(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"zacwong2151"},"content":" try (ObjectOutputStream outputStream \u003d new ObjectOutputStream(new FileOutputStream(filePath))) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"zacwong2151"},"content":" outputStream.writeObject(tasks.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"zacwong2151"},"content":" // writes the ArrayList\u003cduke.Task\u003e object to the OutputStream","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"zacwong2151"},"content":" FileWriter fw \u003d new FileWriter(dukeFilePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"zacwong2151"},"content":" // ^ the above line is ABSOLUTELY NECESSARY!!! do not delete","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"zacwong2151"},"content":" // Clears the existing content by opening in write mode and immediately closing","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"zacwong2151"},"content":" fw \u003d new FileWriter(dukeFilePath, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"zacwong2151"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"zacwong2151"},"content":" fw.write(tasks.getTask(i).toFileString() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"zacwong2151"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"zacwong2151"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"zacwong2151"},"content":" System.out.println(\"ewq2\" + e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"zacwong2151":76}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":" * can be considered an abstract class. Can be either a Todo, Deadline, or Event class","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":"public class Task implements Serializable {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" protected boolean marked;","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" * Constructor to initialise a Task object","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" * @param description the Task description that is obtained from the user input","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" this.marked \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" public String getStatusIconWithBracket() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" return marked ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" return marked ? \"X\" : \"O\";","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" this.marked \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" return this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" public void markAsUnDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" this.marked \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" return this.getStatusIconWithBracket() + \" \" + description;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"zacwong2151"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"zacwong2151"},"content":" return \" | \" + this.getStatusIcon() + \" | \" + this.getDescription();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"zacwong2151":45}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"import java.time.DayOfWeek;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" * the collection that contains the list of Tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":"public class TaskList implements Serializable {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" private static String indent \u003d \" \";","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" private static String megaIndent \u003d \" \";","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" * Gets the number of tasks in ArrayList(Task)","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" * @return The number of tasks in the collection","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" return tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" * Gets the duke.Task at the specific position of the ArrayList(Task)","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" * @param i The position of the duke.Task","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" * @return The duke.Task","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":" public Task getTask(int i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" return tasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":" * Gets the ArrayList(Task)","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"zacwong2151"},"content":" * @return The collection","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"zacwong2151"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"zacwong2151"},"content":" return this.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"zacwong2151"},"content":" * displays the list of Tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"zacwong2151"},"content":" public void displayList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"zacwong2151"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"zacwong2151"},"content":" int num \u003d i + 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"zacwong2151"},"content":" Task curr \u003d tasks.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + num + \".\" + curr.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"zacwong2151"},"content":" * Displays the list of Tasks that description matches the user input","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"zacwong2151"},"content":" * @param userInput the String that the user inputs to find similar Tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"zacwong2151"},"content":" public void displayMatchingList(String userInput) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"zacwong2151"},"content":" ArrayList\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"zacwong2151"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"zacwong2151"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"zacwong2151"},"content":" String taskDescription \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"zacwong2151"},"content":" if (taskDescription.contains(userInput)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"zacwong2151"},"content":" temp.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"zacwong2151"},"content":" if (temp.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"There are no matching tasks\");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"zacwong2151"},"content":" for (int i \u003d 0; i \u003c temp.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"zacwong2151"},"content":" int num \u003d i + 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"zacwong2151"},"content":" Task curr \u003d temp.get(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + num + \".\" + curr.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"zacwong2151"},"content":" * This method encapsulates the functionality of marking a task as completed or not","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"zacwong2151"},"content":" * For example, the input \u0027mark 1\u0027 will mark the duke.Task at position 0 at the TaskArray as \u0027marked\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"zacwong2151"},"content":" * @param string the input string","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"zacwong2151"},"content":" * @throws DukeException if input is invalid","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"zacwong2151"},"content":" public void markDescription(String string) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"zacwong2151"},"content":" String clean \u003d string.replaceAll(\"\\\\D+\", \"\"); //remove non-digits","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"zacwong2151"},"content":" int pos \u003d Integer.parseInt(clean) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"zacwong2151"},"content":" if (pos \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"You are trying to access a Task that does not exist!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"zacwong2151"},"content":" Task curr \u003d tasks.get(pos);","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"zacwong2151"},"content":" if (string.contains(\"unmark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"zacwong2151"},"content":" curr.markAsUnDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"zacwong2151"},"content":" } else if (string.contains(\"mark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"zacwong2151"},"content":" curr.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"zacwong2151"},"content":" System.out.println(megaIndent + curr.getStatusIconWithBracket() + \" \" + curr.description);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"zacwong2151"},"content":" * For deadline and event Tasks, obtains the description of the duke.Task (before the first slash)","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"zacwong2151"},"content":" * For example, the input \u0027event project meeting /from Mon 2pm /to 4pm\u0027 will return \u0027project meeting\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"zacwong2151"},"content":" * @param string of the duke.Task","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"zacwong2151"},"content":" * @return the description of the duke.Task","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"zacwong2151"},"content":" public static String getDescription(String string) {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"zacwong2151"},"content":" int len \u003d string.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"zacwong2151"},"content":" int count \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"zacwong2151"},"content":" for (int i \u003d 0; i \u003c len; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"zacwong2151"},"content":" if (string.charAt(i) \u003d\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"zacwong2151"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"zacwong2151"},"content":" count++;","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"zacwong2151"},"content":" return string.substring(0, count);","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"zacwong2151"},"content":" * A method for the duke.Deadline class to obtain the by part of the duke.Task description","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"zacwong2151"},"content":" * For example, the input \u0027deadline return book /by Sunday\u0027 will return \u0027Sunday\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"zacwong2151"},"content":" * @param string the duke.Task description","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"zacwong2151"},"content":" * @return the deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"zacwong2151"},"content":" * @throws DukeException if the input string is formatted wrongly","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"zacwong2151"},"content":" public static String getBy(String string) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"zacwong2151"},"content":" String slash \u003d \"/\";","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"zacwong2151"},"content":" int first \u003d string.indexOf(slash);","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"zacwong2151"},"content":" int second \u003d first + 3;","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"zacwong2151"},"content":" if (first \u003d\u003d -1 || !string.substring(first, second).equals(\"/by\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"You need to add a by timing!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"zacwong2151"},"content":" return string.substring(first + 4); // returns \"Sunday\"","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"zacwong2151"},"content":" * A method for the duke.Event class to obtain the from part of the duke.Event description","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"zacwong2151"},"content":" * For example, the input \u0027event project meeting /from Mon 2pm /to 4pm\u0027 will return \u0027Mon 2pm\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"zacwong2151"},"content":" * @param string the duke.Task description","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"zacwong2151"},"content":" * @return the from part of the event","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"zacwong2151"},"content":" * @throws DukeException throws duke.DukeException if invalid input","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"zacwong2151"},"content":" public static String getFrom(String string) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"zacwong2151"},"content":" String slash \u003d \"/\";","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"zacwong2151"},"content":" int firstSlash \u003d string.indexOf(slash);","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"zacwong2151"},"content":" int secondSlash \u003d string.indexOf(slash, firstSlash + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"zacwong2151"},"content":" if (firstSlash \u003d\u003d -1 || secondSlash \u003d\u003d -1","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"zacwong2151"},"content":" || !string.substring(firstSlash, firstSlash + 5).equals(\"/from\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"You need to add a /from and /to for events\");","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"zacwong2151"},"content":" return string.substring(firstSlash + 6, secondSlash - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"zacwong2151"},"content":" * A method for the duke.Event class to obtain the to part of the duke.Event description","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"zacwong2151"},"content":" * For example, the input \u0027event project meeting /from Mon 2pm /to 4pm\u0027 will return \u00274pm\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"zacwong2151"},"content":" * @param string the duke.Task description","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"zacwong2151"},"content":" * @return the to part of the event","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"zacwong2151"},"content":" * @throws DukeException throws duke.DukeException if invalid input","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"zacwong2151"},"content":" public static String getTo(String string) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"zacwong2151"},"content":" String slash \u003d \"/\";","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"zacwong2151"},"content":" int firstSlash \u003d string.indexOf(slash);","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"zacwong2151"},"content":" int secondSlash \u003d string.indexOf(slash, firstSlash + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"zacwong2151"},"content":" if (!string.substring(secondSlash, secondSlash + 3).equals(\"/to\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"You need to add a /to for events\");","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"zacwong2151"},"content":" return string.substring(secondSlash + 4);","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"zacwong2151"},"content":" * For an input such as \u0027todo borrow book\u0027, letter is \u0027T\u0027 and string is \u0027borrow book\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"zacwong2151"},"content":" * @param letter the letter corresponding to the first letter of the duke.Task","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"zacwong2151"},"content":" * @param string the string corresponding to the chunk of text after the word todo, deadline, or event","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"zacwong2151"},"content":" public void addTask(String letter, String string) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"zacwong2151"},"content":" if (letter.equals(\"T\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"zacwong2151"},"content":" tasks.add(new ToDo(string));","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"zacwong2151"},"content":" if (letter.equals(\"D\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"zacwong2151"},"content":" tasks.add(new Deadline(getDescription(string), convertToLocalDateTime(getBy(string))));","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"zacwong2151"},"content":" if (letter.equals(\"E\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"zacwong2151"},"content":" tasks.add(new Event(getDescription(string), getFrom(string), getTo(string)));","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"zacwong2151"},"content":" int tasksSize \u003d tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"zacwong2151"},"content":" System.out.println(megaIndent + tasks.get(tasksSize - 1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Now you have \" + tasksSize + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"zacwong2151"},"content":" * This method encapsulates deleting of a task from TaskArray","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"zacwong2151"},"content":" * For example, the input \u0027delete 3\u0027 will delete the duke.Task at position 2 of TaskArray","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"zacwong2151"},"content":" * @param string the input string","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"zacwong2151"},"content":" public void deleteTask(String string) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"zacwong2151"},"content":" String clean \u003d string.replaceAll(\"\\\\D+\", \"\"); //remove non-digits","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"zacwong2151"},"content":" int pos \u003d Integer.parseInt(clean) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"zacwong2151"},"content":" if (pos \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"You are trying to delete a Task that does not exist\");","lastModifiedDate":"2023-09-04"},{"lineNumber":213,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"zacwong2151"},"content":" System.out.println(megaIndent + tasks.get(pos).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"zacwong2151"},"content":" tasks.remove(pos);","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":221,"author":{"gitId":"zacwong2151"},"content":" * A function that takes in the by part of a duke.Deadline duke.Task, and converts it to a LocalDateTime","lastModifiedDate":"2023-09-02"},{"lineNumber":222,"author":{"gitId":"zacwong2151"},"content":" * For example, the input \u0027Sunday 1700\u0027 will return the corresponding LocalDateTime","lastModifiedDate":"2023-09-02"},{"lineNumber":223,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":224,"author":{"gitId":"zacwong2151"},"content":" * @param string the by part of the duke.Deadline duke.Task","lastModifiedDate":"2023-09-02"},{"lineNumber":225,"author":{"gitId":"zacwong2151"},"content":" * @return the LocalDateTime corresponding to the duke.Deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":226,"author":{"gitId":"zacwong2151"},"content":" * @throws DukeException if a specific time in 24hr format is not put","lastModifiedDate":"2023-09-02"},{"lineNumber":227,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":228,"author":{"gitId":"zacwong2151"},"content":" public static LocalDateTime convertToLocalDateTime(String string) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":229,"author":{"gitId":"zacwong2151"},"content":" if (string.indexOf(\u0027/\u0027) !\u003d -1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":230,"author":{"gitId":"zacwong2151"},"content":" if (string.lastIndexOf(\u0027/\u0027) + 5 \u003d\u003d string.length()) { // \"2/12/2019 1800\"","lastModifiedDate":"2023-09-02"},{"lineNumber":231,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"put in a time pls\");","lastModifiedDate":"2023-09-02"},{"lineNumber":232,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":233,"author":{"gitId":"zacwong2151"},"content":" LocalDateTime dateTime \u003d parseDateTime(string, \u0027/\u0027);","lastModifiedDate":"2023-09-02"},{"lineNumber":234,"author":{"gitId":"zacwong2151"},"content":" return dateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":235,"author":{"gitId":"zacwong2151"},"content":" } else if (string.indexOf(\u0027-\u0027) !\u003d -1) { //","lastModifiedDate":"2023-09-02"},{"lineNumber":236,"author":{"gitId":"zacwong2151"},"content":" if (string.lastIndexOf(\u0027-\u0027) + 3 \u003d\u003d string.length()) { // \"2019-10-15 1800\"","lastModifiedDate":"2023-09-02"},{"lineNumber":237,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"put in a time pls\");","lastModifiedDate":"2023-09-02"},{"lineNumber":238,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":239,"author":{"gitId":"zacwong2151"},"content":" LocalDateTime dateTime \u003d parseDateTime(string, \u0027-\u0027);","lastModifiedDate":"2023-09-02"},{"lineNumber":240,"author":{"gitId":"zacwong2151"},"content":" return dateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":241,"author":{"gitId":"zacwong2151"},"content":" } else { // \"Mon 1800\"","lastModifiedDate":"2023-09-02"},{"lineNumber":242,"author":{"gitId":"zacwong2151"},"content":" // problem 1: date does not overflow to next month","lastModifiedDate":"2023-09-02"},{"lineNumber":243,"author":{"gitId":"zacwong2151"},"content":" // problem 2: it goes backwards in day","lastModifiedDate":"2023-09-02"},{"lineNumber":244,"author":{"gitId":"zacwong2151"},"content":" String[] parts \u003d string.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":245,"author":{"gitId":"zacwong2151"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":246,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"put in a time pls\");","lastModifiedDate":"2023-09-02"},{"lineNumber":247,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":248,"author":{"gitId":"zacwong2151"},"content":" String dayPart \u003d parts[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":249,"author":{"gitId":"zacwong2151"},"content":" String timePart \u003d parts[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":250,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":251,"author":{"gitId":"zacwong2151"},"content":" int year \u003d LocalDate.now().getYear();","lastModifiedDate":"2023-09-02"},{"lineNumber":252,"author":{"gitId":"zacwong2151"},"content":" int month \u003d LocalDate.now().getMonth().getValue();","lastModifiedDate":"2023-09-02"},{"lineNumber":253,"author":{"gitId":"zacwong2151"},"content":" int daysToAdd \u003d -LocalDateTime.now().getDayOfWeek().compareTo(getDayOfWeek(dayPart.toUpperCase()));","lastModifiedDate":"2023-09-02"},{"lineNumber":254,"author":{"gitId":"zacwong2151"},"content":" int date \u003d LocalDate.now().getDayOfMonth() + daysToAdd;","lastModifiedDate":"2023-09-02"},{"lineNumber":255,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":256,"author":{"gitId":"zacwong2151"},"content":" int hour \u003d Integer.parseInt(timePart.substring(0, 2));","lastModifiedDate":"2023-09-02"},{"lineNumber":257,"author":{"gitId":"zacwong2151"},"content":" int minute \u003d Integer.parseInt(timePart.substring(2, 4));","lastModifiedDate":"2023-09-02"},{"lineNumber":258,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":259,"author":{"gitId":"zacwong2151"},"content":" LocalDate temp \u003d LocalDate.of(year, month, 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":260,"author":{"gitId":"zacwong2151"},"content":" // temp LocalDate to obtain the maximum no. of days in that month","lastModifiedDate":"2023-09-02"},{"lineNumber":261,"author":{"gitId":"zacwong2151"},"content":" int maxDaysOfMonth \u003d temp.lengthOfMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":262,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":263,"author":{"gitId":"zacwong2151"},"content":" if (date \u003e maxDaysOfMonth) {","lastModifiedDate":"2023-09-02"},{"lineNumber":264,"author":{"gitId":"zacwong2151"},"content":" // Date overflows, adjust LocalDateTime to the next month","lastModifiedDate":"2023-09-02"},{"lineNumber":265,"author":{"gitId":"zacwong2151"},"content":" return LocalDateTime.of(year, month + 1, date - maxDaysOfMonth, hour, minute);","lastModifiedDate":"2023-09-02"},{"lineNumber":266,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":267,"author":{"gitId":"zacwong2151"},"content":" return LocalDateTime.of(year, month, date, hour, minute);","lastModifiedDate":"2023-09-02"},{"lineNumber":268,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":269,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":270,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":271,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":272,"author":{"gitId":"zacwong2151"},"content":" * A function that helps convert a string to a LocalDateTime","lastModifiedDate":"2023-09-02"},{"lineNumber":273,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":274,"author":{"gitId":"zacwong2151"},"content":" * @param input the by part of the duke.Deadline duke.Task, e.g. \"2/12/2019 1800\"","lastModifiedDate":"2023-09-04"},{"lineNumber":275,"author":{"gitId":"zacwong2151"},"content":" * @param c whether the duke.Deadline is put in a \u0027-\u0027 format or \u0027/\u0027 format","lastModifiedDate":"2023-09-04"},{"lineNumber":276,"author":{"gitId":"zacwong2151"},"content":" * @return a LocalDateTime","lastModifiedDate":"2023-09-02"},{"lineNumber":277,"author":{"gitId":"zacwong2151"},"content":" * @throws DukeException if a specific time in 24hr format is not put","lastModifiedDate":"2023-09-02"},{"lineNumber":278,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":279,"author":{"gitId":"zacwong2151"},"content":" public static LocalDateTime parseDateTime(String input, char c) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":280,"author":{"gitId":"zacwong2151"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":281,"author":{"gitId":"zacwong2151"},"content":" if (parts.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":282,"author":{"gitId":"zacwong2151"},"content":" throw new DukeException(\"put in a time pls\");","lastModifiedDate":"2023-09-02"},{"lineNumber":283,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":284,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":285,"author":{"gitId":"zacwong2151"},"content":" String datePart \u003d parts[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":286,"author":{"gitId":"zacwong2151"},"content":" String timePart \u003d parts[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":287,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":288,"author":{"gitId":"zacwong2151"},"content":" String[] dateComponents;","lastModifiedDate":"2023-09-02"},{"lineNumber":289,"author":{"gitId":"zacwong2151"},"content":" if (c \u003d\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":290,"author":{"gitId":"zacwong2151"},"content":" dateComponents \u003d datePart.split(\"/\");","lastModifiedDate":"2023-09-02"},{"lineNumber":291,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":292,"author":{"gitId":"zacwong2151"},"content":" // c \u003d\u003d \u0027-\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":293,"author":{"gitId":"zacwong2151"},"content":" dateComponents \u003d datePart.split(\"-\");","lastModifiedDate":"2023-09-02"},{"lineNumber":294,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":295,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":296,"author":{"gitId":"zacwong2151"},"content":" if (dateComponents.length !\u003d 3) {","lastModifiedDate":"2023-09-02"},{"lineNumber":297,"author":{"gitId":"zacwong2151"},"content":" throw new IllegalArgumentException(\"Invalid date format\");","lastModifiedDate":"2023-09-02"},{"lineNumber":298,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":299,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":300,"author":{"gitId":"zacwong2151"},"content":" int date \u003d Integer.parseInt(dateComponents[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":301,"author":{"gitId":"zacwong2151"},"content":" int month \u003d Integer.parseInt(dateComponents[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":302,"author":{"gitId":"zacwong2151"},"content":" int year \u003d Integer.parseInt(dateComponents[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":303,"author":{"gitId":"zacwong2151"},"content":" int hour \u003d Integer.parseInt(timePart.substring(0, 2));","lastModifiedDate":"2023-09-02"},{"lineNumber":304,"author":{"gitId":"zacwong2151"},"content":" int minute \u003d Integer.parseInt(timePart.substring(2, 4));","lastModifiedDate":"2023-09-02"},{"lineNumber":305,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":306,"author":{"gitId":"zacwong2151"},"content":" return LocalDateTime.of(year, month, date, hour, minute);","lastModifiedDate":"2023-09-02"},{"lineNumber":307,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":308,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":309,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":310,"author":{"gitId":"zacwong2151"},"content":" * A function that takes in a user input that is the day of the week and returns the","lastModifiedDate":"2023-09-02"},{"lineNumber":311,"author":{"gitId":"zacwong2151"},"content":" * corresponding DayOfWeek","lastModifiedDate":"2023-09-02"},{"lineNumber":312,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":313,"author":{"gitId":"zacwong2151"},"content":" * @param string the user input that is a day of the week, e.g. \"sun\", \"Tuesday\", \"Mon\"","lastModifiedDate":"2023-09-04"},{"lineNumber":314,"author":{"gitId":"zacwong2151"},"content":" * @return the DayOfWeek as an enum","lastModifiedDate":"2023-09-02"},{"lineNumber":315,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":316,"author":{"gitId":"zacwong2151"},"content":" public static DayOfWeek getDayOfWeek(String string) {","lastModifiedDate":"2023-09-02"},{"lineNumber":317,"author":{"gitId":"zacwong2151"},"content":" DayOfWeek result;","lastModifiedDate":"2023-09-02"},{"lineNumber":318,"author":{"gitId":"zacwong2151"},"content":" String day \u003d string.substring(0, 3);","lastModifiedDate":"2023-09-02"},{"lineNumber":319,"author":{"gitId":"zacwong2151"},"content":" switch(day) {","lastModifiedDate":"2023-09-02"},{"lineNumber":320,"author":{"gitId":"zacwong2151"},"content":" case \"MON\":","lastModifiedDate":"2023-09-02"},{"lineNumber":321,"author":{"gitId":"zacwong2151"},"content":" result \u003d DayOfWeek.MONDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":322,"author":{"gitId":"zacwong2151"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":323,"author":{"gitId":"zacwong2151"},"content":" case \"TUE\":","lastModifiedDate":"2023-09-02"},{"lineNumber":324,"author":{"gitId":"zacwong2151"},"content":" result \u003d DayOfWeek.TUESDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":325,"author":{"gitId":"zacwong2151"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":326,"author":{"gitId":"zacwong2151"},"content":" case \"WED\":","lastModifiedDate":"2023-09-02"},{"lineNumber":327,"author":{"gitId":"zacwong2151"},"content":" result \u003d DayOfWeek.WEDNESDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":328,"author":{"gitId":"zacwong2151"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":329,"author":{"gitId":"zacwong2151"},"content":" case \"THU\":","lastModifiedDate":"2023-09-02"},{"lineNumber":330,"author":{"gitId":"zacwong2151"},"content":" result \u003d DayOfWeek.THURSDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":331,"author":{"gitId":"zacwong2151"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":332,"author":{"gitId":"zacwong2151"},"content":" case \"FRI\":","lastModifiedDate":"2023-09-02"},{"lineNumber":333,"author":{"gitId":"zacwong2151"},"content":" result \u003d DayOfWeek.FRIDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":334,"author":{"gitId":"zacwong2151"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":335,"author":{"gitId":"zacwong2151"},"content":" case \"SAT\":","lastModifiedDate":"2023-09-02"},{"lineNumber":336,"author":{"gitId":"zacwong2151"},"content":" result \u003d DayOfWeek.SATURDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":337,"author":{"gitId":"zacwong2151"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":338,"author":{"gitId":"zacwong2151"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":339,"author":{"gitId":"zacwong2151"},"content":" // case \"SUN\"","lastModifiedDate":"2023-09-02"},{"lineNumber":340,"author":{"gitId":"zacwong2151"},"content":" result \u003d DayOfWeek.SUNDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":341,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":342,"author":{"gitId":"zacwong2151"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":343,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":344,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"zacwong2151":344}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":" * one of the subclasses of a Task","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" return \"T\" + super.toFileString();","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zacwong2151":18}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" * This class deals with interactions with the user","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" private static String indent \u003d \" \";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" private static String horizontalLines \u003d indent + \"__________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" private static String dukeFilePath \u003d \"data/duke.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" private String name \u003d \"zac\";","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" * Read the user\u0027s commands","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" * @param scanner object that is used to read the user\u0027s commands","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" * @return the user\u0027s command as a String","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" public String readCommand(Scanner scanner) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" if (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" // Handle the case where no input is available","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" // You can return a default value or show an error message.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" return \"\"; // or throw an exception, print an error message, etc.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" * Prints the error","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" * @param error some stuff","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":" public void showError(String error) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + error);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"zacwong2151"},"content":" * Displays a horizontal line","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"zacwong2151"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"zacwong2151"},"content":" System.out.println(horizontalLines);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"zacwong2151"},"content":" * Show the welcome message, and prints the existing content in the duke.TaskList (if it exists)","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"zacwong2151"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"zacwong2151"},"content":" System.out.println(horizontalLines);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Hello! I\u0027m \" + name);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"What can I do for you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"zacwong2151"},"content":" System.out.println(horizontalLines);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"zacwong2151"},"content":" printFileContents(dukeFilePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"zacwong2151"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"zacwong2151"},"content":" System.out.println(\"1\" + e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"zacwong2151"},"content":" public void showExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + \"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"zacwong2151"},"content":" * Prints the input string with horizontal lines above and below it","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"zacwong2151"},"content":" * @param string the input string","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"zacwong2151"},"content":" public static void printWithIndent(String string) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"zacwong2151"},"content":" System.out.println(horizontalLines);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"zacwong2151"},"content":" System.out.println(indent + string);","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"zacwong2151"},"content":" System.out.println(horizontalLines);","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"zacwong2151"},"content":" * Prints out all the tasks in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"zacwong2151"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"zacwong2151"},"content":" * @param filePath the file where the lists of Tasks are stored. It is hardcoded to be \"data/duke.txt\"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"zacwong2151"},"content":" * @throws FileNotFoundException if the file at this filePath is not found (though I\u0027m not sure","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"zacwong2151"},"content":" * when this will happen)","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"zacwong2151"},"content":" private static void printFileContents(String filePath) throws FileNotFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"zacwong2151"},"content":" File f \u003d new File(filePath); // create a File for the given file path","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"zacwong2151"},"content":" Scanner s \u003d new Scanner(f); // create a Scanner using the File as the source","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"zacwong2151"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"zacwong2151"},"content":" System.out.println(s.nextLine());","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"zacwong2151":89}},{"path":"src/test/java/duke/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" private LocalDateTime date \u003d LocalDateTime.of(2023, 9, 3, 17, 00);","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" * Tests the localDateToString method","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" public void testLocalDateToString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"Sep 3 2023 5:00PM\", Deadline.localDatetoString(date));","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" * Tests the toString method for a Deadline object","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" public void testToString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"[D][ ] return book (by: Sep 3 2023 5:00PM)\",","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" new Deadline(\"return book \", date).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" * Tests the toFileString method for a Deadline object","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" public void testToFileString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"D | O | return book | Sep 3 2023 5:00PM\",","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" new Deadline(\"return book \", date).toFileString());","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"zacwong2151":37}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"import static org.junit.jupiter.api.Assertions.assertNull;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" private String tempFilePath \u003d \"data/temp.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" private Storage storage \u003d new Storage(tempFilePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" * Tests the load method in Storage. Exception should always be thrown","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" public void load_nil_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" storage.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" } catch (DukeException | IOException | ClassNotFoundException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" assertNull(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"zacwong2151":22}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" private ArrayList\u003cTask\u003e tasklist \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" private TaskList tasks \u003d new TaskList(tasklist);","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" public void addTask_todo_success() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"T\", \"borrow book\");","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" // Perform assertions or test other functionality here","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" assertEquals(1, tasks.getSize()); // Example assertion","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":" public void addTask_deadline_success() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"D\", \"return book /by 2/12/2019 1800\");","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":" // Perform assertions or test other functionality here","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":" assertEquals(1, tasks.getSize()); // Example assertion","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":" public void addTask_deadline_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"D\", \"return book /by 2/12/2019\");","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"zacwong2151"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"put in a time pls\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"zacwong2151"},"content":" public void deleteTask_delete1_success() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"T\", \"borrow book\");","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"zacwong2151"},"content":" tasks.deleteTask(\"delete 1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"zacwong2151"},"content":" assertEquals(0, tasks.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"zacwong2151"},"content":" public void deleteTask_delete2_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"T\", \"borrow book\");","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"zacwong2151"},"content":" tasks.deleteTask(\"delete 2\");","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"zacwong2151"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"You are trying to delete a Task that does not exist\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"zacwong2151"},"content":" public void markDescription_mark1_success() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"T\", \"borrow book\");","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"zacwong2151"},"content":" tasks.markDescription(\"mark 1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"X\", tasks.getTask(0).getStatusIcon());","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"zacwong2151"},"content":" public void markDescription_mark2_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"zacwong2151"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"zacwong2151"},"content":" tasks.addTask(\"T\", \"borrow book\");","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"zacwong2151"},"content":" tasks.markDescription(\"mark 2\");","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"zacwong2151"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"You are trying to access a Task that does not exist!\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"zacwong2151":62}},{"path":"src/test/java/duke/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":" public void testToString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"[T][ ] borrow book\", new ToDo(\"borrow book\").toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":" public void testToFileString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":" assertEquals(\"T | O | borrow book\", new ToDo(\"borrow book\").toFileString());","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"zacwong2151":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"zacwong2151"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"zacwong2151"},"content":"deadline return book /by Sunday 1700","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"zacwong2151"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"zacwong2151"},"content":"deadline return book /y Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"deadline return book by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"zacwong2151"},"content":"event project meeting from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"zacwong2151"},"content":"event project meeting /rom Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":"event project meeting /from Mon 2pm to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"zacwong2151"},"content":"event project meeting /from Mon 2pm /o 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"zacwong2151"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"zacwong2151"},"content":"todo randomthing","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"zacwong2151"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"zacwong2151"},"content":"mark 5","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"zacwong2151"},"content":"delete 4","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"zacwong2151"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"zacwong2151"},"content":"find book","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zacwong2151":20}},{"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":"zacwong2151"},"content":"REM Set the working directory to the root directory (ip) before executing the script","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"zacwong2151"},"content":"CD /D ..\\","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"zacwong2151"},"content":"if not exist bin mkdir bin","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"zacwong2151"},"content":"del .\\text-ui-test\\ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"zacwong2151"},"content":"javac -cp src\\main\\java -Xlint:none -d bin src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"zacwong2151"},"content":"REM because now that the working directory is set to ip, ACTUAL.TXT and EXPECTED.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"zacwong2151"},"content":"REM can only be accessed with the appropriate cd","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"zacwong2151"},"content":"REM Run the program, feed commands from input.txt file, and redirect the output to ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"zacwong2151"},"content":"java -classpath bin duke.Duke \u003c .\\text-ui-test\\input.txt \u003e .\\text-ui-test\\ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"zacwong2151"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zacwong2151"},"content":"REM Compare the output to the expected output","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"zacwong2151"},"content":"FC .\\text-ui-test\\ACTUAL.TXT .\\text-ui-test\\EXPECTED.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"zacwong2151":14,"-":14}}] diff --git a/zacwong2151_ip_master/commits.json b/zacwong2151_ip_master/commits.json index 49d9a115..bfaa5402 100644 --- a/zacwong2151_ip_master/commits.json +++ b/zacwong2151_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"zacwong2151":[{"date":"2023-08-21","commitResults":[{"hash":"28972e3dd62ab92400a3e252f576c84353dc5557","isMergeCommit":false,"messageTitle":"added couple print.ln statements for level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"46f6c15b26629ecbc4eb6a54eb69a9384f871231","isMergeCommit":false,"messageTitle":"finished Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"d27e812a2f157b6e439455029e506555e37c407b","isMergeCommit":false,"messageTitle":"added add, list features for level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":6}}},{"hash":"22ef12aaec880d3d6ec1fde5b1d933b0fb8bb9ef","isMergeCommit":false,"messageTitle":"added Task class and added Mark as Done feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":8}}}]},{"date":"2023-08-22","commitResults":[{"hash":"b02ba752461442f9986ad625bb81f4dab09be8e8","isMergeCommit":false,"messageTitle":"added multiple subclasses of Task, made Task abstract","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":24}}},{"hash":"844d19f18838122c34d6a533b533df7b972dec09","isMergeCommit":false,"messageTitle":"added automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":2,"deletions":2},"bat":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"4de06649fca07b774e918ce2a7d08577c15532db","isMergeCommit":false,"messageTitle":"implemented handle exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":104,"deletions":67}}},{"hash":"a457b9e984139a15d9fb6166e6947c111aa71f2b","isMergeCommit":false,"messageTitle":"implemented delete feature for Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":31,"deletions":24}}}]},{"date":"2023-08-30","commitResults":[{"hash":"739be8d0108cb633d978ea0dc6794e7547e9bf05","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":2},"java":{"insertions":181,"deletions":18},"bat":{"insertions":14,"deletions":7}}}]},{"date":"2023-09-01","commitResults":[{"hash":"1b51899da699bddfde83dbd046f254a40e1dbef7","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":155,"deletions":8}}},{"hash":"8cfb3da583291caf6eec6d06f2aac22793cd00b6","isMergeCommit":false,"messageTitle":"doing this commit to merge Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3}}},{"hash":"a28b33cfdaee84a803a03e2246629959aeff6382","isMergeCommit":true,"messageTitle":"deleted duke.txt file to resolve conflict","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e85862cdb3ddf4ddf05cb48779039ea1df06be05","isMergeCommit":false,"messageTitle":"halfway doing A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":190,"deletions":78}}}]},{"date":"2023-09-02","commitResults":[{"hash":"20761ff1542175b6b2f9a9bd91992ef6c3029e4d","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":464,"deletions":412}}},{"hash":"e63ca9053dc2e7c32c7d3db9728c4f29434bb08a","isMergeCommit":false,"messageTitle":"Added untracked files","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"28c06dedd3fdbddb3036ce09ae278b7dbf5a547c","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["tag-A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"5b4c267b4b0539f3b465936a31fd5b4474243ec3","isMergeCommit":false,"messageTitle":"added A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":63},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"b93ca1fa716f9e2ec64be796ab53ca7163d644b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["tag-A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"690d0f67c0616c1af37f1b44f574ddef308c4142","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"047630fa10a90094a81fc6938337570241e0d4d9","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":23,"deletions":1},"java":{"insertions":260,"deletions":84},"bat":{"insertions":1,"deletions":1}}},{"hash":"493edd7665c770b2e9211d626d18553bd19cc314","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"","tags":["tag-A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"f903b3bc8086d7a1222b4a9cd621598f37e9b981","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":2}}},{"hash":"3bac688d4e9a1392de065d94ef78135209e50358","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Jar\u0027","messageBody":"","tags":["tag-A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"68c43398259f65441d005a7a578ad38dec27af93","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["tag-A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"23554d88b6c209eaad89a16692d09fff77fccbd8","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"zacwong2151":{"java":895,"md":2,"fxml":0,"sh":0,"bat":14,"gradle":27,"txt":19}},"authorContributionVariance":{"zacwong2151":62985.125},"authorDisplayNameMap":{"zacwong2151":"CS2103T-T14-4 ZACH.. JUN"}} +{"authorDailyContributionsMap":{"zacwong2151":[{"date":"2023-08-21","commitResults":[{"hash":"28972e3dd62ab92400a3e252f576c84353dc5557","isMergeCommit":false,"messageTitle":"added couple print.ln statements for level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"46f6c15b26629ecbc4eb6a54eb69a9384f871231","isMergeCommit":false,"messageTitle":"finished Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"d27e812a2f157b6e439455029e506555e37c407b","isMergeCommit":false,"messageTitle":"added add, list features for level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":6}}},{"hash":"22ef12aaec880d3d6ec1fde5b1d933b0fb8bb9ef","isMergeCommit":false,"messageTitle":"added Task class and added Mark as Done feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":8}}}]},{"date":"2023-08-22","commitResults":[{"hash":"b02ba752461442f9986ad625bb81f4dab09be8e8","isMergeCommit":false,"messageTitle":"added multiple subclasses of Task, made Task abstract","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":24}}},{"hash":"844d19f18838122c34d6a533b533df7b972dec09","isMergeCommit":false,"messageTitle":"added automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":2,"deletions":2},"bat":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"4de06649fca07b774e918ce2a7d08577c15532db","isMergeCommit":false,"messageTitle":"implemented handle exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":104,"deletions":67}}},{"hash":"a457b9e984139a15d9fb6166e6947c111aa71f2b","isMergeCommit":false,"messageTitle":"implemented delete feature for Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":31,"deletions":24}}}]},{"date":"2023-08-30","commitResults":[{"hash":"739be8d0108cb633d978ea0dc6794e7547e9bf05","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":2},"java":{"insertions":181,"deletions":18},"bat":{"insertions":14,"deletions":7}}}]},{"date":"2023-09-01","commitResults":[{"hash":"1b51899da699bddfde83dbd046f254a40e1dbef7","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":155,"deletions":8}}},{"hash":"8cfb3da583291caf6eec6d06f2aac22793cd00b6","isMergeCommit":false,"messageTitle":"doing this commit to merge Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3}}},{"hash":"a28b33cfdaee84a803a03e2246629959aeff6382","isMergeCommit":true,"messageTitle":"deleted duke.txt file to resolve conflict","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e85862cdb3ddf4ddf05cb48779039ea1df06be05","isMergeCommit":false,"messageTitle":"halfway doing A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":190,"deletions":78}}}]},{"date":"2023-09-02","commitResults":[{"hash":"20761ff1542175b6b2f9a9bd91992ef6c3029e4d","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":464,"deletions":412}}},{"hash":"e63ca9053dc2e7c32c7d3db9728c4f29434bb08a","isMergeCommit":false,"messageTitle":"Added untracked files","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"28c06dedd3fdbddb3036ce09ae278b7dbf5a547c","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["tag-A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"5b4c267b4b0539f3b465936a31fd5b4474243ec3","isMergeCommit":false,"messageTitle":"added A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":63},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"b93ca1fa716f9e2ec64be796ab53ca7163d644b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["tag-A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"690d0f67c0616c1af37f1b44f574ddef308c4142","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"047630fa10a90094a81fc6938337570241e0d4d9","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":23,"deletions":1},"java":{"insertions":260,"deletions":84},"bat":{"insertions":1,"deletions":1}}},{"hash":"493edd7665c770b2e9211d626d18553bd19cc314","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"","tags":["tag-A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"f903b3bc8086d7a1222b4a9cd621598f37e9b981","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":2}}},{"hash":"3bac688d4e9a1392de065d94ef78135209e50358","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Jar\u0027","messageBody":"","tags":["tag-A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"68c43398259f65441d005a7a578ad38dec27af93","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["tag-A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"23554d88b6c209eaad89a16692d09fff77fccbd8","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2bbed63eb1147b1ad00fb278c01839eed82cdb8c","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","tags":["tag-A-JavaDoc"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":31,"deletions":6}}},{"hash":"725c978d66c9aec46d3b8ce9a9c52d08e284d557","isMergeCommit":false,"messageTitle":"commit changes to data/temp.txt","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f95db5b9b2c0eb59b407fed6d9c17d57835fda44","isMergeCommit":true,"messageTitle":"resolve conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d78b843791543918ef1edd85b98f9146d911aef8","isMergeCommit":false,"messageTitle":"duke.txt stuff","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3}}},{"hash":"55be16c266752333a45f618506f2aea38b9dd4e0","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027","messageBody":"","tags":["tag-A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"ed929df1a3182a5ca50acb91b8ab2a3a6a075eb8","isMergeCommit":false,"messageTitle":"testing branching","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"888197ec17fef4805f7266769369ad9602e0548c","isMergeCommit":false,"messageTitle":"is this the subject body?","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"5f3ca5f13fb08b77df5791dfe249150d30702717","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"zacwong2151":{"java":920,"md":2,"fxml":0,"sh":0,"bat":14,"gradle":27,"txt":20}},"authorContributionVariance":{"zacwong2151":64437.277},"authorDisplayNameMap":{"zacwong2151":"CS2103T-T14-4 ZACH.. JUN"}} diff --git a/zannloo_ip_master/authorship.json b/zannloo_ip_master/authorship.json index 0e581b3a..33a81203 100644 --- a/zannloo_ip_master/authorship.json +++ b/zannloo_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":"zannloo"},"content":" //mainClass.set(\"seedu.duke.Duke\") //check if need change","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" mainClass.set(\"teho.TehO\") //new","lastModifiedDate":"2023-08-28"},{"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":"zannloo"},"content":"// archiveBaseName \u003d \"duke\"//old","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" archiveBaseName \u003d \"teho\"//new","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"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":{"zannloo":4,"-":40}},{"path":"src/main/java/teho/exceptions/EmptyDeadlineDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":" * Represents an exception that is thrown when description of a deadline task is empty.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"public class EmptyDeadlineDescriptionException extends TehOException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" * Returns an exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * @return Exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" return \"OOPS!!! The description of a deadline cannot be empty.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zannloo":17}},{"path":"src/main/java/teho/exceptions/EmptyEventDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":" * Represents an exception that is thrown when description of an event task is empty.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"public class EmptyEventDescriptionException extends TehOException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" * Returns an exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * @return Exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" return \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zannloo":16}},{"path":"src/main/java/teho/exceptions/EmptyFindDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.exceptions;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"public class EmptyFindDescriptionException extends TehOException {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":" return \"☹ OOPS!!! You have not listed what you want to find.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"zannloo":8}},{"path":"src/main/java/teho/exceptions/EmptyToDoDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":" * Represents an exception that is thrown when description of todo task is empty.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"public class EmptyToDoDescriptionException extends TehOException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" * Returns an exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * @return Exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" return \"OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zannloo":16}},{"path":"src/main/java/teho/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":" * Represents an exception that is thrown when user\u0027s command is invalid.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"public class InvalidCommandException extends TehOException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" * Returns an exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * @return Exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" return \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zannloo":17}},{"path":"src/main/java/teho/exceptions/TehOException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":" * Represents exceptions specific to TehO.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"public class TehOException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" * Returns an exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * @return Exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" return \"OOPS!!! Something is wrong with TehO!\";","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zannloo":16}},{"path":"src/main/java/teho/main/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" * Represents a task with a specific deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" private LocalDate byDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" * Constructs new Deadline task with description and deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" * @param description Description of task with a specific deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" * @param byDate Due date of the task with a specific deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" public Deadline(String description, LocalDate byDate) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" this.byDate \u003d byDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the Deadline task details.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" * @return String representation of the Deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" return \"[D]\" + super.getStatusIcon() + \" \" + this.description","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" + \" (by: \" + byDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the Deadline task details for saving task in file.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" * @return String representation of the Deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" public String fileString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" return \"D|\" + (this.isDone ? 1 : 0) + \"|\" + this.description + \"|\" + byDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zannloo":43}},{"path":"src/main/java/teho/main/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" * Represents a task with a specific time frame.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" private LocalDate fromDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" private LocalDate toDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" * Constructs new Event task with description, beginning date of event and","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" * end date of event.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" * @param description Description of task with a specific time frame.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" * @param fromDate Beginning date of the task with a specific time frame.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" * @param toDate End date of the task with a specific time frame.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" public Event(String description, LocalDate fromDate, LocalDate toDate) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" this.fromDate \u003d fromDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" this.toDate \u003d toDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the Event task details.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" * @return String representation of the Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" return \"[E]\" + super.getStatusIcon() + \" \" + this.description","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" + \" (from: \"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" + fromDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \" to: \"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" + toDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the Event task details for saving task in file.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" * @return String representation of the Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" public String fileString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" return \"E|\" + (this.isDone? 1: 0) + \"|\" + this.description + \"|\"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" + fromDate + \"|\" + toDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zannloo":51}},{"path":"src/main/java/teho/main/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import teho.main.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"import teho.main.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"import teho.main.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * Makes sense of the user command that was loaded in file.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" * Parses input and adds task to taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" * @param nextLine Line to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" * @param taskList List to add the parsed task into.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" public static void readLine(String nextLine, ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" Task taskToAddFirst;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" //use (\\\\|) to treat \\ as a legit character or else it will get split by any spaces","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" String[] sections \u003d nextLine.split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" int taskNumber \u003d taskList.size(); //counting from 0","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" if (sections[0].equals(\"T\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" taskToAddFirst \u003d new ToDo(sections[2]);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" taskList.add(taskToAddFirst);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" if (sections[1].equals(\"1\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" taskToAddFirst.markAsDone(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" } else if (sections[0].equals(\"D\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" taskToAddFirst \u003d new Deadline(sections[2], LocalDate.parse(sections[3]));","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" taskList.add(taskToAddFirst);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" if (sections[1].equals(\"1\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" taskToAddFirst.markAsDone(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" } else if (sections[0].equals(\"E\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" taskToAddFirst \u003d new Event(sections[2], LocalDate.parse(sections[3]), LocalDate.parse(sections[4]));","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" taskList.add(taskToAddFirst);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" if (sections[1].equals(\"1\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" taskToAddFirst.markAsDone(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":44}},{"path":"src/main/java/teho/main/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import teho.main.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"import teho.main.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"import teho.main.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"import java.io.*;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" * Saves and loads tasks into and from a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" /** File path for saving and loadings tasks into and from a file */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" public static String filePath; //check if need switch to private","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" * Constructs new Storage instance with file path.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" * @param filePath String representation of the file path of the file","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" * to save and load task into and from.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" * Saves tasks from taskList into file.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks to save the tasks from into the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" public static void saveTasks(TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" //Solution below inspired by https://www.geeksforgeeks.org/io-bufferedwriter-class-methods-java/","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" FileWriter file \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" BufferedWriter writer \u003d new BufferedWriter(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" writer.write(task.fileString());","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" writer.newLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" System.out.println(\"☹ OOPS!!! Error when saving task(s).\");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" * Loads tasks from file into a taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" * @return ArrayList containing the loaded tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" public static ArrayList\u003cTask\u003e loadTasks() { //change type","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" File loadedFile \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" Scanner sc \u003d new Scanner(loadedFile);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" String nextLine \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" Parser.readLine(nextLine, taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" sc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" System.out.println(\"☹ OOPS!!! Error when loading task(s).\");","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":69}},{"path":"src/main/java/teho/main/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":" * Represents a task with only a description and status.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" * Description of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" * Status of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" * Constructs new Task with description.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" * @param description Description of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" * Returns status icon of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" * If status icon is \"X\", task is done.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" * If status icon is \" \", task is undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" * @return Status icon of task (\"X\" if task is done, \" \" if task is undone).","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" public String getStatusIcon() { //change to separate it with the description","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"]\"; // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" * Returns string representation of a task, including the status icon and description of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" return this.getStatusIcon() + \" \" + this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" * Marks task as done","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" * @param task Index of task to be marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" public void markAsDone(int task) {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" * Marks task as undone","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" * @param task Index of task to be marked as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" public void markAsNotDone(int task) {","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the task details for saving task in file.","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":" * @return String representation of the Deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"zannloo"},"content":" public abstract String fileString();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zannloo":71}},{"path":"src/main/java/teho/main/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import teho.main.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" * Represents list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" /** List of tasks. */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" * Constructs a TaskList instance with the given list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" * Returns number of tasks in list.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" * @return Number of tasks in list.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" * Returns the task with the corresponding index number.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" * @param taskNumber Index number of the task to be returned.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" * @return Task with the corresponding index number.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" public Task getTask(int taskNumber) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" return this.taskList.get(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" * Adds task into list.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" * @param task Task to be added into list.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" * Removes task from the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" * @param taskNumber Index number of the corresponding task to be removed from list.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" public void remove(int taskNumber) {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" this.taskList.remove(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":59}},{"path":"src/main/java/teho/main/TehO.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import teho.exceptions.*;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"import static java.lang.Integer.parseInt;","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * Main class that represents a Personal Assistant Chatbot","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" * that helps a person to keep track of various things.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":"public class TehO {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" * Constructs a TehO instance with string representation of a file path","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" * to save and load tasks into and from.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" * @param filePath Path of file to save and load tasks into and from.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" public TehO(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" taskList \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" * Runs TehO to understand user\u0027s commands and carry out actions accordingly.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" public void run() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" ui.generateHelloMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" storage.loadTasks();","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" while (true) {","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" String userCommand \u003d sc.nextLine();","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" if (userCommand.equals(\"bye\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" ui.generateGoodbyeMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.equals(\"list\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" ui.generateList(taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" markTask(userCommand);","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" unmarkTask(userCommand);","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" addToDo(userCommand);","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" addDeadline(userCommand);","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"event\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" addEvent(userCommand);","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" delete(userCommand);","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"find\")){","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" find(userCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":" sc.close();","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"zannloo"},"content":" * Represents the main method to start TehO.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"zannloo"},"content":" * @param args Stores Java command-line arguments and is an array of type java.lang.String class.","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"zannloo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"zannloo"},"content":" new TehO(\"/Users/loomeilinzann/ip/text-ui-test/data/teho.txt\").run();","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"zannloo"},"content":" * Represents the marking of task according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the task to be marked.","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"zannloo"},"content":" public void markTask(String userCommand) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"zannloo"},"content":" //note that split returns a String[]","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"zannloo"},"content":" //parseInt returns the integer value which is represented by the argument","lastModifiedDate":"2023-08-22"},{"lineNumber":87,"author":{"gitId":"zannloo"},"content":" int taskNumber \u003d parseInt(userCommand.split(\" \")[1]) - 1; //counting from 0","lastModifiedDate":"2023-08-22"},{"lineNumber":88,"author":{"gitId":"zannloo"},"content":" Task task \u003d this.taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"zannloo"},"content":" task.markAsDone(taskNumber);","lastModifiedDate":"2023-08-22"},{"lineNumber":90,"author":{"gitId":"zannloo"},"content":" ui.generateMarkTaskMessage(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"zannloo"},"content":" * Represents the unmarking of task according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the task to be unmarked.","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"zannloo"},"content":" public void unmarkTask(String userCommand) {","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"zannloo"},"content":" int taskNumber \u003d parseInt(userCommand.split(\" \")[1]) - 1; //counting from 0","lastModifiedDate":"2023-08-22"},{"lineNumber":100,"author":{"gitId":"zannloo"},"content":" Task task \u003d this.taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"zannloo"},"content":" task.markAsNotDone(taskNumber);","lastModifiedDate":"2023-08-22"},{"lineNumber":102,"author":{"gitId":"zannloo"},"content":" ui.generateUnmarkTaskMessage(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":104,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"zannloo"},"content":" * Represents the adding of new ToDo task into taskList according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the new ToDo task to be added into taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"zannloo"},"content":" public void addToDo(String userCommand) {","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":112,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c 5) {","lastModifiedDate":"2023-08-23"},{"lineNumber":113,"author":{"gitId":"zannloo"},"content":" throw new EmptyToDoDescriptionException();","lastModifiedDate":"2023-08-23"},{"lineNumber":114,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":115,"author":{"gitId":"zannloo"},"content":" String command \u003d userCommand.substring(5); //\"todo \" 5 index","lastModifiedDate":"2023-08-22"},{"lineNumber":116,"author":{"gitId":"zannloo"},"content":" Task task \u003d new ToDo(command);","lastModifiedDate":"2023-08-22"},{"lineNumber":117,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"zannloo"},"content":" ui.generateAddToDoMessage(task, taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"zannloo"},"content":" } catch (EmptyToDoDescriptionException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":120,"author":{"gitId":"zannloo"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-23"},{"lineNumber":121,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":122,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":123,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":124,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"zannloo"},"content":" * Represents the adding of new Deadline task into taskList according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the new Deadline task to be added into taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"zannloo"},"content":" public void addDeadline(String userCommand) {","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":131,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c 9) {","lastModifiedDate":"2023-08-23"},{"lineNumber":132,"author":{"gitId":"zannloo"},"content":" throw new EmptyDeadlineDescriptionException();","lastModifiedDate":"2023-08-23"},{"lineNumber":133,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":134,"author":{"gitId":"zannloo"},"content":" String commandWithDate \u003d userCommand.substring(9); //\"deadline \" 9 index","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"zannloo"},"content":" String cDeadline \u003d commandWithDate.split(\" /by \")[0]; //just description","lastModifiedDate":"2023-08-23"},{"lineNumber":136,"author":{"gitId":"zannloo"},"content":" LocalDate byDate \u003d LocalDate.parse(commandWithDate.split(\" /by \")[1]); //just byDate","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"zannloo"},"content":" Task task \u003d new Deadline(cDeadline, byDate);","lastModifiedDate":"2023-08-23"},{"lineNumber":138,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"zannloo"},"content":" ui.generateAddDeadlineMessage(task, taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"zannloo"},"content":" } catch (EmptyDeadlineDescriptionException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":141,"author":{"gitId":"zannloo"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-23"},{"lineNumber":142,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":143,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":144,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":145,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"zannloo"},"content":" * Represents the addition of new Event task into taskList according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the new Event task to be added into taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"zannloo"},"content":" public void addEvent(String userCommand) {","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":152,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c 6) {","lastModifiedDate":"2023-08-23"},{"lineNumber":153,"author":{"gitId":"zannloo"},"content":" throw new EmptyEventDescriptionException();","lastModifiedDate":"2023-08-23"},{"lineNumber":154,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":155,"author":{"gitId":"zannloo"},"content":" String commandWithDate \u003d userCommand.substring(6); //\"todo \" 6 index","lastModifiedDate":"2023-08-22"},{"lineNumber":156,"author":{"gitId":"zannloo"},"content":" String cEvent \u003d commandWithDate.split(\" /from \")[0]; //just description","lastModifiedDate":"2023-08-23"},{"lineNumber":157,"author":{"gitId":"zannloo"},"content":" String dates \u003d commandWithDate.split(\" /from \")[1]; //bothDates","lastModifiedDate":"2023-08-23"},{"lineNumber":158,"author":{"gitId":"zannloo"},"content":" LocalDate fromDate \u003d LocalDate.parse(dates.split(\" /to \")[0]); //just fromDate","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"zannloo"},"content":" LocalDate toDate \u003d LocalDate.parse(dates.split(\" /to \")[1]); //just toDate","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"zannloo"},"content":" Task task \u003d new Event(cEvent, fromDate, toDate);","lastModifiedDate":"2023-08-23"},{"lineNumber":161,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"zannloo"},"content":" ui.generateAddEventMessage(task, taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":163,"author":{"gitId":"zannloo"},"content":" } catch (EmptyEventDescriptionException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":164,"author":{"gitId":"zannloo"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-23"},{"lineNumber":165,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":166,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":167,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":168,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":169,"author":{"gitId":"zannloo"},"content":" * Represents the deletion of task from taskList according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":170,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":171,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the task to be deleted from taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":173,"author":{"gitId":"zannloo"},"content":" public void delete(String userCommand) {","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"zannloo"},"content":" int taskNumber \u003d parseInt(userCommand.split(\" \")[1]) - 1; //counting from 0","lastModifiedDate":"2023-08-23"},{"lineNumber":175,"author":{"gitId":"zannloo"},"content":" Task task \u003d this.taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":176,"author":{"gitId":"zannloo"},"content":" this.taskList.remove(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"zannloo"},"content":" ui.generateDeleteMessage(task, taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":180,"author":{"gitId":"zannloo"},"content":" public void find(String userCommand) {","lastModifiedDate":"2023-08-28"},{"lineNumber":181,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":182,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c 5) {","lastModifiedDate":"2023-08-28"},{"lineNumber":183,"author":{"gitId":"zannloo"},"content":" throw new EmptyFindDescriptionException();","lastModifiedDate":"2023-08-28"},{"lineNumber":184,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":185,"author":{"gitId":"zannloo"},"content":" String toMatch \u003d userCommand.substring(5); //\"deadline \" 9 index","lastModifiedDate":"2023-08-28"},{"lineNumber":186,"author":{"gitId":"zannloo"},"content":" ui.generateFindMessage(toMatch, taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":187,"author":{"gitId":"zannloo"},"content":" } catch (EmptyFindDescriptionException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":188,"author":{"gitId":"zannloo"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":189,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":190,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":191,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-20"},{"lineNumber":192,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":192}},{"path":"src/main/java/teho/main/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import teho.main.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":" * Represents a task with only a description.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * Constructs new ToDo task with description.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" * @param description Description of task to be done.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the task details.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" * @return String representation of the ToDo task.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" return \"[T]\" + super.getStatusIcon() + \" \" + this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the task details for saving task in file.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" * @return String representation of the ToDo task.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" public String fileString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" return \"T|\" + (this.isDone? 1: 0) + \"|\" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zannloo":37}},{"path":"src/main/java/teho/main/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import teho.main.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"import teho.main.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":" * Deals with interactions with the user through generating messages.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" * Generates hello message when TehO chatbot starts.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" public static void generateHelloMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" System.out.println(\"Hello! I\u0027m TehO \\nWhat can I do for you?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" * Generates goodbye message when user types bye and TehO chatbot exits.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" public static void generateGoodbyeMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" * Generates message containing list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks to be generated.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" public static void generateList(TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" System.out.println((i + 1) + \". \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" * Generates message to show that task is marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" * @param task Task marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" public static void generateMarkTaskMessage(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" * Generates message to show that task is marked as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" * @param task Task marked as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" public void generateUnmarkTaskMessage(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" * Generates message to show that ToDo task is added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks that added task.","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" public void generateAddToDoMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":" System.out.println(\"Now you have \" + taskList.getSize() + \" task(s) in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"zannloo"},"content":" * Generates message to show that Deadline task is added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"zannloo"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks that added task.","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"zannloo"},"content":" public void generateAddDeadlineMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"zannloo"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"zannloo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"zannloo"},"content":" System.out.println(\"Now you have \" + taskList.getSize() + \" task(s) in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"zannloo"},"content":" * Generates message to show that Event task is added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"zannloo"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks that added task.","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"zannloo"},"content":" public void generateAddEventMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"zannloo"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"zannloo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"zannloo"},"content":" System.out.println(\"Now you have \" + taskList.getSize() + \" task(s) in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"zannloo"},"content":" * Generates message to show that task is deleted from list.","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"zannloo"},"content":" * @param task Task deleted from list.","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks to delete task from.","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"zannloo"},"content":" public void generateDeleteMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"zannloo"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"zannloo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"zannloo"},"content":" System.out.println(\"Now you have \" + taskList.getSize() + \" task(s) in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"zannloo"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"zannloo"},"content":" System.out.println(\"OHNO! Loading error!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"zannloo"},"content":" public static void generateFindMessage(String toMatch, TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"zannloo"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"zannloo"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"zannloo"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"zannloo"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"zannloo"},"content":" String stringTask \u003d task.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"zannloo"},"content":" if (stringTask.contains(toMatch)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"zannloo"},"content":" count++;","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"zannloo"},"content":" System.out.println((count) + \". \" + stringTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"zannloo"},"content":" if (count \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"zannloo"},"content":" System.out.println(\"There is no matching task:(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":124}},{"path":"src/test/java/teho/main/DeadLineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main; //same package as the class being tested","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":"public class DeadLineTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" public void toStringTest() {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" LocalDate byDate \u003d LocalDate.parse(\"2019-10-15\");","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" String command \u003d \"Do homework\";","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" Task task \u003d new Deadline(command, byDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" assertEquals(\"[D][ ] Do homework (by: Oct 15 2019)\", task.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" public void fileStringTest() {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" LocalDate byDate \u003d LocalDate.parse(\"2019-10-15\");","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" String command \u003d \"Do assignment\";","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" Task task \u003d new Deadline(command, byDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" assertEquals(\"D|0|Do assignment|2019-10-15\", task.fileString());","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"zannloo":27}},{"path":"src/test/java/teho/main/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main; //same package as the class being tested","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" public void toStringTest(){","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" String command \u003d \"Eat dinner\";","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" Task task \u003d new ToDo(command);","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" assertEquals(\"[T][ ] Eat dinner\", task.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" public void fileStringTest() {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" String command \u003d \"Dance\";","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" Task task \u003d new ToDo(command);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" assertEquals(\"T|0|Dance\", task.fileString());","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"zannloo":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zannloo":2}},{"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":"zannloo"},"content":"java -classpath ..\\bin TehO \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-23"},{"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":{"zannloo":1,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":"java -classpath ../bin TehO \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":"diff ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"zannloo":2,"-":32}}] +[{"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":"zannloo"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" //mainClass.set(\"seedu.duke.Duke\") //check if need change","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" mainClass.set(\"teho.TehO\") //new","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":"// archiveBaseName \u003d \"duke\"//old","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" archiveBaseName \u003d \"teho\"//new","lastModifiedDate":"2023-08-28"},{"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":{"zannloo":17,"-":40}},{"path":"src/main/java/teho/exceptions/EmptyDeadlineDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":" * Represents an exception that is thrown when description of a deadline task is empty.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"public class EmptyDeadlineDescriptionException extends TehOException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" * Returns an exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * @return Exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" return \"OOPS!!! The description of a deadline cannot be empty.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zannloo":17}},{"path":"src/main/java/teho/exceptions/EmptyEventDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":" * Represents an exception that is thrown when description of an event task is empty.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"public class EmptyEventDescriptionException extends TehOException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" * Returns an exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * @return Exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" return \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zannloo":16}},{"path":"src/main/java/teho/exceptions/EmptyFindDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.exceptions;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"public class EmptyFindDescriptionException extends TehOException {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":" return \"☹ OOPS!!! You have not listed what you want to find.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"zannloo":8}},{"path":"src/main/java/teho/exceptions/EmptyToDoDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":" * Represents an exception that is thrown when description of todo task is empty.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"public class EmptyToDoDescriptionException extends TehOException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" * Returns an exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * @return Exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" return \"OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zannloo":16}},{"path":"src/main/java/teho/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":" * Represents an exception that is thrown when user\u0027s command is invalid.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"public class InvalidCommandException extends TehOException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" * Returns an exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * @return Exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" return \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zannloo":17}},{"path":"src/main/java/teho/exceptions/TehOException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":" * Represents exceptions specific to TehO.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"public class TehOException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" * Returns an exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * @return Exception message.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" return \"OOPS!!! Something is wrong with TehO!\";","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zannloo":16}},{"path":"src/main/java/teho/main/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" * Represents a task with a specific deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" private LocalDate byDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" * Constructs new Deadline task with description and deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" * @param description Description of task with a specific deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" * @param byDate Due date of the task with a specific deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" public Deadline(String description, LocalDate byDate) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" this.byDate \u003d byDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the Deadline task details.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" * @return String representation of the Deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" return \"[D]\" + super.getStatusIcon() + \" \" + this.description","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" + \" (by: \" + byDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the Deadline task details for saving task in file.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" * @return String representation of the Deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" public String fileString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" String digitStatus \u003d this.isDone? \"1\": \"0\";","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" return \"D|\" + digitStatus + \"|\" + this.description + \"|\" + byDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zannloo":44}},{"path":"src/main/java/teho/main/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"zannloo"},"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":19,"author":{"gitId":"zannloo"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"zannloo"},"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":"zannloo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" public static DialogBox getTehODialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"zannloo":60}},{"path":"src/main/java/teho/main/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" * Represents a task with a specific time frame.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" private LocalDate fromDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" private LocalDate toDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" * Constructs new Event task with description, beginning date of event and","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" * end date of event.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" * @param description Description of task with a specific time frame.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" * @param fromDate Beginning date of the task with a specific time frame.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" * @param toDate End date of the task with a specific time frame.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" public Event(String description, LocalDate fromDate, LocalDate toDate) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" this.fromDate \u003d fromDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" this.toDate \u003d toDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the Event task details.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" * @return String representation of the Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" return \"[E]\" + super.getStatusIcon() + \" \" + this.description","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" + \" (from: \"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" + fromDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \" to: \"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" + toDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the Event task details for saving task in file.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" * @return String representation of the Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" public String fileString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" String digitStatus \u003d this.isDone? \"1\": \"0\";","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" return \"E|\" + digitStatus + \"|\" + this.description + \"|\"","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" + fromDate + \"|\" + toDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zannloo":52}},{"path":"src/main/java/teho/main/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"zannloo":11}},{"path":"src/main/java/teho/main/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" private TehO tehO \u003d new TehO(\"/Users/loomeilinzann/ip/text-ui-test/data/teho.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setTehO(tehO);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"zannloo":32}},{"path":"src/main/java/teho/main/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":"import teho.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" //@FXML annotation marks a private or protected member and","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" // makes it accessible to FXMLdespite its modifier.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" // Without the annotation, we will have to make everything","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" // public and expose our UI to unwanted changes.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" private TehO tehO;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" private Image userImage \u003d new Image(this.getClass()","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" .getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" private Image tehOImage \u003d new Image(this.getClass()","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" .getResourceAsStream(\"/images/tehO.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" String helloMessage \u003d \"Hello! I\u0027m TehO \\nWhat could I do for you today?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" dialogContainer.getChildren().add(DialogBox.getTehODialog(helloMessage, tehOImage));","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" public void setTehO(TehO t) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" tehO \u003d t;","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" * Creates two dialog boxes, one echoing user input and the other containing","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" * Duke\u0027s reply and then appends them to the dialog container.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" * Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" private void handleUserInput() throws InvalidCommandException {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" String response \u003d tehO.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" DialogBox.getTehODialog(response, tehOImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" //clear input field","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":" //Scroll down to the end every time dialogContainer\u0027s height changes","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"zannloo":65}},{"path":"src/main/java/teho/main/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import teho.main.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"import teho.main.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"import teho.main.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * Makes sense of the user command that was loaded in file.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" * Parses input and adds task to taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" * @param nextLine Line to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" * @param taskList List to add the parsed task into.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" public static void readLine(String nextLine, ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" Task taskToAddFirst;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" //use (\\\\|) to treat \\ as a legit character or else it will get split by any spaces","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" String[] sections \u003d nextLine.split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" int taskNumber \u003d taskList.size(); //counting from 0","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" if (sections[0].equals(\"T\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" taskToAddFirst \u003d new ToDo(sections[2]);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" taskList.add(taskToAddFirst);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" if (sections[1].equals(\"1\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" taskToAddFirst.markAsDone(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" } else if (sections[0].equals(\"D\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" taskToAddFirst \u003d new Deadline(sections[2], LocalDate.parse(sections[3]));","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" taskList.add(taskToAddFirst);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" if (sections[1].equals(\"1\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" taskToAddFirst.markAsDone(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" } else if (sections[0].equals(\"E\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" taskToAddFirst \u003d new Event(sections[2], LocalDate.parse(sections[3]), LocalDate.parse(sections[4]));","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" taskList.add(taskToAddFirst);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" if (sections[1].equals(\"1\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" taskToAddFirst.markAsDone(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":44}},{"path":"src/main/java/teho/main/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import teho.main.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"import teho.main.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"import teho.main.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"import java.io.*;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" * Saves and loads tasks into and from a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" /** File path for saving and loadings tasks into and from a file */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" public static String filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" * Constructs new Storage instance with file path.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" * @param filePath String representation of the file path of the file","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" * to save and load task into and from.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" * Saves tasks from taskList into file.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks to save the tasks from into the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" public static void saveTasks(TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" //Solution below inspired by https://www.geeksforgeeks.org/io-bufferedwriter-class-methods-java/","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" FileWriter file \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" BufferedWriter writer \u003d new BufferedWriter(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" writer.write(task.fileString());","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" writer.newLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" System.out.println(\"☹ OOPS!!! Error when saving task(s).\");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" * Loads tasks from file into a taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" * @return ArrayList containing the loaded tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" public static ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" File loadedFile \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" Scanner sc \u003d new Scanner(loadedFile);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" String nextLine \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" Parser.readLine(nextLine, taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" sc.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" System.out.println(\"☹ OOPS!!! Error when loading task(s).\");","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":69}},{"path":"src/main/java/teho/main/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":" * Represents a task with only a description and status.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" * Description of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" * Status of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" * Constructs new Task with description.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" * @param description Description of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" * Returns status icon of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" * If status icon is \"X\", task is done.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" * If status icon is \" \", task is undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" * @return Status icon of task (\"X\" if task is done, \" \" if task is undone).","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" * Returns string representation of a task, including the status icon and description of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" return this.getStatusIcon() + \" \" + this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" * Marks task as done","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" * @param task Index of task to be marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" public void markAsDone(int task) {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" * Marks task as undone","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" * @param task Index of task to be marked as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" public void markAsNotDone(int task) {","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" public abstract String fileString();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zannloo":66}},{"path":"src/main/java/teho/main/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import teho.main.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" * Represents list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" /** List of tasks. */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" * Constructs a TaskList instance with the given list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" * Returns number of tasks in list.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" * @return Number of tasks in list.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" * Returns the task with the corresponding index number.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" * @param taskNumber Index number of the task to be returned.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" * @return Task with the corresponding index number.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" public Task getTask(int taskNumber) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" return this.taskList.get(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" * Adds task into list.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" * @param task Task to be added into list.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" * Removes task from the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" * @param taskNumber Index number of the corresponding task to be removed from list.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" public void remove(int taskNumber) {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" this.taskList.remove(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":59}},{"path":"src/main/java/teho/main/TehO.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import teho.exceptions.*;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"import static java.lang.Integer.parseInt;","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * Main class that represents a Personal Assistant Chatbot","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" * that helps a person to keep track of various things.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":"public class TehO {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" * Constructs a TehO instance with string representation of a file path","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" * to save and load tasks into and from.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" * @param filePath Path of file to save and load tasks into and from.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" public TehO(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" taskList \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" public String getResponse(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" String returnMessage \u003d null;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" if (userCommand.equals(\"bye\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d ui.generateGoodbyeMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.equals(\"list\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d ui.generateList(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" markTask(userCommand);","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d ui.generateUnmarkTaskMessage(taskList.getTask(parseInt(userCommand.split(\" \")[1]) - 1));;","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" unmarkTask(userCommand);","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d ui.generateMarkTaskMessage(taskList.getTask(parseInt(userCommand.split(\" \")[1]) - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d addToDo(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d addDeadline(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"event\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d addEvent(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d delete(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" } else if (userCommand.startsWith(\"find\")){","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" returnMessage \u003d find(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" return e.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":" return returnMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" ui.generateHelloMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":" storage.loadTasks();","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":" while (true) {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":" String userCommand \u003d sc.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"zannloo"},"content":" String response \u003d getResponse(userCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"zannloo"},"content":" System.out.println(response);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"zannloo"},"content":" if (userCommand.equals(\"bye\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"zannloo"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"zannloo"},"content":" sc.close();","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"zannloo"},"content":" * Represents the main method to start TehO.","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"zannloo"},"content":" * @param args Stores Java command-line arguments and is an array of type java.lang.String class.","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"zannloo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"zannloo"},"content":" new TehO(\"/Users/loomeilinzann/ip/text-ui-test/data/teho.txt\").run();","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"zannloo"},"content":" * Represents the marking of task according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the task to be marked.","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"zannloo"},"content":" public void markTask(String userCommand) {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"zannloo"},"content":" //note that split returns a String[]","lastModifiedDate":"2023-08-22"},{"lineNumber":95,"author":{"gitId":"zannloo"},"content":" //parseInt returns the integer value which is represented by the argument","lastModifiedDate":"2023-08-22"},{"lineNumber":96,"author":{"gitId":"zannloo"},"content":" int taskNumber \u003d parseInt(userCommand.split(\" \")[1]) - 1; //counting from 0","lastModifiedDate":"2023-08-22"},{"lineNumber":97,"author":{"gitId":"zannloo"},"content":" Task task \u003d this.taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"zannloo"},"content":" task.markAsDone(taskNumber);","lastModifiedDate":"2023-08-22"},{"lineNumber":99,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":100,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"zannloo"},"content":" * Represents the unmarking of task according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the task to be unmarked.","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"zannloo"},"content":" public void unmarkTask(String userCommand) {","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"zannloo"},"content":" int taskNumber \u003d parseInt(userCommand.split(\" \")[1]) - 1; //counting from 0","lastModifiedDate":"2023-08-22"},{"lineNumber":108,"author":{"gitId":"zannloo"},"content":" Task task \u003d this.taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"zannloo"},"content":" task.markAsNotDone(taskNumber);","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":111,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":112,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"zannloo"},"content":" * Represents the adding of new ToDo task into taskList according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the new ToDo task to be added into taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"zannloo"},"content":" public String addToDo(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":119,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c 5) {","lastModifiedDate":"2023-08-23"},{"lineNumber":120,"author":{"gitId":"zannloo"},"content":" throw new EmptyToDoDescriptionException();","lastModifiedDate":"2023-08-23"},{"lineNumber":121,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":122,"author":{"gitId":"zannloo"},"content":" String command \u003d userCommand.substring(5); //\"todo \" 5 index","lastModifiedDate":"2023-08-22"},{"lineNumber":123,"author":{"gitId":"zannloo"},"content":" Task task \u003d new ToDo(command);","lastModifiedDate":"2023-08-22"},{"lineNumber":124,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"zannloo"},"content":" return ui.generateAddToDoMessage(task, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"zannloo"},"content":" } catch (EmptyToDoDescriptionException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":127,"author":{"gitId":"zannloo"},"content":" return e.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":129,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":130,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":131,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"zannloo"},"content":" * Represents the adding of new Deadline task into taskList according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the new Deadline task to be added into taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"zannloo"},"content":" public String addDeadline(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":138,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c 9) {","lastModifiedDate":"2023-08-23"},{"lineNumber":139,"author":{"gitId":"zannloo"},"content":" throw new EmptyDeadlineDescriptionException();","lastModifiedDate":"2023-08-23"},{"lineNumber":140,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":141,"author":{"gitId":"zannloo"},"content":" String commandWithDate \u003d userCommand.substring(9); //\"deadline \" 9 index","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"zannloo"},"content":" String cDeadline \u003d commandWithDate.split(\" /by \")[0]; //just description","lastModifiedDate":"2023-08-23"},{"lineNumber":143,"author":{"gitId":"zannloo"},"content":" LocalDate byDate \u003d LocalDate.parse(commandWithDate.split(\" /by \")[1]); //just byDate","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"zannloo"},"content":" Task task \u003d new Deadline(cDeadline, byDate);","lastModifiedDate":"2023-08-23"},{"lineNumber":145,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"zannloo"},"content":" return ui.generateAddDeadlineMessage(task, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"zannloo"},"content":" } catch (EmptyDeadlineDescriptionException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":148,"author":{"gitId":"zannloo"},"content":" return e.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":150,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":151,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":152,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":153,"author":{"gitId":"zannloo"},"content":" * Represents the addition of new Event task into taskList according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the new Event task to be added into taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"zannloo"},"content":" public String addEvent(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":159,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c 6) {","lastModifiedDate":"2023-08-23"},{"lineNumber":160,"author":{"gitId":"zannloo"},"content":" throw new EmptyEventDescriptionException();","lastModifiedDate":"2023-08-23"},{"lineNumber":161,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":162,"author":{"gitId":"zannloo"},"content":" String commandWithDate \u003d userCommand.substring(6); //\"todo \" 6 index","lastModifiedDate":"2023-08-22"},{"lineNumber":163,"author":{"gitId":"zannloo"},"content":" String cEvent \u003d commandWithDate.split(\" /from \")[0]; //just description","lastModifiedDate":"2023-08-23"},{"lineNumber":164,"author":{"gitId":"zannloo"},"content":" String dates \u003d commandWithDate.split(\" /from \")[1]; //bothDates","lastModifiedDate":"2023-08-23"},{"lineNumber":165,"author":{"gitId":"zannloo"},"content":" LocalDate fromDate \u003d LocalDate.parse(dates.split(\" /to \")[0]); //just fromDate","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"zannloo"},"content":" LocalDate toDate \u003d LocalDate.parse(dates.split(\" /to \")[1]); //just toDate","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"zannloo"},"content":" Task task \u003d new Event(cEvent, fromDate, toDate);","lastModifiedDate":"2023-08-23"},{"lineNumber":168,"author":{"gitId":"zannloo"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"zannloo"},"content":" return ui.generateAddEventMessage(task, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"zannloo"},"content":" } catch (EmptyEventDescriptionException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":171,"author":{"gitId":"zannloo"},"content":" return e.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":173,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":174,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":175,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":176,"author":{"gitId":"zannloo"},"content":" * Represents the deletion of task from taskList according to user\u0027s command.","lastModifiedDate":"2023-08-28"},{"lineNumber":177,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":178,"author":{"gitId":"zannloo"},"content":" * @param userCommand User\u0027s command containing the task to be deleted from taskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":179,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":180,"author":{"gitId":"zannloo"},"content":" public String delete(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"zannloo"},"content":" int taskNumber \u003d parseInt(userCommand.split(\" \")[1]) - 1; //counting from 0","lastModifiedDate":"2023-08-23"},{"lineNumber":182,"author":{"gitId":"zannloo"},"content":" Task task \u003d this.taskList.getTask(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"zannloo"},"content":" this.taskList.remove(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"zannloo"},"content":" return ui.generateDeleteMessage(task, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":185,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":186,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":187,"author":{"gitId":"zannloo"},"content":" public String find(String userCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":188,"author":{"gitId":"zannloo"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":189,"author":{"gitId":"zannloo"},"content":" if (userCommand.length() \u003c 5) {","lastModifiedDate":"2023-08-28"},{"lineNumber":190,"author":{"gitId":"zannloo"},"content":" throw new EmptyFindDescriptionException();","lastModifiedDate":"2023-08-28"},{"lineNumber":191,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":192,"author":{"gitId":"zannloo"},"content":" String toMatch \u003d userCommand.substring(5); //\"deadline \" 9 index","lastModifiedDate":"2023-08-28"},{"lineNumber":193,"author":{"gitId":"zannloo"},"content":" return ui.generateFindMessage(toMatch, taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":194,"author":{"gitId":"zannloo"},"content":" } catch (EmptyFindDescriptionException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":195,"author":{"gitId":"zannloo"},"content":" return e.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":196,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":197,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":198,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-20"},{"lineNumber":199,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":199}},{"path":"src/main/java/teho/main/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import teho.main.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":" * Represents a task with only a description.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" * Constructs new ToDo task with description.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" * @param description Description of task to be done.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the task details.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" * @return String representation of the ToDo task.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" return \"[T]\" + super.getStatusIcon() + \" \" + this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" * Returns a string representation of the task details for saving task in file.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" * @return String representation of the ToDo task.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" public String fileString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" String digitStatus \u003d this.isDone? \"1\": \"0\";","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" return \"T|\" + digitStatus + \"|\" + this.description;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"zannloo":38}},{"path":"src/main/java/teho/main/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"import java.lang.StringBuilder;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":" * Deals with interactions with the user through generating messages.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" * Generates hello message when TehO chatbot starts.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" * @return String representation of hello message","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" public static String generateHelloMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" return \"Hello! I\u0027m TehO \\nWhat can I do for you?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" * Generates goodbye message when user types bye and TehO chatbot exits.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" * @return String representation of bye message.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" public static String generateGoodbyeMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":" * Generates message containing list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks to be generated.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"zannloo"},"content":" * @return String representation of list of tasks generated.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"zannloo"},"content":" public static String generateList(TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"zannloo"},"content":" String str \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"zannloo"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"zannloo"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"zannloo"},"content":" str +\u003d (i + 1) + \". \" + task.toString() + \"\\n\";;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"zannloo"},"content":" return str;","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"zannloo"},"content":" * Generates message to show that task is marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"zannloo"},"content":" * @param task Task marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"zannloo"},"content":" * @return String representation of marked task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"zannloo"},"content":" public static String generateMarkTaskMessage(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"zannloo"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"zannloo"},"content":" * Generates message to show that task is marked as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"zannloo"},"content":" * @param task Task marked as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"zannloo"},"content":" * @return String representation of unmarked task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"zannloo"},"content":" public String generateUnmarkTaskMessage(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"zannloo"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"zannloo"},"content":" * Generates message to show that ToDo task is added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"zannloo"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks that added task.","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"zannloo"},"content":" * @return String representation of add ToDo task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"zannloo"},"content":" public String generateAddToDoMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"zannloo"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"zannloo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"zannloo"},"content":" + \"Now you have \" + taskList.getSize() + \" task(s) in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"zannloo"},"content":" * Generates message to show that Deadline task is added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"zannloo"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks that added task.","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"zannloo"},"content":" * @return String representation of add Deadline task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"zannloo"},"content":" public String generateAddDeadlineMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"zannloo"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"zannloo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"zannloo"},"content":" + \"Now you have \" + taskList.getSize() + \" task(s) in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"zannloo"},"content":" * Generates message to show that Event task is added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"zannloo"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks that added task.","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"zannloo"},"content":" * @return String representation of add Event task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"zannloo"},"content":" public String generateAddEventMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"zannloo"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"zannloo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"zannloo"},"content":" + \"Now you have \" + taskList.getSize() + \" task(s) in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"zannloo"},"content":" * Generates message to show that task is deleted from list.","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"zannloo"},"content":" * @param task Task deleted from list.","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks to delete task from.","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"zannloo"},"content":" * @return String representation of delete task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"zannloo"},"content":" public String generateDeleteMessage(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"zannloo"},"content":" return \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"zannloo"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"zannloo"},"content":" + \"Now you have \" + taskList.getSize() + \" task(s) in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"zannloo"},"content":" * Generates message to show that there is a loading error.","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"zannloo"},"content":" * @return String representation of loading error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"zannloo"},"content":" public String showLoadingError() {","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"zannloo"},"content":" return \"OHNO! Loading error!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"zannloo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"zannloo"},"content":" * Generates message containing list of tasks that matches the user\u0027s command.","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"zannloo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"zannloo"},"content":" * @param toMatch User\u0027s command to be matched with tasks in list.","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"zannloo"},"content":" * @param taskList List of tasks to be matched from.","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"zannloo"},"content":" * @return String representation of list of tasks that matches user\u0027s command.","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"zannloo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"zannloo"},"content":" public String generateFindMessage(String toMatch, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"zannloo"},"content":" String str \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"zannloo"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"zannloo"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"zannloo"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"zannloo"},"content":" String stringTask \u003d task.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"zannloo"},"content":" if (stringTask.contains(toMatch)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"zannloo"},"content":" count++;","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"zannloo"},"content":" str +\u003d count + \". \" + stringTask + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"zannloo"},"content":" if (count \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"zannloo"},"content":" str +\u003d \"There is no matching task:(\";","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"zannloo"},"content":" return str;","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"zannloo":145}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"zannloo"},"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-05"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"zannloo"},"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":12,"author":{"gitId":"zannloo"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"zannloo":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"zannloo"},"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\"teho.main.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"zannloo"},"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-05"},{"lineNumber":12,"author":{"gitId":"zannloo"},"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-05"},{"lineNumber":13,"author":{"gitId":"zannloo"},"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-05"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"zannloo":19}},{"path":"src/test/java/teho/main/DeadLineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main; //same package as the class being tested","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":"public class DeadLineTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" public void toStringTest() {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":" LocalDate byDate \u003d LocalDate.parse(\"2019-10-15\");","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" String command \u003d \"Do homework\";","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" Task task \u003d new Deadline(command, byDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" assertEquals(\"[D][ ] Do homework (by: Oct 15 2019)\", task.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":" public void fileStringTest() {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":" LocalDate byDate \u003d LocalDate.parse(\"2019-10-15\");","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":" String command \u003d \"Do assignment\";","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"zannloo"},"content":" Task task \u003d new Deadline(command, byDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"zannloo"},"content":" assertEquals(\"D|0|Do assignment|2019-10-15\", task.fileString());","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"zannloo":27}},{"path":"src/test/java/teho/main/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"package teho.main; //same package as the class being tested","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"zannloo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"zannloo"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"zannloo"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"zannloo"},"content":" public void toStringTest(){","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"zannloo"},"content":" String command \u003d \"Eat dinner\";","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"zannloo"},"content":" Task task \u003d new ToDo(command);","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"zannloo"},"content":" assertEquals(\"[T][ ] Eat dinner\", task.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"zannloo"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"zannloo"},"content":" public void fileStringTest() {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"zannloo"},"content":" String command \u003d \"Dance\";","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"zannloo"},"content":" Task task \u003d new ToDo(command);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"zannloo"},"content":" assertEquals(\"T|0|Dance\", task.fileString());","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"zannloo"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"zannloo"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"zannloo"},"content":"","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"zannloo":22}},{"path":"text-ui-test/data/teho.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"T|1|borrow book","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"D|1|return book|2023-12-14","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"zannloo"},"content":"E|0|project meeting|2023-12-13|2023-12-15","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"zannloo":3}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"zannloo"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"zannloo"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zannloo":2}},{"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":"zannloo"},"content":"java -classpath ..\\bin TehO \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-23"},{"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":{"zannloo":1,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"zannloo"},"content":"java -classpath ../bin TehO \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"zannloo"},"content":"diff ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"zannloo":2,"-":32}}] diff --git a/zannloo_ip_master/commits.json b/zannloo_ip_master/commits.json index cd428e9f..587bf7d3 100644 --- a/zannloo_ip_master/commits.json +++ b/zannloo_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"zannloo":[{"date":"2023-08-20","commitResults":[{"hash":"76e343f4a010c3e32350a774fab484e9df622f1f","isMergeCommit":false,"messageTitle":"add TehO.java","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":10}}}]},{"date":"2023-08-21","commitResults":[{"hash":"a0134a82c33662fd544c065fca4b37815fc6e156","isMergeCommit":false,"messageTitle":"Improved TehO by allowing it echo commands entered by user and exit with command bye.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":3}}},{"hash":"438506fe459fe397424484cfcc5b22187b8d54a8","isMergeCommit":false,"messageTitle":"added methods addTask and listTask to TehO.java","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":1}}}]},{"date":"2023-08-22","commitResults":[{"hash":"05bde19cd1df5ec1a33f1ac3cb8afe5835536fc5","isMergeCommit":false,"messageTitle":"added new methods to mark and unmark tasks in TehO.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":7}}},{"hash":"4f2034be832c5e010f72d68868813c9539ce1d40","isMergeCommit":false,"messageTitle":"add 3 new class that inherit from Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"fa8d6fa781af0d1ed1859f3c42790ebac1dc9a50","isMergeCommit":false,"messageTitle":"add Task.java (for lvl3) and separated toString() method and getStatusIcon() method","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":3}}},{"hash":"190ef8c9214af663d4e2f7b4c5614202ffeaeaf9","isMergeCommit":false,"messageTitle":"included todo, deadline and event (incompleted)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"10415eb7d42e68c3587943381f9020c133eaa4f2","isMergeCommit":false,"messageTitle":"add support for tracking three types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":17}}}]},{"date":"2023-08-23","commitResults":[{"hash":"4d0cb552c8edc499da2721b700cafbe26c46dddf","isMergeCommit":false,"messageTitle":"Use Exceptions to handle two types of errors shown in the example (Minimal).","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":30}}},{"hash":"46a036f6353c9f3d3f5ee4562b6fe1244ad0d887","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list and switching to ArrayList. (draft1)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":20}}},{"hash":"da04e8f5b78f46a1b50480ff690f06bbe485dd0d","isMergeCommit":false,"messageTitle":"reverting back to Lvl4 because I missed out A-TextUiTesting","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":44,"deletions":123}}},{"hash":"20cf165ed0c44391a914573b41396bba400a44fb","isMergeCommit":false,"messageTitle":"editing the runtest.sh for test using the I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"sh":{"insertions":3,"deletions":7}}},{"hash":"ae7e6fb1cc412a56fb9246d52f7c5239923dc533","isMergeCommit":false,"messageTitle":"Use Expressions to handle two types of errors shown in the website.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":30},"bat":{"insertions":1,"deletions":1}}},{"hash":"007e48e53b36477323fa9a676144ef9439a3e5b8","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list and switching to ArrayList (draft1).","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":17}}},{"hash":"97c54987f17ee00a64c25a1c110733c9bf861dfc","isMergeCommit":false,"messageTitle":"added the close scanner method (draft 2 of lvl6)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":33}}},{"hash":"806702a2f4380b76b56116bfdf7fcb1991f18d3e","isMergeCommit":false,"messageTitle":"lvl 6 draft 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":71}}},{"hash":"716f8737a7e2f2d3f825ff629e970e7159676dd1","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list and corrected old mistakes of not showing the time.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":20}}},{"hash":"62d6780ca79c433ca98352b49bd27a6d2b4d2abd","isMergeCommit":false,"messageTitle":"last edits for Level 6.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":7}}}]},{"date":"2023-08-24","commitResults":[{"hash":"87e9f2bb29b37e2764557fcacc0b25f4562cba3b","isMergeCommit":false,"messageTitle":"final changes and adding the @Override","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"9d5c38d7c2ce0ace36bde6174363bc3b0d5f0943","isMergeCommit":false,"messageTitle":"Add teho.txt","messageBody":"TehO class: Update to enable saving of tasks\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":94,"deletions":12}}},{"hash":"29e1785d2083ba8286f931acd6ddc88b51b584fe","isMergeCommit":false,"messageTitle":"Unsure if the previous reverted commit was undone","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":7,"deletions":4}}},{"hash":"42eecabb97d61231dbc790bb6dc00ff238f5e4b2","isMergeCommit":false,"messageTitle":"Store and accept date in a new format","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":25,"deletions":14}}},{"hash":"773bd8c3ab07a7991701508a84b9ef5b37d54b57","isMergeCommit":false,"messageTitle":"Update to have more OOP","messageBody":"Add Ui class: deals with interactions with the user\nAdd Storage class: deals with loading tasks from the file and saving tasks in the file\nAdd Parser class: deals with making sense of the user command\nAdd TaskList class: contains the task list e.g., it has operations to add/delete tasks in the list\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":191,"deletions":110}}},{"hash":"2f4d884bf00e6d2886da57b931153d8e6e45e173","isMergeCommit":false,"messageTitle":"Organize classes into 2 packages, teho.exceptions and teho.main","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"c4d4f5dfb95cbeb4ec485edd39fbf715f2dc3dc8","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"15dc2046844b8cd8756328f454d522659d7ee74e","isMergeCommit":false,"messageTitle":"Add ToDoTest and DeadlineTest to test behaviour of code using JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":2}}},{"hash":"b2193febaf007fff7cac76691077edd120a9f7e5","isMergeCommit":false,"messageTitle":"Change build.gradle for A-Jar increment","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":3}}},{"hash":"761104672e5c940d1ee6d7e2f59ba26ce77a3c3c","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":306,"deletions":13}}},{"hash":"1b3f9ad4857ea57194be68a39c4dd9016d14812a","isMergeCommit":false,"messageTitle":"Add new feature to allow users find a task by searching for a keyword","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":39,"deletions":5}}},{"hash":"bcd20a3244aae601eca7ddb78eb0569433b7095b","isMergeCommit":false,"messageTitle":"Tweak the code to comply with a coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"4ee497a5f76010249b244fdf1d62919c1e4798c3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"* branch-A-CodingStandard:\n Tweak the code to comply with a coding standard\n","fileTypesAndContributionMap":{}},{"hash":"2ab575aaf7a1f60da8d37d86e670783b0c086121","isMergeCommit":false,"messageTitle":"commit Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"eec346ae58c0c53d38315e5ce7d13fc53490dc71","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n commit Storage class\n","fileTypesAndContributionMap":{}},{"hash":"e2ce91eb5aca489a74872f2edaa6a0b078a457a0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"* branch-A-JavaDoc:\n Add JavaDoc\n\n# Conflicts:\n#\tsrc/main/java/teho/main/Storage.java\n#\tsrc/main/java/teho/main/TehO.java\n#\ttext-ui-test/data/teho.txt\n","fileTypesAndContributionMap":{}},{"hash":"0d9c7358df3531cc5d57b3b48d4744a9e93c8160","isMergeCommit":false,"messageTitle":"Fix some errors in Parser class","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":8},"java":{"insertions":1,"deletions":3}}}]}]},"authorFileTypeContributionMap":{"zannloo":{"java":829,"md":0,"fxml":0,"sh":2,"bat":1,"gradle":4,"txt":2}},"authorContributionVariance":{"zannloo":68385.16},"authorDisplayNameMap":{"zannloo":"CS2103T-W15-2 LOO ..ZANN"}} +{"authorDailyContributionsMap":{"zannloo":[{"date":"2023-08-20","commitResults":[{"hash":"76e343f4a010c3e32350a774fab484e9df622f1f","isMergeCommit":false,"messageTitle":"add TehO.java","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":10}}}]},{"date":"2023-08-21","commitResults":[{"hash":"a0134a82c33662fd544c065fca4b37815fc6e156","isMergeCommit":false,"messageTitle":"Improved TehO by allowing it echo commands entered by user and exit with command bye.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":3}}},{"hash":"438506fe459fe397424484cfcc5b22187b8d54a8","isMergeCommit":false,"messageTitle":"added methods addTask and listTask to TehO.java","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":1}}}]},{"date":"2023-08-22","commitResults":[{"hash":"05bde19cd1df5ec1a33f1ac3cb8afe5835536fc5","isMergeCommit":false,"messageTitle":"added new methods to mark and unmark tasks in TehO.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":7}}},{"hash":"4f2034be832c5e010f72d68868813c9539ce1d40","isMergeCommit":false,"messageTitle":"add 3 new class that inherit from Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"fa8d6fa781af0d1ed1859f3c42790ebac1dc9a50","isMergeCommit":false,"messageTitle":"add Task.java (for lvl3) and separated toString() method and getStatusIcon() method","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":3}}},{"hash":"190ef8c9214af663d4e2f7b4c5614202ffeaeaf9","isMergeCommit":false,"messageTitle":"included todo, deadline and event (incompleted)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"10415eb7d42e68c3587943381f9020c133eaa4f2","isMergeCommit":false,"messageTitle":"add support for tracking three types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":17}}}]},{"date":"2023-08-23","commitResults":[{"hash":"4d0cb552c8edc499da2721b700cafbe26c46dddf","isMergeCommit":false,"messageTitle":"Use Exceptions to handle two types of errors shown in the example (Minimal).","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":30}}},{"hash":"46a036f6353c9f3d3f5ee4562b6fe1244ad0d887","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list and switching to ArrayList. (draft1)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":20}}},{"hash":"da04e8f5b78f46a1b50480ff690f06bbe485dd0d","isMergeCommit":false,"messageTitle":"reverting back to Lvl4 because I missed out A-TextUiTesting","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":44,"deletions":123}}},{"hash":"20cf165ed0c44391a914573b41396bba400a44fb","isMergeCommit":false,"messageTitle":"editing the runtest.sh for test using the I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"sh":{"insertions":3,"deletions":7}}},{"hash":"ae7e6fb1cc412a56fb9246d52f7c5239923dc533","isMergeCommit":false,"messageTitle":"Use Expressions to handle two types of errors shown in the website.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":30},"bat":{"insertions":1,"deletions":1}}},{"hash":"007e48e53b36477323fa9a676144ef9439a3e5b8","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list and switching to ArrayList (draft1).","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":17}}},{"hash":"97c54987f17ee00a64c25a1c110733c9bf861dfc","isMergeCommit":false,"messageTitle":"added the close scanner method (draft 2 of lvl6)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":33}}},{"hash":"806702a2f4380b76b56116bfdf7fcb1991f18d3e","isMergeCommit":false,"messageTitle":"lvl 6 draft 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":71}}},{"hash":"716f8737a7e2f2d3f825ff629e970e7159676dd1","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list and corrected old mistakes of not showing the time.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":20}}},{"hash":"62d6780ca79c433ca98352b49bd27a6d2b4d2abd","isMergeCommit":false,"messageTitle":"last edits for Level 6.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":7}}}]},{"date":"2023-08-24","commitResults":[{"hash":"87e9f2bb29b37e2764557fcacc0b25f4562cba3b","isMergeCommit":false,"messageTitle":"final changes and adding the @Override","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"9d5c38d7c2ce0ace36bde6174363bc3b0d5f0943","isMergeCommit":false,"messageTitle":"Add teho.txt","messageBody":"TehO class: Update to enable saving of tasks\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":94,"deletions":12}}},{"hash":"29e1785d2083ba8286f931acd6ddc88b51b584fe","isMergeCommit":false,"messageTitle":"Unsure if the previous reverted commit was undone","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":7,"deletions":4}}},{"hash":"42eecabb97d61231dbc790bb6dc00ff238f5e4b2","isMergeCommit":false,"messageTitle":"Store and accept date in a new format","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":25,"deletions":14}}},{"hash":"773bd8c3ab07a7991701508a84b9ef5b37d54b57","isMergeCommit":false,"messageTitle":"Update to have more OOP","messageBody":"Add Ui class: deals with interactions with the user\nAdd Storage class: deals with loading tasks from the file and saving tasks in the file\nAdd Parser class: deals with making sense of the user command\nAdd TaskList class: contains the task list e.g., it has operations to add/delete tasks in the list\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":191,"deletions":110}}},{"hash":"2f4d884bf00e6d2886da57b931153d8e6e45e173","isMergeCommit":false,"messageTitle":"Organize classes into 2 packages, teho.exceptions and teho.main","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"c4d4f5dfb95cbeb4ec485edd39fbf715f2dc3dc8","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"15dc2046844b8cd8756328f454d522659d7ee74e","isMergeCommit":false,"messageTitle":"Add ToDoTest and DeadlineTest to test behaviour of code using JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":2}}},{"hash":"b2193febaf007fff7cac76691077edd120a9f7e5","isMergeCommit":false,"messageTitle":"Change build.gradle for A-Jar increment","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":3}}},{"hash":"761104672e5c940d1ee6d7e2f59ba26ce77a3c3c","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":306,"deletions":13}}},{"hash":"1b3f9ad4857ea57194be68a39c4dd9016d14812a","isMergeCommit":false,"messageTitle":"Add new feature to allow users find a task by searching for a keyword","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":39,"deletions":5}}},{"hash":"bcd20a3244aae601eca7ddb78eb0569433b7095b","isMergeCommit":false,"messageTitle":"Tweak the code to comply with a coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"4ee497a5f76010249b244fdf1d62919c1e4798c3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"* branch-A-CodingStandard:\n Tweak the code to comply with a coding standard\n","fileTypesAndContributionMap":{}},{"hash":"2ab575aaf7a1f60da8d37d86e670783b0c086121","isMergeCommit":false,"messageTitle":"commit Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"eec346ae58c0c53d38315e5ce7d13fc53490dc71","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n commit Storage class\n","fileTypesAndContributionMap":{}},{"hash":"e2ce91eb5aca489a74872f2edaa6a0b078a457a0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"* branch-A-JavaDoc:\n Add JavaDoc\n\n# Conflicts:\n#\tsrc/main/java/teho/main/Storage.java\n#\tsrc/main/java/teho/main/TehO.java\n#\ttext-ui-test/data/teho.txt\n","fileTypesAndContributionMap":{}},{"hash":"0d9c7358df3531cc5d57b3b48d4744a9e93c8160","isMergeCommit":false,"messageTitle":"Fix some errors in Parser class","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":8},"java":{"insertions":1,"deletions":3}}}]},{"date":"2023-09-05","commitResults":[{"hash":"0e52cf45d7d8bf6ea79e1df0a1b25a6ea479e4e5","isMergeCommit":false,"messageTitle":"Edits for level 10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":13,"deletions":0},"fxml":{"insertions":35,"deletions":0},"txt":{"insertions":3,"deletions":0},"java":{"insertions":279,"deletions":85}}}]}]},"authorFileTypeContributionMap":{"zannloo":{"java":1023,"md":0,"fxml":35,"sh":2,"bat":1,"gradle":17,"txt":5}},"authorContributionVariance":{"zannloo":51552.957},"authorDisplayNameMap":{"zannloo":"CS2103T-W15-2 LOO ..ZANN"}}

h4Q6Z|Rj3#PHgWSdr0BRLn7>^8{gOa4mCuG{& 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